[Pkg-mozext-commits] [firebug] 02/07: Imported Upstream version 1.13.0~a8

David Prévot taffit at moszumanska.debian.org
Sun Jan 26 23:43:29 UTC 2014


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository firebug.

commit 17e98483fe7efabfdf161801ceae0b4adb0fd471
Author: David Prévot <taffit at debian.org>
Date:   Sun Jan 26 13:19:19 2014 -0400

    Imported Upstream version 1.13.0~a8
---
 build.js                                           |    1 -
 chrome.manifest                                    |   13 +-
 content/firebug/accessible/a11y.js                 |   19 +-
 content/firebug/branch.properties                  |   14 +-
 content/firebug/bti/inProcess/javascripttool.js    |    5 +-
 content/firebug/chrome/activableModule.js          |  141 ++
 content/firebug/chrome/activablePanel.js           |   80 +
 content/firebug/chrome/activation.js               |   27 +-
 content/firebug/chrome/annotations.js              |    5 +-
 content/firebug/chrome/balloonNote.js              |   11 +-
 content/firebug/chrome/chrome.js                   |   17 +-
 content/firebug/chrome/eventSource.js              |   82 +
 content/firebug/chrome/infotip.js                  |   10 +-
 content/firebug/chrome/knownIssues.js              |   31 +-
 content/firebug/chrome/measureBox.js               |   97 +
 content/firebug/chrome/menu.js                     |   15 +-
 content/firebug/chrome/module.js                   |  135 ++
 content/firebug/chrome/navigationHistory.js        |   28 +-
 content/firebug/chrome/panel.js                    |  726 ++++++++
 content/firebug/chrome/panelActivation.js          |   60 +-
 content/firebug/chrome/panelNotification.js        |   90 +
 content/firebug/chrome/plugin.js                   |   24 +-
 content/firebug/chrome/privacy.js                  |    5 +-
 content/firebug/chrome/rep.js                      |  167 ++
 content/firebug/chrome/reps.js                     |  338 +---
 content/firebug/chrome/searchBox.js                |   52 +-
 content/firebug/chrome/shortcuts.js                |   27 +-
 content/firebug/chrome/tabWatcher.js               |   12 +-
 content/firebug/chrome/tableRep.js                 |  172 +-
 content/firebug/chrome/toggleSidePanels.js         |    9 +-
 content/firebug/console/autoCompleter.js           |  212 ++-
 content/firebug/console/closureInspector.js        |   19 +-
 content/firebug/console/commandEditor.js           |   44 +-
 content/firebug/console/commandLine.js             |   19 +-
 content/firebug/console/commandLineAPI.js          |   13 -
 content/firebug/console/commandLineExposed.js      |  199 ++-
 content/firebug/console/commandLinePopup.js        |    9 +-
 .../firebug/console/commands/commandLineHelp.js    |    9 +-
 .../firebug/console/commands/commandLineInclude.js |   88 +-
 content/firebug/console/commands/eventMonitor.js   |   72 +-
 .../firebug/console/commands/getEventListeners.js  |  469 ++++-
 .../console/commands/lastCommandLineResult.js      |    9 +-
 content/firebug/console/commands/profiler.js       |   17 +-
 .../firebug/console/commands/useInCommandLine.js   |    9 +-
 content/firebug/console/console.js                 |  203 +--
 content/firebug/console/consoleBase.js             |  162 ++
 content/firebug/console/consoleExposed.js          |   70 +-
 content/firebug/console/consolePanel.js            |   51 +-
 content/firebug/console/errorMessageRep.js         |   14 +-
 content/firebug/console/errors.js                  |    7 +-
 content/firebug/console/exceptionRep.js            |    5 +-
 content/firebug/console/functionMonitor.js         |   21 +-
 content/firebug/console/memoryProfiler.js          |  864 ---------
 content/firebug/console/performanceTiming.js       |   14 +-
 content/firebug/cookies/breakpoints.js             |   13 +-
 content/firebug/cookies/cookieModule.js            |   61 +-
 content/firebug/cookies/cookiePanel.js             |   30 +-
 content/firebug/cookies/cookiePanel.xul            |    2 +-
 content/firebug/cookies/cookieReps.js              |   70 +-
 content/firebug/cookies/legacy.js                  |    7 +-
 content/firebug/css/autoCompleter.js               |  197 ++
 content/firebug/css/computedPanel.js               |   91 +-
 content/firebug/css/cssModule.js                   |   26 +-
 content/firebug/css/cssPanel.js                    |  315 ++--
 content/firebug/css/cssPanelMutationObserver.js    |    9 +-
 content/firebug/css/cssPanelUpdater.js             |    5 +-
 content/firebug/css/cssReps.js                     |   13 +-
 content/firebug/css/selectorEditor.js              |   95 +-
 content/firebug/css/selectorModule.js              |    5 +-
 content/firebug/css/selectorPanel.js               |   34 +-
 content/firebug/css/stylePanel.js                  |    6 +-
 content/firebug/debugger/debuggerLib.js            |   17 +-
 content/firebug/dom/domBasePanel.js                |   23 +-
 content/firebug/dom/domBreakpointGroup.js          |   12 +-
 content/firebug/dom/domEditor.js                   |   10 +-
 content/firebug/dom/domMemberProvider.js           |   19 +-
 content/firebug/dom/domModule.js                   |    9 +-
 content/firebug/dom/domReps.js                     |   71 +-
 content/firebug/editor/baseEditor.js               |  103 ++
 .../firebug/editor/codemirror/html-hint-data.js    |  364 ++++
 content/firebug/editor/editor.js                   |  693 +------
 content/firebug/editor/inlineEditor.js             |  540 ++++++
 content/firebug/firebug.css                        |   72 +-
 content/firebug/firebug.js                         | 1356 +-------------
 content/firebug/firebugOverlay.xul                 |   19 +-
 .../firebug/firebugui}/panel.css                   |    3 +
 content/firebug/firebugui/panel.html               |    2 +-
 content/firebug/firefox/bindings.xml               |  480 +----
 content/firebug/firefox/browserCommands.js         |   57 -
 content/firebug/firefox/browserMenu.js             |  123 +-
 content/firebug/firefox/browserOverlay.css         |   29 +-
 content/firebug/firefox/browserOverlay.js          |   35 +-
 content/firebug/firefox/browserOverlayLib.js       |   35 +-
 content/firebug/firefox/browserToolbar.js          |   51 +-
 content/firebug/firefox/customizeShortcuts.js      |  419 ++---
 content/firebug/firefox/customizeShortcuts.xul     |   14 +-
 .../firefox/external-editors/changeeditor.js       |  422 ++---
 .../firefox/external-editors/changeeditor.xul      |   29 +-
 .../firebug/firefox/external-editors/editors.js    |  196 +-
 .../firebug/firefox/external-editors/editors.xul   |   32 +-
 .../firefox/external-editors/externalEditors.js    |   45 +-
 content/firebug/firefox/firebugFrame.xul           |    2 +
 content/firebug/firefox/firebugMenuOverlay.xul     |    1 -
 content/firebug/firefox/macBrowserOverlay.css      |    8 +-
 content/firebug/firefox/searchBox.xml              |  453 +++++
 .../firebug/firefox/start-button/startButton.xml   |    3 -
 .../firefox/start-button/startButtonOverlay.js     |  148 +-
 content/firebug/html/attributeEditor.js            |  400 +++++
 content/firebug/html/highlighter.css               |    3 +
 content/firebug/html/highlighterCache.js           |    2 +
 content/firebug/html/htmlLib.js                    |  215 ++-
 content/firebug/html/htmlModule.js                 |  505 ++++++
 content/firebug/html/htmlPanel.js                  | 1079 ++---------
 content/firebug/html/htmlReps.js                   |  357 ++++
 content/firebug/html/insideOutBox.js               |   15 +-
 content/firebug/html/inspector.js                  |   52 +-
 content/firebug/html/layout.js                     |   37 +-
 content/firebug/html/quickInfoBox.css              |    4 +
 content/firebug/html/quickInfoBox.js               |  411 +++--
 content/firebug/js/breakpoint.js                   |   38 +-
 content/firebug/js/callstack.js                    |    9 +-
 content/firebug/js/debugger.js                     |   67 +-
 content/firebug/js/scriptPanel.js                  |  117 +-
 content/firebug/js/sourceBox.js                    |   17 +-
 content/firebug/js/sourceCache.js                  |    5 +-
 content/firebug/js/tabCache.js                     |   39 +-
 content/firebug/js/watchPanel.js                   |    3 +-
 content/firebug/lib/array.js                       |   21 +-
 content/firebug/lib/css.js                         |   54 +-
 content/firebug/lib/dom.js                         |   20 +-
 content/firebug/lib/domplate.js                    |   34 +-
 content/firebug/lib/dragdrop.js                    |    7 +-
 content/firebug/lib/events.js                      |  126 +-
 content/firebug/lib/fonts.js                       |    2 +
 content/firebug/lib/http.js                        |    2 +
 content/firebug/lib/json.js                        |  205 ++-
 content/firebug/lib/keywords.js                    |    4 +-
 content/firebug/lib/locale.js                      |    7 +-
 content/firebug/lib/object.js                      |   15 +-
 content/firebug/lib/options.js                     |    4 +-
 content/firebug/lib/persist.js                     |   28 +-
 content/firebug/lib/search.js                      |   12 +
 content/firebug/lib/string.js                      |   45 +-
 content/firebug/lib/system.js                      |   47 +
 content/firebug/lib/tool.js                        |    5 +
 content/firebug/lib/trace.js                       |   45 +-
 content/firebug/lib/url.js                         |    2 +
 content/firebug/lib/wrapper.js                     |   23 +-
 content/firebug/lib/xml.js                         |  305 +++-
 content/firebug/lib/xpath.js                       |    3 +
 content/firebug/lib/xpcom.js                       |    7 +-
 content/firebug/main.js                            |    2 +-
 content/firebug/moduleConfig.js                    |    3 -
 content/firebug/net/fontViewer.js                  |   12 +-
 content/firebug/net/httpActivityObserver.js        |    5 +-
 content/firebug/net/jsonViewer.js                  |   34 +-
 content/firebug/net/netCacheReader.js              |    9 +-
 content/firebug/net/netDebugger.js                 |    9 +-
 content/firebug/net/netMonitor.js                  |   23 +-
 content/firebug/net/netPanel.js                    |   82 +-
 content/firebug/net/netReps.js                     |  223 ++-
 content/firebug/net/netUtils.js                    |   66 +-
 content/firebug/net/spy.js                         |  151 +-
 content/firebug/net/svgViewer.js                   |   46 +-
 content/firebug/net/timeInfoTip.js                 |   10 +-
 content/firebug/net/xmlViewer.js                   |   40 +-
 content/firebug/trace/traceModule.js               |    7 +-
 defaults/preferences/firebug.js                    |   24 +-
 defaults/preferences/tracingConsole.js             |    2 -
 install.rdf                                        |    9 +-
 locale/bg/cookies.properties                       |  406 ++---
 locale/bg/firebug.properties                       | 1890 +++++++++++---------
 locale/bg/selectors.properties                     |   10 +
 locale/de/cookies.properties                       |    3 +-
 locale/de/firebug-amo.properties                   |    4 +-
 locale/de/firebug.properties                       |   78 +-
 locale/de/selectors.properties                     |    2 +-
 locale/en-US/cookies.properties                    |    1 +
 locale/en-US/firebug.properties                    |  102 +-
 locale/en-US/keys.properties                       |   12 +
 locale/en-US/selectors.properties                  |    5 +-
 locale/fr/cookies.properties                       |  262 +--
 locale/fr/firebug-amo.properties                   |   10 +-
 locale/fr/firebug-tracing.properties               |   92 +-
 locale/fr/firebug.properties                       | 1571 +++++++---------
 locale/fr/selectors.properties                     |   10 +
 locale/hu-HU/cookies.properties                    |  154 +-
 locale/hu-HU/firebug-amo.properties                |    4 -
 locale/hu-HU/firebug-tracing.properties            |    3 -
 locale/hu-HU/firebug.properties                    | 1000 ++++++-----
 locale/hu-HU/selectors.properties                  |   10 +
 locale/ru/cookies.properties                       |  138 ++
 locale/ru/firebug-amo.properties                   |   10 +-
 locale/ru/firebug-tracing.properties               |    3 +
 locale/ru/firebug.properties                       |  749 +++++++-
 modules/firebug-service.js                         |   89 -
 modules/loader.js                                  |    2 +-
 modules/locale.js                                  |   76 +
 skin/classic/console.css                           |   38 +-
 skin/classic/debugger.css                          |   31 +-
 skin/classic/dom.css                               |    2 +-
 skin/classic/find-arrows.png                       |  Bin 0 -> 540 bytes
 skin/classic/firebug.css                           |   85 +-
 skin/classic/firebug16EnabledInBackground.png      |  Bin 665 -> 0 bytes
 skin/classic/html.css                              |    4 +
 skin/classic/mac/debugger.css                      |  113 +-
 skin/classic/mac/find-arrows.png                   |  Bin 0 -> 369 bytes
 skin/classic/mac/firebug.css                       |  112 +-
 skin/classic/mac/panel.css                         |   15 +-
 skin/classic/mac/pin.png                           |  Bin 1012 -> 733 bytes
 skin/classic/mac/pinned.png                        |  Bin 598 -> 448 bytes
 skin/classic/mac/quickInfoBox.css                  |   38 +
 skin/classic/net.css                               |   67 +-
 skin/classic/panel.css                             |   90 +-
 skin/classic/panelNotification.css                 |   44 +
 skin/classic/quickInfoBox.css                      |   13 +-
 skin/classic/quickInfoBoxPanel.css                 |   10 +
 skin/classic/search.png                            |  Bin 509 -> 1348 bytes
 skin/classic/searchHovered.png                     |  Bin 506 -> 0 bytes
 skin/classic/win/debugger.css                      |   33 -
 skin/classic/win/linux.css                         |    0
 skin/classic/win/panel.css                         |   69 -
 skin/classic/win/window.css                        |    2 -
 223 files changed, 13355 insertions(+), 11148 deletions(-)

diff --git a/build.js b/build.js
index 0c46d20..9a6db35 100644
--- a/build.js
+++ b/build.js
@@ -146,7 +146,6 @@ function prepareBuild()
                     "firebug/firefox/external-editors/externalEditors",
                     "firebug/firefox/firebugMenu",
                     "firebug/chrome/panelActivation",
-                    //"firebug/console/memoryProfiler", xxxHonza: removed from 1.10 (issue 5599)
                     "firebug/chrome/tableRep",
                     "firebug/html/htmlPanel",
                     "firebug/console/commandLinePopup",
diff --git a/chrome.manifest b/chrome.manifest
index 8ce2113..cab13da 100644
--- a/chrome.manifest
+++ b/chrome.manifest
@@ -6,7 +6,9 @@ content firebug content/firebug/ contentaccessible=yes
 # resource moduleloader modules/
 
 skin firebug classic/1.0 skin/classic/
-skin firebug-os  classic/1.0 skin/classic/win/
+skin firebug-os classic/1.0 skin/classic/win/
+skin firebug-os classic/1.0 skin/classic/mac/ os=Darwin
+skin firebug-os classic/1.0 skin/classic/linux/ os=Linux
 
 locale  firebug bg          locale/bg/
 locale  firebug ca-AD       locale/ca-AD/
@@ -44,12 +46,3 @@ locale  firebug uk-UA       locale/uk-UA/
 locale  firebug vi          locale/vi/
 locale  firebug zh-CN       locale/zh-CN/
 locale  firebug zh-TW       locale/zh-TW/
-
-# Support for Mac
-override chrome://firebug-os/skin/debugger.css   chrome://firebug/skin/mac/debugger.css os=Darwin
-override chrome://firebug-os/skin/firebug.css    chrome://firebug/skin/mac/firebug.css os=Darwin
-override chrome://firebug-os/skin/panel.css      chrome://firebug/skin/mac/panel.css os=Darwin
-override chrome://firebug-os/skin/window.css     chrome://firebug/skin/mac/window.css os=Darwin
-
-# Support for Linux
-override chrome://firebug-os/skin/firebug.css  chrome://firebug/skin/linux/firebug.css os=Linux
diff --git a/content/firebug/accessible/a11y.js b/content/firebug/accessible/a11y.js
index 6bab8ea..cd46b1b 100644
--- a/content/firebug/accessible/a11y.js
+++ b/content/firebug/accessible/a11y.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/domplate",
@@ -14,7 +15,7 @@ define([
     "firebug/console/console",
     "firebug/chrome/infotip",
 ],
-function(Obj, Firebug, Domplate, Locale, Events, Url, Css, Dom, Xml, Xpath) {
+function(Module, Obj, Firebug, Domplate, Locale, Events, Url, Css, Dom, Xml, Xpath) {
 
 // ************************************************************************************************
 // Constants
@@ -26,13 +27,13 @@ var KeyEvent = window.KeyEvent;
 // ************************************************************************************************
 // Module Management
 
-Firebug.A11yModel = Obj.extend(Firebug.Module,
+Firebug.A11yModel = Obj.extend(Module,
 {
     dispatchName: "a11y",
 
     initialize: function()
     {
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
 
         this.handleTabBarFocus = Obj.bind(this.handleTabBarFocus, this);
         this.handleTabBarBlur = Obj.bind(this.handleTabBarBlur, this);
@@ -71,7 +72,7 @@ Firebug.A11yModel = Obj.extend(Firebug.Module,
         Firebug.Console.removeListener(this);
         Firebug.DOMModule.removeListener(this);
 
-        Firebug.Module.shutdown.apply(this, arguments);
+        Module.shutdown.apply(this, arguments);
     },
 
     initializeUI: function()
@@ -692,7 +693,7 @@ Firebug.A11yModel = Obj.extend(Firebug.Module,
             if (focusRow)
             {
                 this.setPanelTabStop(panel, focusRow);
-                focusRow.setAttribute("aria-expanded", Css.hasClass(row, "opened") + "");
+                focusRow.setAttribute("aria-expanded", String(Css.hasClass(row, "opened")));
                 if (!Css.hasClass(row, "logRow-profile"))
                     this.insertHiddenText(panel, focusRow, "group label: ");
             }
@@ -707,7 +708,7 @@ Firebug.A11yModel = Obj.extend(Firebug.Module,
             {
                 this.setPanelTabStop(panel, focusRow);
                 focusRow.setAttribute("aria-expanded",
-                    Css.hasClass(focusRow.parentNode, "opened") + "");
+                    String(Css.hasClass(focusRow.parentNode, "opened")));
             }
         }
         else if (Css.hasClass(row, "logRow-stackTrace"))
@@ -848,7 +849,7 @@ Firebug.A11yModel = Obj.extend(Firebug.Module,
                         }
                         else if (level > 0)
                         {
-                            var targetLevel = (level - 1) + "";
+                            var targetLevel = String(level - 1);
                             var newRows = Array.filter(row.parentNode.rows, function(e, i, a)
                             {
                                 return e.rowIndex < row.rowIndex &&
@@ -991,7 +992,7 @@ Firebug.A11yModel = Obj.extend(Firebug.Module,
                     if (objectBox)
                     {
                         target.setAttribute("aria-checked",
-                            Css.hasClass(objectBox, "breakForError") + "");
+                            String(Css.hasClass(objectBox, "breakForError")));
                     }
                 }
                 else if (Css.hasClass(target, "breakpointRow"))
@@ -2564,7 +2565,7 @@ Firebug.A11yModel = Obj.extend(Firebug.Module,
             if ((Css.hasClass(row, "netRow") ||
                 Css.hasClass(row, "spyHeadTable")) && !row.hasAttribute("aria-expanded"))
             {
-                row.setAttribute("aria-expanded", Css.hasClass(row, "opened") + "");
+                row.setAttribute("aria-expanded", String(Css.hasClass(row, "opened")));
             }
             var focusObjects = this.getFocusObjects(row);
             Array.forEach(focusObjects, function(e, i, a) {
diff --git a/content/firebug/branch.properties b/content/firebug/branch.properties
index d3b6cf2..870bee1 100644
--- a/content/firebug/branch.properties
+++ b/content/firebug/branch.properties
@@ -1,8 +1,8 @@
-# DO NOT MERGE INTO TRUNK
-RELEASE=.6
-VERSION=1.12
-TRUNK=
-# To allow build.xml to drop the xpi directly into the svn working copy for getfirebug.com
-# the root of the fbug svn tree must be be at the same level as the root of getfirebug.com
-# Otherwise specify your own path.
+# DO NOT MERGE INTO TRUNK
+RELEASE=.0a8
+VERSION=1.13
+TRUNK=
+# To allow build.xml to drop the xpi directly into the svn working copy for getfirebug.com
+# the root of the fbug svn tree must be be at the same level as the root of getfirebug.com
+# Otherwise specify your own path.
 GETFIREBUG=../../../../getfirebug.com/tags/production
\ No newline at end of file
diff --git a/content/firebug/bti/inProcess/javascripttool.js b/content/firebug/bti/inProcess/javascripttool.js
index fcacf95..2be91f5 100644
--- a/content/firebug/bti/inProcess/javascripttool.js
+++ b/content/firebug/bti/inProcess/javascripttool.js
@@ -4,18 +4,19 @@
 // Module
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/tool",
     "firebug/js/debugger",  // TODO firefox/jsdebugger
     "arch/compilationunit"
 ],
-function initializeJavaScriptTool(Obj, Firebug, Tool, JSDebugger, CompilationUnit) {
+function initializeJavaScriptTool(Module, Obj, Firebug, Tool, JSDebugger, CompilationUnit) {
 
 // ********************************************************************************************* //
 // Implement JavaScript tool for Firefox inProcess
 
-var JavaScriptTool = Obj.extend(Firebug.Module,
+var JavaScriptTool = Obj.extend(Module,
 {
     dispatchName: "JavaScriptTool",
 });
diff --git a/content/firebug/chrome/activableModule.js b/content/firebug/chrome/activableModule.js
new file mode 100644
index 0000000..42160d4
--- /dev/null
+++ b/content/firebug/chrome/activableModule.js
@@ -0,0 +1,141 @@
+/* See license.txt for terms of usage */
+
+define([
+    "firebug/firebug",
+    "firebug/lib/trace",
+    "firebug/lib/object",
+    "firebug/lib/array",
+    "firebug/chrome/module"
+],
+function(Firebug, FBTrace, Obj, Arr, Module) {
+
+"use strict";
+
+// ********************************************************************************************* //
+// Constants
+
+// ********************************************************************************************* //
+// Implementation
+
+/**
+ * @module Should be used by modules (Firebug specific task controllers) that supports
+ * activation. An example of such 'activable' module can be the debugger module
+ * {@link Firebug.Debugger}, which can be disabled in order to avoid performance
+ * penalties (in cases where the user doesn't need a debugger for the moment).
+ */
+var ActivableModule = Obj.extend(Module,
+/** @lends ActivableModule */
+{
+    /**
+     * Every activable module is disabled by default waiting for on a panel
+     * that wants to have it enabled (and display provided data). The rule is
+     * if there is no panel (view) the module is disabled.
+     */
+    enabled: false,
+
+    /**
+     * List of observers (typically panels). If there is at least one observer registered
+     * The module becomes active.
+     */
+    observers: null,
+
+    /**
+     * List of dependent modules.
+     */
+    dependents: null,
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Initialization
+
+    initialize: function()
+    {
+        Module.initialize.apply(this, arguments);
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Observers (dependencies)
+
+    hasObservers: function()
+    {
+        return this.observers ? this.observers.length > 0 : false;
+    },
+
+    addObserver: function(observer)
+    {
+        if (!this.observers)
+            this.observers = [];
+
+        if (this.observers.indexOf(observer) === -1)
+        {
+            this.observers.push(observer);
+            this.onObserverChange(observer);  // targeted, not dispatched.
+        }
+        // else no-op
+    },
+
+    removeObserver: function(observer)
+    {
+        if (!this.observers)
+            return;
+
+        if (this.observers.indexOf(observer) !== -1)
+        {
+            Arr.remove(this.observers, observer);
+            this.onObserverChange(observer);  // targeted, not dispatched
+        }
+        // else no-op
+    },
+
+    /**
+     * This method is called if an observer (e.g. {@link Panel}) is added or removed.
+     * The module should decide about activation/deactivation upon existence of at least one
+     * observer.
+     */
+    onObserverChange: function(observer)
+    {
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Firebug Activation
+
+    onSuspendingFirebug: function()
+    {
+        // Called before any suspend actions. First caller to return true aborts suspend.
+    },
+
+    onSuspendFirebug: function()
+    {
+        // When the number of activeContexts decreases to zero. Modules should remove
+        // listeners, disable function that takes resources
+    },
+
+    onResumeFirebug: function()
+    {
+        // When the number of activeContexts increases from zero. Modules should undo the
+        // work done in onSuspendFirebug
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Module enable/disable APIs.
+
+    isEnabled: function()
+    {
+        return this.hasObservers();
+    },
+
+    isAlwaysEnabled: function()
+    {
+        return this.hasObservers();
+    }
+});
+
+// ********************************************************************************************* //
+// Registration
+
+// xxxHonza: backward compatibility
+Firebug.ActivableModule = ActivableModule;
+
+return ActivableModule;
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/chrome/activablePanel.js b/content/firebug/chrome/activablePanel.js
new file mode 100644
index 0000000..b9393de
--- /dev/null
+++ b/content/firebug/chrome/activablePanel.js
@@ -0,0 +1,80 @@
+/* See license.txt for terms of usage */
+
+define([
+    "firebug/firebug",
+    "firebug/lib/trace",
+    "firebug/lib/object",
+    "firebug/lib/options",
+    "firebug/chrome/panel",
+],
+function(Firebug, FBTrace, Obj, Options, Panel) {
+
+"use strict";
+
+// ********************************************************************************************* //
+// Constants
+
+// ********************************************************************************************* //
+// Implementation
+
+/**
+ * @panel This object represents a panel with two states: enabled/disabled. Such support
+ * is important for panel that represents performance penalties and it's useful for the
+ * user to have the option to disable them.
+ *
+ * All methods in this object are used on the prototype object (they represent class methods)
+ * and so, |this| points to the panel's prototype and *not* to the panel instance.
+ */
+var ActivablePanel = Obj.extend(Panel,
+/** @lends ActivablePanel */
+{
+    activable: true,
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+    isActivable: function()
+    {
+        return this.activable;
+    },
+
+    isEnabled: function()
+    {
+        if (!this.isActivable())
+            return true;
+
+        if (!this.name)
+            return false;
+
+        return Options.get(this.name + ".enableSites");
+    },
+
+    setEnabled: function(enable)
+    {
+        if (!this.name || !this.activable)
+            return;
+
+        Options.set(this.name + ".enableSites", enable);
+    },
+
+    /**
+     * Called when an instance of this panel type is enabled or disabled. Again notice that
+     * this is a class method and so, panel instance variables (like e.g. context) are
+     * not accessible from this method.
+     * @param {Object} enable Set to true if this panel type is now enabled.
+     */
+    onActivationChanged: function(enable)
+    {
+        // TODO: Use ActivableModule.addObserver to express dependencies on modules.
+    },
+});
+
+// ********************************************************************************************* //
+// Registration
+
+// xxxHonza: backward compatibility
+Firebug.ActivablePanel = ActivablePanel;
+
+return ActivablePanel;
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/chrome/activation.js b/content/firebug/chrome/activation.js
index 7ddf5d9..cc29a46 100644
--- a/content/firebug/chrome/activation.js
+++ b/content/firebug/chrome/activation.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/locale",
@@ -9,7 +10,9 @@ define([
     "firebug/chrome/annotations",
     "firebug/chrome/firefox",
 ],
-function(Obj, Firebug, Locale, Url, TabWatcher, Annotations, Firefox) {
+function(Module, Obj, Firebug, Locale, Url, TabWatcher, Annotations, Firefox) {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
@@ -24,8 +27,8 @@ const Ci = Components.interfaces;
  *
  * 1) Part of the logic is based on annotation service (see components/firebug-annotations.js)
  *    in order to remember whether Firebug is activated for given site or not.
- *    If there is "firebugged.showFirebug" annotation for a given site Firbug is activated.
- *    If there is "firebugged.closed" annotation for a given site Firbug is not activated.
+ *    If there is "firebugged.showFirebug" annotation for a given site Firebug is activated.
+ *    If there is "firebugged.closed" annotation for a given site Firebug is not activated.
  *
  * 2) Other part is based on extensions.firebug.allPagesActivation option. This option
  *    can be set to the following values:
@@ -36,14 +39,14 @@ const Ci = Components.interfaces;
  *    This logic has higher priority over the URL annotations.
  *    If "off" options is selected, all existing URL annotations are removed.
  */
-Firebug.Activation = Obj.extend(Firebug.Module,
+Firebug.Activation = Obj.extend(Module,
 {
     dispatchName: "activation",
 
     // called once
     initializeUI: function()
     {
-        Firebug.Module.initializeUI.apply(this, arguments);
+        Module.initializeUI.apply(this, arguments);
 
         TabWatcher.initializeUI();
         TabWatcher.addListener(this);
@@ -51,7 +54,7 @@ Firebug.Activation = Obj.extend(Firebug.Module,
 
     shutdown: function()
     {
-        Firebug.Module.shutdown.apply(this, arguments);
+        Module.shutdown.apply(this, arguments);
 
         TabWatcher.removeListener(this);
     },
@@ -66,14 +69,18 @@ Firebug.Activation = Obj.extend(Firebug.Module,
         if (Firebug.allPagesActivation == "on")
             return true;
 
-        // if about:blank gets through, issue 1483 fails
-        if (Firebug.filterSystemURLs && Url.isSystemURL(url))
-            return false;
+        // This condition has been introduced to disable Firebug for about:blank
+        // which caused issue 1483 to fail. However, there are cases when users
+        // want to inspect even system pages (such as about:blank) and don't want
+        // Firebug UI to be automatically hidden (see issue 5632).
+        // Since issue 1483 doesn't fail anymore, the condition is removed.
+        //if (Firebug.filterSystemURLs && Url.isSystemURL(url))
+        //    return false;
 
         if (userCommands)
             return true;
 
-        // document.open on a firebugged page
+        // document.open on a Firebugged page
         if (browser && browser.showFirebug && url.substr(0, 8) === "wyciwyg:")
             return true;
 
diff --git a/content/firebug/chrome/annotations.js b/content/firebug/chrome/annotations.js
index 052f3d0..c7dd2c5 100644
--- a/content/firebug/chrome/annotations.js
+++ b/content/firebug/chrome/annotations.js
@@ -1,11 +1,12 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/trace",
     "firebug/lib/object",
     "firebug/chrome/privacy",
 ],
-function(FBTrace, Obj, Privacy) {
+function(Module, FBTrace, Obj, Privacy) {
 
 // ********************************************************************************************* //
 // Constants
@@ -22,7 +23,7 @@ var dirService = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIPr
  * @class Represents an internal Firebug annotation service. This service is used to
  * annotate sites with an info whether Firebug should be activated for them or not.
  */
-var Annotations = Obj.extend(Firebug.Module,
+var Annotations = Obj.extend(Module,
 {
     annotations: [],
 
diff --git a/content/firebug/chrome/balloonNote.js b/content/firebug/chrome/balloonNote.js
index d162924..46b5add 100644
--- a/content/firebug/chrome/balloonNote.js
+++ b/content/firebug/chrome/balloonNote.js
@@ -1,6 +1,11 @@
 /* See license.txt for terms of usage */
 
-define(["firebug/lib/domplate"], function(Domplate) {
+define([
+    "firebug/lib/domplate"
+],
+function(Domplate) {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
@@ -10,7 +15,8 @@ Firebug.BalloonNote = function(doc, object)
     this.initialize(doc, object);
 };
 
-with (Domplate) {
+var {domplate, DIV, SPAN, TAG} = Domplate;
+
 Firebug.BalloonNote.prototype = domplate(
 {
     tag:
@@ -53,7 +59,6 @@ Firebug.BalloonNote.prototype = domplate(
         // move from Firebug.BreakNotification
     }
 });
-};
 
 // ********************************************************************************************* //
 });
diff --git a/content/firebug/chrome/chrome.js b/content/firebug/chrome/chrome.js
index b52e87d..ee9c9db 100644
--- a/content/firebug/chrome/chrome.js
+++ b/content/firebug/chrome/chrome.js
@@ -2114,7 +2114,14 @@ function onPanelMouseUp(event)
 {
     if (Events.isLeftClick(event))
     {
-        var selection = event.target.ownerDocument.defaultView.getSelection();
+        var doc = event.target.ownerDocument;
+
+        // This happens e.g. if you click in a panel, move mouse out from the browser
+        // window and release the button.
+        if (!doc)
+            return;
+
+        var selection = doc.defaultView.getSelection();
         var target = selection.focusNode || event.target;
 
         if (Dom.getAncestorByClass(selection.focusNode, "editable") ===
@@ -2124,9 +2131,11 @@ function onPanelMouseUp(event)
             if (editable || Css.hasClass(event.target, "inlineExpander"))
             {
                 var selectionData;
-                var unselectedRange = event.target.ownerDocument.createRange();
+                var unselectedRange = doc.createRange();
                 var selectedRange = selection.getRangeAt(0);
-                unselectedRange.setStart(editable.firstElementChild || editable, 0);
+                var referenceElement = editable || event.target;
+                unselectedRange.setStart(referenceElement.firstElementChild ||
+                    referenceElement, 0);
                 unselectedRange.setEnd(selectedRange.startContainer, selectedRange.startOffset);
 
                 if (selectedRange.collapsed)
@@ -2135,7 +2144,7 @@ function onPanelMouseUp(event)
                         Math.abs(event.screenY - lastMouseDownPosition.y);
 
                     // If mouse has moved far enough, set selection at that point
-                    if (distance > 3)
+                    if (distance > 3 || Css.hasClass(event.target, "inlineExpander"))
                     {
                         selectionData =
                         {
diff --git a/content/firebug/chrome/eventSource.js b/content/firebug/chrome/eventSource.js
new file mode 100644
index 0000000..5957bd6
--- /dev/null
+++ b/content/firebug/chrome/eventSource.js
@@ -0,0 +1,82 @@
+/* See license.txt for terms of usage */
+
+define([
+    "firebug/firebug",
+    "firebug/lib/trace",
+    "firebug/lib/events",
+    "firebug/lib/array",
+],
+function(Firebug, FBTrace, Events, Arr) {
+
+"use strict";
+
+// ********************************************************************************************* //
+// Constants
+
+var TraceError = FBTrace.to("DBG_ERRORS");
+
+// ********************************************************************************************* //
+// Implementation
+
+/**
+ * Support for listeners registration. This object is also extended by Module,
+ * so all modules supports listening automatically. Note that an array of listeners is
+ * created for each instance of a module within the initialize method. Thus all derived
+ * module classes must ensure that the Module.initialize method is called for the
+ * super class.
+ */
+function EventSource()
+{
+    // The array is created when the first listeners is added.
+    // It can't be created here since derived objects would share
+    // the same array.
+    this.fbListeners = null;
+};
+
+EventSource.prototype =
+{
+    addListener: function(listener)
+    {
+        if (!listener)
+        {
+            TraceError.sysout("firebug.Listener.addListener; ERROR null listener registered.");
+            return;
+        }
+
+        // Delay the creation until the objects are created so 'this' causes new array
+        // for this object (e.g. module, panel, etc.)
+        if (!this.fbListeners)
+            this.fbListeners = [];
+
+        this.fbListeners.push(listener);
+    },
+
+    removeListener: function(listener)
+    {
+        // if this.fbListeners is null, remove is being called with no add
+        Arr.remove(this.fbListeners, listener);
+    },
+
+    dispatch: function(eventName, args)
+    {
+        if (this.fbListeners && this.fbListeners.length > 0)
+            Events.dispatch(this.fbListeners, eventName, args);
+    },
+
+    dispatch2: function(eventName, args)
+    {
+        if (this.fbListeners && this.fbListeners.length > 0)
+            return Events.dispatch2(this.fbListeners, eventName, args);
+    }
+};
+
+// ********************************************************************************************* //
+// Registration
+
+// xxxHonza: backward compatibility
+Firebug.Listener = EventSource;
+
+return EventSource;
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/chrome/infotip.js b/content/firebug/chrome/infotip.js
index 47d6f79..ebde7e8 100644
--- a/content/firebug/chrome/infotip.js
+++ b/content/firebug/chrome/infotip.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/domplate",
@@ -8,7 +9,9 @@ define([
     "firebug/lib/events",
     "firebug/lib/dom"
 ],
-function(Obj, Firebug, Domplate, Locale, Events, Dom) {
+function(Module, Obj, Firebug, Domplate, Locale, Events, Dom) {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
@@ -17,8 +20,8 @@ const infoTipMargin = 10;
 
 // ********************************************************************************************* //
 
-with (Domplate) {
-Firebug.InfoTip = Obj.extend(Firebug.Module,
+var {domplate, DIV} = Domplate;
+Firebug.InfoTip = Obj.extend(Module,
 {
     dispatchName: "infoTip",
     tags: domplate(
@@ -173,7 +176,6 @@ Firebug.InfoTip = Obj.extend(Firebug.Module,
         this.showPanel(browser, panel);
     }
 });
-};
 
 // ********************************************************************************************* //
 // Registration
diff --git a/content/firebug/chrome/knownIssues.js b/content/firebug/chrome/knownIssues.js
index 9e6c02b..294d5ae 100644
--- a/content/firebug/chrome/knownIssues.js
+++ b/content/firebug/chrome/knownIssues.js
@@ -2,6 +2,8 @@
 
 define([
     "firebug/firebug",
+    "firebug/chrome/module",
+    "firebug/chrome/rep",
     "firebug/lib/trace",
     "firebug/lib/object",
     "firebug/lib/options",
@@ -15,8 +17,8 @@ define([
     "firebug/lib/events",
     "firebug/lib/css",
 ],
-function(Firebug, FBTrace, Obj, Options, Dom, Firefox, Domplate, Locale, FirebugReps, Win,
-    PanelActivation, Events, Css) {
+function(Firebug, Module, Rep, FBTrace, Obj, Options, Dom, Firefox, Domplate, Locale, FirebugReps,
+    Win, PanelActivation, Events, Css) {
 
 "use strict";
 
@@ -35,10 +37,10 @@ var slowJSDBugUrl = "https://bugzilla.mozilla.org/show_bug.cgi?id=815603";
 
 var slowJsdTag =
     P({"class": "slowJsdMessage disabledPanelDescription",
-        style: "margin: 15px 0 15px 0; color: green; font-family: sans-serif"}
+        style: "margin: 15px 0 15px 0; color: green"}
     );
 
-var slowJsdRep = domplate(Firebug.Rep,
+var slowJsdRep = domplate(Rep,
 {
     className: "text",
 
@@ -48,16 +50,13 @@ var slowJsdRep = domplate(Firebug.Rep,
                 TBODY(
                     TR(
                         TD({"valign": "middle"},
-                            SPAN({"class": "slowJSD",
-                                style: "font-family: sans-serif;"})
-                        )
-
-                        /*, xxxHonza: see issue 6942
+                            SPAN({"class": "slowJSD"})
+                        ),
                         TD({"valign": "middle", "style": "white-space: nowrap;"},
                             BUTTON({onclick: "$onClick"},
                                 Locale.$STR("knownissues.message.slowJSD.GotIt")
                             )
-                        )*/
+                        )
                     )
                 )
             )
@@ -65,7 +64,7 @@ var slowJsdRep = domplate(Firebug.Rep,
 
     onClick: function(event)
     {
-        Options.set("showSlowJSDMessage2", false);
+        Options.set("showSlowJSDMessage", false);
 
         var row = Dom.getAncestorByClass(event.target, "logRow");
         row.parentNode.removeChild(row);
@@ -80,7 +79,7 @@ var slowJsdRep = domplate(Firebug.Rep,
  * This module is responsible for various hacks and workarounds related
  * to known platform issues.
  */
-var KnownIssues = Obj.extend(Firebug.Module,
+var KnownIssues = Obj.extend(Module,
 /** @lends KnownIssues */
 {
     dispatchName: "knownIssues",
@@ -90,7 +89,7 @@ var KnownIssues = Obj.extend(Firebug.Module,
 
     initialize: function(prefDomain, prefNames)
     {
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
 
         Firebug.registerUIListener(this);
         PanelActivation.addListener(this);
@@ -101,15 +100,15 @@ var KnownIssues = Obj.extend(Firebug.Module,
         Firebug.unregisterUIListener(this);
         PanelActivation.removeListener(this);
 
-        Firebug.Module.shutdown.apply(this, arguments);
+        Module.shutdown.apply(this, arguments);
     },
 
     initContext: function(context)
     {
-        Firebug.Module.initContext.apply(this, arguments);
+        Module.initContext.apply(this, arguments);
 
         // Initialize default value.
-        context.showSlowJSDMessage = Options.get("showSlowJSDMessage2");
+        context.showSlowJSDMessage = Options.get("showSlowJSDMessage");
 
         this.showSlowJSDMessage(context);
     },
diff --git a/content/firebug/chrome/measureBox.js b/content/firebug/chrome/measureBox.js
new file mode 100644
index 0000000..bff503d
--- /dev/null
+++ b/content/firebug/chrome/measureBox.js
@@ -0,0 +1,97 @@
+/* See license.txt for terms of usage */
+
+define([
+    "firebug/firebug",
+    "firebug/lib/trace",
+    "firebug/lib/css",
+],
+function(Firebug, FBTrace, Css) {
+
+"use strict";
+
+// ********************************************************************************************* //
+// Constants
+
+// ********************************************************************************************* //
+// Implementation
+
+/**
+ * MeasureBox
+ * To get pixels size.width and size.height:
+ *
+ * <ul>
+ *   <li>this.startMeasuring(view);</li>
+ *   <li>var size = this.measureText(lineNoCharsSpacer);</li>
+ *   <li>this.stopMeasuring();</li>
+ * </ul>
+ */
+var MeasureBox =
+/** @lends MeasureBox */
+{
+    startMeasuring: function(target)
+    {
+        if (!this.measureBox)
+        {
+            this.measureBox = target.ownerDocument.createElement("span");
+            this.measureBox.className = "measureBox";
+        }
+
+        Css.copyTextStyles(target, this.measureBox);
+
+        target.ownerDocument.body.appendChild(this.measureBox);
+    },
+
+    getMeasuringElement: function()
+    {
+        return this.measureBox;
+    },
+
+    measureText: function(value)
+    {
+        this.measureBox.textContent = value || "m";
+
+        return {
+            width: this.measureBox.offsetWidth,
+            height: this.measureBox.offsetHeight - 1
+        };
+    },
+
+    measureInputText: function(value)
+    {
+        if (!value)
+            value = "m";
+
+        if (!Firebug.showTextNodesWithWhitespace)
+            value = value.replace(/\t/g, "mmmmmm").replace(/\ /g, "m");
+
+        this.measureBox.textContent = value;
+
+        return {
+            width: this.measureBox.offsetWidth,
+            height: this.measureBox.offsetHeight - 1
+        };
+    },
+
+    getBox: function(target)
+    {
+        var style = this.measureBox.ownerDocument.defaultView.getComputedStyle(this.measureBox, "");
+        var box = Css.getBoxFromStyles(style, this.measureBox);
+        return box;
+    },
+
+    stopMeasuring: function()
+    {
+        this.measureBox.parentNode.removeChild(this.measureBox);
+    }
+};
+
+// ********************************************************************************************* //
+// Registration
+
+// xxxHonza: backward compatibility
+Firebug.MeasureBox = MeasureBox;
+
+return MeasureBox;
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/chrome/menu.js b/content/firebug/chrome/menu.js
index 02becde..3b29fed 100644
--- a/content/firebug/chrome/menu.js
+++ b/content/firebug/chrome/menu.js
@@ -5,9 +5,10 @@ define([
     "firebug/lib/locale",
     "firebug/lib/options",
     "firebug/lib/css",
-    "firebug/lib/deprecated"
+    "firebug/lib/deprecated",
+    "firebug/lib/system",
 ],
-function(FBTrace, Locale, Options, Css, Deprecated) {
+function(FBTrace, Locale, Options, Css, Deprecated, System) {
 
 "use strict";
 
@@ -145,14 +146,6 @@ Menu.setItemIntoElement = function(element, item)
     if (item.name)
         element.setAttribute("name", item.name);
 
-    if (item.items && (item.command || item.commandID))
-    {
-        element.setAttribute("type", "splitmenu");
-        element.setAttribute("iconic", "true");
-    }
-
-    // xxxHonza: must be done after 'type' == 'splitmenu' otherwise the menu-item
-    // is not checked (the check icon is not displayed from some reason).
     if (item.checked)
         element.setAttribute("checked", "true");
 
@@ -201,7 +194,7 @@ Menu.createMenuSeparator = function(popup, item, before)
 
 /**
  * Create an option menu item definition. This method is usually used in methods like:
- * {@link Firebug.Panel.getOptionsMenuItems} or {@link Firebug.Panel.getContextMenuItems}.
+ * {@link Panel.getOptionsMenuItems} or {@link Panel.getContextMenuItems}.
  *
  * @param {String} label Name of the string from *.properties file.
  * @param {String} option Name of the associated option.
diff --git a/content/firebug/chrome/module.js b/content/firebug/chrome/module.js
new file mode 100644
index 0000000..767343c
--- /dev/null
+++ b/content/firebug/chrome/module.js
@@ -0,0 +1,135 @@
+/* See license.txt for terms of usage */
+
+define([
+    "firebug/firebug",
+    "firebug/lib/trace",
+    "firebug/lib/object",
+    "firebug/chrome/eventSource",
+],
+function(Firebug, FBTrace, Obj, EventSource) {
+
+"use strict";
+
+// ********************************************************************************************* //
+// Constants
+
+// ********************************************************************************************* //
+// Implementation
+
+/**
+ * @module Base class for all modules. Every derived module object must be registered using
+ * <code>Firebug.registerModule</code> method. There is always one instance of a module object
+ * per browser window.
+ */
+var Module = Obj.extend(new EventSource(),
+/** @lends Module */
+{
+    /**
+     * Called by Firebug when Firefox window is opened.
+     */
+    initialize: function()
+    {
+    },
+
+    /**
+     * Called when the UI is ready for context creation.
+     * Used by chromebug; normally FrameProgressListener events trigger UI synchronization,
+     * this event allows sync without progress events.
+     */
+    initializeUI: function(detachArgs)
+    {
+    },
+
+    /**
+     * Called by Firebug when Firefox window is closed.
+     */
+    shutdown: function()
+    {
+    },
+
+    /**
+     * Called when a new context is created but before the page is loaded.
+     */
+    initContext: function(context, persistedState)
+    {
+    },
+
+    /**
+     * Called when a context is destroyed. Module may store info on persistedState
+     * for reloaded pages.
+     */
+    destroyContext: function(context, persistedState)
+    {
+    },
+
+    /**
+     * Called when attaching to a window (top-level or frame).
+     */
+    watchWindow: function(context, win)
+    {
+    },
+
+    /**
+     * Called when unwatching a window (top-level or frame).
+     */
+    unwatchWindow: function(context, win)
+    {
+    },
+
+    // Called when a FF tab is create or activated (user changes FF tab)
+    // Called after context is created or with context == null (to abort?)
+    showContext: function(browser, context)
+    {
+    },
+
+    /**
+     * Called after a context's page gets DOMContentLoaded
+     */
+    loadedContext: function(context)
+    {
+    },
+
+    /**
+     * After 'onSelectingPanel', a panel has been selected but is not yet visible
+     * @param browser a tab's browser element
+     * @param panel selected panel or null
+     */
+    showPanel: function(browser, panel)
+    {
+    },
+
+    showSidePanel: function(browser, sidePanel)
+    {
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+    updateOption: function(name, value)
+    {
+    },
+
+    getObjectByURL: function(context, url)
+    {
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // intermodule dependency
+
+    // xxxHonza: This should be removed
+    // caller needs module. win maybe context.window or iframe in context.window.
+    // true means module is ready now, else getting ready
+    isReadyElsePreparing: function(context, win)
+    {
+    },
+});
+
+// ********************************************************************************************* //
+// Registration
+
+// xxxHonza: backward compatibility.
+Firebug.Module = Module;
+
+return Module;
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/chrome/navigationHistory.js b/content/firebug/chrome/navigationHistory.js
index 8739805..f015b8a 100644
--- a/content/firebug/chrome/navigationHistory.js
+++ b/content/firebug/chrome/navigationHistory.js
@@ -1,15 +1,16 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/lib/locale",
     "firebug/firebug",
     "firebug/lib/dom",
     "firebug/chrome/menu",
 ],
-function(Obj, Locale, Firebug, Dom, Menu) {
+function(Module, Obj, Locale, Firebug, Dom, Menu) {
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 // Constants
 
 const Cc = Components.classes;
@@ -17,21 +18,21 @@ const Ci = Components.interfaces;
 
 const MAX_HISTORY_MENU_ITEMS = 15;
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 
 /**
  * @class Support for back and forward pattern for navigating within Firebug UI (panels).
  */
-Firebug.NavigationHistory = Obj.extend(Firebug.Module,
+Firebug.NavigationHistory = Obj.extend(Module,
 {
     dispatchName: "navigationHistory",
 
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
     // Extending Module
 
     initContext: function(context, persistedState)
     {
-        Firebug.Module.initContext.apply(this, arguments);
+        Module.initContext.apply(this, arguments);
 
         // Initialize context members.
         context.navigationHistory = [];
@@ -46,7 +47,7 @@ Firebug.NavigationHistory = Obj.extend(Firebug.Module,
 
     destroyContext: function(context, persistedState)
     {
-        Firebug.Module.destroyContext.apply(this, arguments);
+        Module.destroyContext.apply(this, arguments);
 
         if (persistedState)
         {
@@ -55,7 +56,7 @@ Firebug.NavigationHistory = Obj.extend(Firebug.Module,
         }
     },
 
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
     // History popup menu
 
     onPopupShowing: function(popup, context)
@@ -63,7 +64,10 @@ Firebug.NavigationHistory = Obj.extend(Firebug.Module,
         var currIndex = this.getCurrentIndex(context);
 
         if (FBTrace.DBG_HISTORY)
-            FBTrace.sysout("history.onPopupShowing; " + currIndex + ", " + context.getName(), context);
+        {
+            FBTrace.sysout("history.onPopupShowing; " + currIndex + ", " +
+                context.getName(), context);
+        }
 
         Dom.eraseNode(popup);
 
@@ -221,7 +225,7 @@ Firebug.NavigationHistory = Obj.extend(Firebug.Module,
         return context.navigationHistoryIndex;
     },
 
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
     // UI Listener
 
     onPanelNavigate: function(location, panel)
@@ -282,7 +286,7 @@ Firebug.NavigationHistory = Obj.extend(Firebug.Module,
     }
 });
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 // Registration
 
 Firebug.registerModule(Firebug.NavigationHistory);
@@ -290,5 +294,5 @@ Firebug.registerUIListener(Firebug.NavigationHistory);
 
 return Firebug.NavigationHistory;
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 });
diff --git a/content/firebug/chrome/panel.js b/content/firebug/chrome/panel.js
new file mode 100644
index 0000000..5892c93
--- /dev/null
+++ b/content/firebug/chrome/panel.js
@@ -0,0 +1,726 @@
+/* See license.txt for terms of usage */
+
+define([
+    "firebug/firebug",
+    "firebug/lib/trace",
+    "firebug/lib/object",
+    "firebug/lib/css",
+    "firebug/lib/options",
+    "firebug/lib/dom",
+    "firebug/lib/events",
+    "firebug/lib/wrapper",
+    "firebug/chrome/eventSource",
+    "firebug/chrome/searchBox",
+],
+function(Firebug, FBTrace, Obj, Css, Options, Dom, Events, Wrapper, EventSource, SearchBox) {
+
+"use strict";
+
+// ********************************************************************************************* //
+// Constants
+
+var Trace = FBTrace.to("DBG_PANELS");
+var TraceError = FBTrace.to("DBG_ERRORS");
+
+// ********************************************************************************************* //
+// Implementation
+
+/**
+ * @panel Base class for all panels. Every derived panel must define a constructor and
+ * register with <code>Firebug.registerPanel</code> method. An instance of the panel
+ * object is created by the framework for each browser tab where Firebug is activated.
+ */
+var Panel = Obj.extend(new EventSource(),
+/** @lends Panel */
+{
+    searchable: false,    // supports search
+    editable: true,       // clicking on contents in the panel will invoke the inline editor,
+                          // e.g. the CSS Style panel or HTML panel.
+    breakable: false,     // if true, supports break-on-next (the pause button functionality)
+    order: 2147483647,    // relative position of the panel (or a side panel)
+    statusSeparator: "<", // the character used to separate items on the panel status (aka
+                          // breadcrumbs) in the tool bar, e.g. ">"  in the DOM panel
+    enableA11y: false,    // true if the panel wants to participate in A11y accessibility support.
+    deriveA11yFrom: null, // Name of the panel that uses the same a11y logic.
+    inspectable: false,   // true to support inspecting elements inside this panel
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Initialization
+
+    initialize: function(context, doc)
+    {
+        if (!context.browser)
+        {
+            TraceError.sysout("attempt to create panel with dud context!");
+            return false;
+        }
+
+        this.context = context;
+        this.document = doc;
+
+        this.panelNode = doc.createElement("div");
+        this.panelNode.ownerPanel = this;
+
+        Css.setClass(this.panelNode, "panelNode panelNode-" + this.name + " contextUID=" +
+            context.uid);
+
+        // Load persistent content if any.
+        var persistedState = Firebug.getPanelState(this);
+        if (persistedState)
+        {
+            this.persistContent = persistedState.persistContent;
+            if (this.persistContent && persistedState.panelNode)
+                this.loadPersistedContent(persistedState);
+        }
+
+        // The default value for 'Persist' is set only the first time.
+        if (typeof(this.persistContent) == "undefined")
+            this.persistContent = Options.get(this.name + ".defaultPersist");
+
+        doc.body.appendChild(this.panelNode);
+
+        // Update panel's tab in case the break-on-next (BON) is active.
+        var shouldBreak = this.shouldBreakOnNext();
+
+        // xxxHonza: import the right module
+        Firebug.Breakpoint.updatePanelTab(this, shouldBreak);
+
+        Trace.sysout("firebug.initialize panelNode for " + this.name);
+
+        this.initializeNode(this.panelNode);
+    },
+
+    destroy: function(state) // Panel may store info on state
+    {
+        Trace.sysout("firebug.destroy panelNode for " + this.name);
+
+        state.persistContent = this.persistContent;
+
+        if (this.panelNode)
+        {
+            if (this.persistContent)
+                this.savePersistedContent(state);
+
+            delete this.panelNode.ownerPanel;
+        }
+
+        this.destroyNode();
+
+        // xxxHonza: not exactly sure why, but it helps when testing memory-leaks.
+        // Note that the selection can point to a document (in case of the HTML panel).
+        // Perhaps it breaks a cycle (page -> Firebug -> page)?
+        this.selection = null;
+        delete this.panelBrowser;
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Persistence
+
+    savePersistedContent: function(state)
+    {
+        state.panelNode = this.panelNode;
+    },
+
+    loadPersistedContent: function(persistedState)
+    {
+        // move the nodes from the persistedState to the panel
+        while (persistedState.panelNode.firstChild)
+            this.panelNode.appendChild(persistedState.panelNode.firstChild);
+
+        Dom.scrollToBottom(this.panelNode);
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Life Cycle
+
+    /**
+     * Called when a panel in one XUL window is about to disappear to later reappear in
+     * another XUL window.
+     */
+    detach: function(oldChrome, newChrome)
+    {
+    },
+
+    // This is how a panel in one window reappears in another window; lazily called
+    reattach: function(doc)
+    {
+        this.document = doc;
+
+        if (this.panelNode)
+        {
+            var scrollTop = this.panelNode.scrollTop;
+            this.panelNode = doc.adoptNode(this.panelNode, true);
+            this.panelNode.ownerPanel = this;
+            doc.body.appendChild(this.panelNode);
+            this.panelNode.scrollTop = scrollTop;
+        }
+    },
+
+    // Called at the end of module.initialize; addEventListener-s here
+    initializeNode: function(panelNode)
+    {
+        Events.dispatch(this.fbListeners, "onInitializeNode", [this]);
+    },
+
+    // removeEventListener-s here.
+    destroyNode: function()
+    {
+        Events.dispatch(this.fbListeners, "onDestroyNode", [this]);
+    },
+
+    show: function(state)  // persistedPanelState plus non-persisted hide() values
+    {
+    },
+
+    hide: function(state)  // store info on state for next show.
+    {
+    },
+
+    watchWindow: function(context, win)
+    {
+    },
+
+    unwatchWindow: function(context, win)
+    {
+    },
+
+    loadWindow: function(context, win)
+    {
+    },
+
+    updateOption: function(name, value)
+    {
+    },
+
+    /**
+     * Called after chrome.applyTextSize
+     * @param zoom: ratio of current size to normal size, e.g. 1.5
+     */
+    onTextSizeChange: function(zoom)
+    {
+
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Toolbar
+
+    showToolbarButtons: function(buttonsId, show)
+    {
+        try
+        {
+            var buttons = Firebug.chrome.$(buttonsId);
+            Dom.collapse(buttons, !show);
+        }
+        catch (exc)
+        {
+            TraceError.sysout("panel.showToolbarButtons; FAILS " + exc, exc);
+        }
+    },
+
+    onGetPanelToolbarButtons: function(panel, items)
+    {
+        return [];
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+    /**
+     * Returns a number indicating the view's ability to inspect the object.
+     *
+     * Zero means not supported, and higher numbers indicate specificity.
+     */
+    supportsObject: function(object, type)
+    {
+        return 0;
+    },
+
+    // beyond type testing, is this object selectable?
+    hasObject: function(object)
+    {
+        return false;
+    },
+
+    navigate: function(object)
+    {
+        // Get default location object if none is specified.
+        if (!object)
+            object = this.getDefaultLocation();
+
+        // Make sure the location is *not* undefined.
+        if (!object)
+            object = null;
+
+        // We should be extra careful when dealing with the |location| object (include
+        // converting it to string).
+        // There might be cases where the object is removed from the page (e.g. a stylesheet
+        // that is currently displayed in the CSS panel) and the panel location not updated.
+        //
+        // This might happen because of optimization, where background panels do not observe
+        // changes on the page (e.g. using a Mutation Observer).
+        //
+        // The object is a dead wrapper in such moments firing an exception anytime
+        // its properties or methods are accessed.
+        // So just pass the object back to the panel, which must do proper checking.
+        if (!this.location || (object != this.location))
+        {
+            Trace.sysout("Panel.navigate; " + this.name);
+
+            this.location = object;
+            this.updateLocation(object);
+
+            Events.dispatch(Firebug.uiListeners, "onPanelNavigate", [object, this]);
+        }
+        else
+        {
+            Trace.sysout("Panel.navigate; Skipped for panel " + this.name);
+        }
+    },
+
+    /**
+     * The location object has been changed, the panel should update it view
+     *
+     * @param object a location, must be one of getLocationList() returns
+     *  if  getDefaultLocation() can return null, then updateLocation must handle it here.
+     */
+    updateLocation: function(object)
+    {
+    },
+
+    select: function(object, forceUpdate)
+    {
+        if (!object)
+            object = this.getDefaultSelection();
+
+        Trace.sysout("firebug.select " + this.name + " forceUpdate: " + forceUpdate + " " +
+            object + ((object == this.selection) ? "==" : "!=") + this.selection);
+
+        if (forceUpdate || object != this.selection)
+        {
+            this.selection = object;
+            this.updateSelection(object);
+
+            Events.dispatch(Firebug.uiListeners, "onObjectSelected", [object, this]);
+        }
+    },
+
+    /**
+     * Firebug wants to show an object to the user and this panel has the best supportsObject()
+     * result for the object. If the panel displays a container for objects of this type,
+     * it should set this.selectedObject = object
+     */
+    updateSelection: function(object)
+    {
+    },
+
+    /**
+     * Redisplay the panel based on the current location and selection
+     */
+    refresh: function()
+    {
+        if (this.location)
+            this.updateLocation(this.location);
+        else if (this.selection)
+            this.updateSelection(this.selection);
+    },
+
+    markChange: function(skipSelf)
+    {
+        if (this.dependents)
+        {
+            if (skipSelf)
+            {
+                for (var i = 0; i < this.dependents.length; i++)
+                {
+                    var panelName = this.dependents[i];
+                    if (panelName != this.name)
+                        this.context.invalidatePanels(panelName);
+                }
+            }
+            else
+            {
+                this.context.invalidatePanels.apply(this.context, this.dependents);
+            }
+        }
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Inspector
+
+    /**
+     * Called by the framework when the user starts inspecting. Inspecting must be enabled
+     * for the panel (panel.inspectable == true)
+     */
+    startInspecting: function()
+    {
+    },
+
+    /**
+     * Called by the framework when inspecting is in progress and the user moves the mouse over
+     * a new page element. Inspecting must be enabled for the panel (panel.inspectable == true).
+     * This method is called in a timeout to avoid performance penalties when the user moves
+     * the mouse over the page elements too fast.
+     *
+     * @param {Element} node The page element being inspected
+     * @returns {Boolean} Returns true if the node should be selected within the panel using
+     *      the default panel selection mechanism (i.e. by calling panel.select(node) method).
+     */
+    inspectNode: function(node)
+    {
+        return true;
+    },
+
+    /**
+     * Called by the framework when the user stops inspecting. Inspecting must be enabled
+     * for the panel (panel.inspectable == true)
+     *
+     * @param {Element} node The last page element inspected
+     * @param {Boolean} canceled Set to true if inspecting has been canceled
+     *          by pressing the escape key.
+     */
+    stopInspecting: function(node, canceled)
+    {
+    },
+
+    /**
+     * Called by the framework when inspecting is in progress. Allows to inspect
+     * only nodes that are supported by the panel. Derived panels can provide effective
+     * algorithms to provide these nodes.
+     * @param {Element} node Currently inspected page element.
+     */
+    getInspectNode: function(node)
+    {
+        while (node)
+        {
+            if (this.supportsObject(node, typeof node))
+                return node;
+            node = node.parentNode;
+        }
+        return null;
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+    /**
+     * Called by search in the case something was found.
+     * This will highlight the given node for a specific time-span. There's only one node
+     * highlighted at a time.
+     *
+     * @param {Node} Node to highlight
+     */
+    highlightNode: function(node)
+    {
+        if (this.highlightedNode)
+            Css.cancelClassTimed(this.highlightedNode, "jumpHighlight", this.context);
+
+        this.highlightedNode = node;
+
+        if (node)
+            Css.setClassTimed(node, "jumpHighlight", this.context);
+    },
+
+    /**
+     * Called by the framework when panel search is used.
+     * This is responsible for finding and highlighting search matches.
+     *
+     * @param {String} text String to search for
+     * @param {Boolean} reverse Indicates, if search is reversed
+     * @returns {Boolean} true, if search matched, otherwise false
+     */
+    search: function(text, reverse)
+    {
+    },
+
+    /**
+     * Retrieves the search options that this modules supports.
+     * This is used by the search UI to present the proper options.
+     */
+    getSearchOptionsMenuItems: function()
+    {
+        return [
+            SearchBox.searchOptionMenu("search.Case Sensitive", "searchCaseSensitive",
+                "search.tip.Case_Sensitive")
+        ];
+    },
+
+    /**
+     * Navigates to the next document whose match parameter returns true.
+     */
+    navigateToNextDocument: function(match, reverse)
+    {
+        // This is an approximation of the UI that is displayed by the location
+        // selector. This should be close enough, although it may be better
+        // to simply generate the sorted list within the module, rather than
+        // sorting within the UI.
+        var self = this;
+        function compare(a, b)
+        {
+            var locA = self.getObjectDescription(a);
+            var locB = self.getObjectDescription(b);
+
+            if (locA.path > locB.path)
+                return 1;
+            if (locA.path < locB.path)
+                return -1;
+            if (locA.name > locB.name)
+                return 1;
+            if (locA.name < locB.name)
+                return -1;
+
+            return 0;
+        }
+
+        var allLocs = this.getLocationList().sort(compare);
+        for (var curPos = 0; curPos < allLocs.length && allLocs[curPos] != this.location; curPos++);
+
+        function transformIndex(index)
+        {
+            if (reverse)
+            {
+                // For the reverse case we need to implement wrap around.
+                var intermediate = curPos - index - 1;
+                return (intermediate < 0 ? allLocs.length : 0) + intermediate;
+            }
+            else
+            {
+                return (curPos + index + 1) % allLocs.length;
+            }
+        };
+
+        for (var next = 0; next < allLocs.length - 1; next++)
+        {
+            var object = allLocs[transformIndex(next)];
+
+            if (match(object))
+            {
+                this.navigate(object);
+                return object;
+            }
+        }
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+    /**
+     * Options menu item
+     * @typedef {Object} OptionsMenuItem
+     * @property {String} label - Label of the item
+     * @property {String} tooltiptext - Tooltip text of the item
+     * @property {Boolean} nol10n - If true, the label and tooltiptext won't be translated
+     * @property {String} type - Type of the menu item
+     * @property {Boolean} checked - If true, the item is checked
+     * @property {Function} command - Command, which is executed when the item is clicked
+     */
+
+    /**
+     * Called when "Options" clicked. Return array of
+     *
+     * @returns {OptionsMenuItem[]} Generated menu items
+     */
+    getOptionsMenuItems: function()
+    {
+        return null;
+    },
+
+    /**
+     * Called by chrome.onContextMenu to build the context menu when this panel has focus.
+     * See also FirebugRep for a similar function also called by onContextMenu
+     * Extensions may monkey patch and chain off this call
+     *
+     * @param object: the 'realObject', a model value, e.g. a DOM property
+     * @param target: the HTML element clicked on.
+     * @returns an array of menu items.
+     */
+    getContextMenuItems: function(object, target)
+    {
+        return [];
+    },
+
+    getBreakOnMenuItems: function()
+    {
+        return [];
+    },
+
+    getEditor: function(target, value)
+    {
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+    getDefaultSelection: function()
+    {
+        return null;
+    },
+
+    browseObject: function(object)
+    {
+    },
+
+    getPopupObject: function(target)
+    {
+        return Firebug.getRepObject(target);
+    },
+
+    getTooltipObject: function(target)
+    {
+        return Firebug.getRepObject(target);
+    },
+
+    showInfoTip: function(infoTip, x, y)
+    {
+
+    },
+
+    getObjectPath: function(object)
+    {
+        return null;
+    },
+
+    /**
+     * An array of objects that can be passed to getObjectLocation.
+     * The list of things a panel can show, e.g. sourceFiles.
+     * Only shown if panel.location is defined and supportsObject is true
+     */
+    getLocationList: function()
+    {
+        return null;
+    },
+
+    getDefaultLocation: function()
+    {
+        return null;
+    },
+
+    getObjectLocation: function(object)
+    {
+        return "";
+    },
+
+    /**
+     * URL parts
+     * @typedef {Object} URLParts
+     * @property {String} path - Group/category label
+     * @property {String} name - Item label
+     */
+
+    /**
+     * Text for the location list menu e.g. Script panel source file list
+     *
+     * @returns {URLParts} Object description
+     */
+    getObjectDescription: function(object)
+    {
+        var url = this.getObjectLocation(object);
+        return Url.splitURLBase(url);
+    },
+
+    /**
+     *  UI signal that a tab needs attention, e.g. Script panel is currently stopped on a breakpoint
+     *  @param {Boolean} show If true, highlighting is turned on
+     */
+    highlight: function(show)
+    {
+        var tab = this.getTab();
+        if (!tab)
+            return;
+
+        if (show)
+            tab.setAttribute("highlight", "true");
+        else
+            tab.removeAttribute("highlight");
+    },
+
+    getTab: function()
+    {
+        return Firebug.getPanelTab(this.name);
+    },
+
+    /**
+     * If the panel supports source viewing, then return a SourceLink, else null
+     *
+     * @param target an element from the panel under the mouse
+     * @param object the realObject under the mouse
+     */
+    getSourceLink: function(target, object)
+    {
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Support for Break On Next
+
+    /**
+     * Called by the framework to see if the panel currently supports BON
+     */
+    supportsBreakOnNext: function()
+    {
+        return this.breakable;  // most panels just use this flag
+    },
+
+    /**
+     * Called by the framework when the user clicks on the Break On Next button.
+     *
+     * @param {Boolean} armed Set to true if the Break On Next feature is
+     * to be armed for action and set to false if the Break On Next should be disarmed.
+     * If 'armed' is true, then the next call to shouldBreakOnNext should be |true|.
+     */
+    breakOnNext: function(armed)
+    {
+    },
+
+    /**
+     * Called when a panel is selected/displayed. The method should return true
+     * if the Break On Next feature is currently armed for this panel.
+     */
+    shouldBreakOnNext: function()
+    {
+        return false;
+    },
+
+    /**
+     * Returns labels for Break On Next tooltip (one for enabled and one for disabled state).
+     *
+     * @param {Boolean} enabled Set to true if the Break On Next feature is
+     * currently activated for this panel.
+     */
+    getBreakOnNextTooltip: function(enabled)
+    {
+        return null;
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Selected Object
+
+    /**
+     * Define getter for the |selection| property. This way we can always check if the current
+     * selected object is valid and reset if necessary.
+     */
+    get selection()
+    {
+        try
+        {
+            if (this._selection && Wrapper.isDeadWrapper(this._selection))
+                this._selection = null;
+        }
+        catch (err)
+        {
+            this._selection = null;
+        }
+
+        return this._selection;
+    },
+
+    set selection(val)
+    {
+        this._selection = val;
+    }
+});
+
+// ********************************************************************************************* //
+// Registration
+
+// xxxHonza: backward compatibility.
+Firebug.Panel = Panel;
+
+return Panel;
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/chrome/panelActivation.js b/content/firebug/chrome/panelActivation.js
index f9730bf..338d486 100644
--- a/content/firebug/chrome/panelActivation.js
+++ b/content/firebug/chrome/panelActivation.js
@@ -1,6 +1,8 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
+    "firebug/chrome/rep",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/chrome/firefox",
@@ -10,9 +12,10 @@ define([
     "firebug/lib/url",
     "firebug/lib/dom",
     "firebug/lib/options",
-    "firebug/chrome/window",
 ],
-function(Obj, Firebug, Firefox, Locale, Domplate, Xpcom, Url, Dom, Options, Win) {
+function(Module, Rep, Obj, Firebug, Firefox, Locale, Domplate, Xpcom, Url, Dom, Options) {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
@@ -31,10 +34,10 @@ var {domplate, DIV, H1, SPAN, P, A} = Domplate;
 /**
  * @module Implements Panel activation logic. A Firebug panel can support activation in order
  * to avoid performance penalties in cases when panel's features are not necessary at the moment.
- * Such panel must be derived from {@link Firebug.ActivablePanel} and appropriate activable
- * module from {@link Firebug.ActivableModule}
+ * Such panel must be derived from {@link ActivablePanel} and appropriate activable
+ * module from {@link ActivableModule}
  */
-Firebug.PanelActivation = Obj.extend(Firebug.Module,
+Firebug.PanelActivation = Obj.extend(Module,
 /** @lends Firebug.PanelActivation */
 {
     dispatchName: "panelActivation",
@@ -43,7 +46,7 @@ Firebug.PanelActivation = Obj.extend(Firebug.Module,
 
     initialize: function()
     {
-        prefs.addObserver(Firebug.Options.getPrefDomain(), this, false);
+        prefs.addObserver(Options.getPrefDomain(), this, false);
         Firebug.connection.addListener(this);
     },
 
@@ -60,7 +63,7 @@ Firebug.PanelActivation = Obj.extend(Firebug.Module,
 
     shutdown: function()
     {
-        prefs.removeObserver(Firebug.Options.getPrefDomain(), this, false);
+        prefs.removeObserver(Options.getPrefDomain(), this, false);
         Firebug.connection.removeListener(this);
     },
 
@@ -118,7 +121,7 @@ Firebug.PanelActivation = Obj.extend(Firebug.Module,
             return true;
 
         // Panel "class" object is used to decide whether a panel is disabled
-        // or not (i.e.: isEnabled is a static method of Firebug.Panel)
+        // or not (i.e.: isEnabled is a static method of Panel)
         return panelType ? panelType.prototype.isEnabled() : false;
     },
 
@@ -189,11 +192,12 @@ Firebug.PanelActivation = Obj.extend(Firebug.Module,
         try
         {
             var panelName = parts[2];
-            var enable = Firebug.Options.get(panelName + ".enableSites");
-
-            var panelType = Firebug.getPanelType(panelName, enable);
+            var panelType = Firebug.getPanelType(panelName);
             if (panelType)
+            {
+                var enable = Options.get(panelName + ".enableSites");
                 this.onActivationChanged(panelType, enable);
+            }
         }
         catch (e)
         {
@@ -224,29 +228,7 @@ Firebug.PanelActivation = Obj.extend(Firebug.Module,
     // respond to event
     onClearAnnotations: function()
     {
-        var currentWin = Firebug.currentContext ? Firebug.currentContext.window : null;
-
-        // Close all contexts (in all browser windows)
-        Win.iterateBrowserWindows("navigator:browser", function(win)
-        {
-            return win.Firebug.TabWatcher.iterateContexts(function(context)
-            {
-                try
-                {
-                    Firebug.connection.closeContext(context);
-                }
-                catch (err)
-                {
-                    if (FBTrace.DBG_ERRORS)
-                        FBTrace.sysout("panelActivation.onClearAnnotations; EXCEPTION " + err, err);
-                }
-            });
-        });
-
-        if (currentWin)
-            currentWin.focus();
-
-        Firebug.StartButton.resetTooltip();
+        Firebug.closeFirebug(true);  // and we turn off as it now cannot be enabled
     },
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -268,8 +250,8 @@ Firebug.PanelActivation = Obj.extend(Firebug.Module,
         if (Options.get(clearConfirmationPref))
         {
             var check = {value: false};
-            var flags = prompts.BUTTON_POS_0 * prompts.BUTTON_TITLE_YES +  
-            prompts.BUTTON_POS_1 * prompts.BUTTON_TITLE_NO;  
+            var flags = prompts.BUTTON_POS_0 * prompts.BUTTON_TITLE_YES +
+            prompts.BUTTON_POS_1 * prompts.BUTTON_TITLE_NO;
 
             if (!prompts.confirmEx(Firebug.chrome.window, Locale.$STR("Firebug"),
                 Locale.$STR("annotations.confirm.clear"), flags, "", "", "",
@@ -302,7 +284,7 @@ Firebug.PanelActivation = Obj.extend(Firebug.Module,
             Firebug.allPagesActivation = "none";
         }
 
-        Firebug.Options.set("allPagesActivation", Firebug.allPagesActivation);
+        Options.set("allPagesActivation", Firebug.allPagesActivation);
         this.updateAllPagesActivation();
     },
 
@@ -334,7 +316,7 @@ Firebug.PanelActivation = Obj.extend(Firebug.Module,
 /**
  * @domplate This template renders default content for disabled panels.
  */
-Firebug.DisabledPanelBox = domplate(Firebug.Rep,
+Firebug.DisabledPanelBox = domplate(Rep,
 /** @lends Firebug.DisabledPanelBox */
 {
     tag:
@@ -368,8 +350,10 @@ Firebug.DisabledPanelBox = domplate(Firebug.Rep,
         else
         {
             if (FBTrace.DBG_ERRORS)
+            {
                 FBTrace.sysout("panelActivation.onEnable; panel is not activable: " +
                     Firebug.getPanelTitle(panelType));
+            }
         }
     },
 
diff --git a/content/firebug/chrome/panelNotification.js b/content/firebug/chrome/panelNotification.js
new file mode 100644
index 0000000..f6ce67c
--- /dev/null
+++ b/content/firebug/chrome/panelNotification.js
@@ -0,0 +1,90 @@
+/* See license.txt for terms of usage */
+
+define([
+    "firebug/firebug",
+    "firebug/lib/trace",
+    "firebug/lib/domplate",
+    "firebug/lib/locale",
+    "firebug/chrome/window",
+    "firebug/lib/css",
+    "firebug/lib/dom",
+],
+function(Firebug, FBTrace, Domplate, Locale, Win, Css, Dom) {
+
+"use strict";
+
+// ********************************************************************************************* //
+// Constants
+
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+
+var {domplate, DIV, TABLE, TBODY, TR, TD, SPAN, BUTTON} = Domplate;
+
+// ********************************************************************************************* //
+// Implementation
+
+var PanelNotification = domplate(
+{
+    tag:
+        TABLE({"class": "panelNotification", cellpadding: 0, cellspacing: 0},
+            TBODY(
+                TR({"class": "panelNotificationRow"},
+                    TD({"class": "panelNotificationCol"},
+                        SPAN({"class": "panelNotificationMessage"},
+                            "$message"
+                        )
+                    ),
+                    TD({"class": "panelSeparatorCol"}),
+                    TD({"class": "panelNotificationCol"},
+                        BUTTON({"class": "panelNotificationButton",
+                            title: "$buttonTooltip",
+                            onclick: "$onPreferences"},
+                            "$buttonLabel"
+                        )
+                    )
+                )
+            )
+        ),
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+    onPreferences: function(event)
+    {
+        var table = Dom.getAncestorByClass(event.target, "panelNotification");
+        Win.openNewTab("about:config?filter=" + table.config.prefName);
+    },
+
+    // xxxHonza: this API should be a little more generic
+    updateCounter: function(row)
+    {
+        var container = Dom.getAncestorByClass(row, "panelNotificationBox");
+        if (container)
+            Css.removeClass(container, "collapsed");
+
+        // Update info within the limit row.
+        var message = row.getElementsByClassName("panelNotificationMessage").item(0);
+        message.firstChild.nodeValue = Locale.$STRP("plural.Limit_Exceeded2",
+            [row.config.totalCount]);
+    },
+
+    render: function(parent, config)
+    {
+        // Set default values
+        config.buttonTooltip = config.buttonTooltip || null;
+        config.buttonLabel = config.buttonLabel || Locale.$STR("LimitPrefs");
+        config.message = config.message || Locale.$STRP("plural.Limit_Exceeded2", [0]);
+
+        var element = this.tag.append(config, parent, this);
+        element.config = config;
+        return element;
+    }
+});
+
+// ********************************************************************************************* //
+// Registration
+
+return PanelNotification;
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/chrome/plugin.js b/content/firebug/chrome/plugin.js
index 4b7defb..0a1d06c 100644
--- a/content/firebug/chrome/plugin.js
+++ b/content/firebug/chrome/plugin.js
@@ -1,18 +1,19 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/panel",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/trace/debug",
 ],
-function(Obj, Firebug, Debug) {
+function(Panel, Obj, Firebug, Debug) {
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 // This is a panel implemented as its own browser with its own URL
 
 Firebug.PluginPanel = function() {};
 
-Firebug.PluginPanel.prototype = Obj.extend(Firebug.Panel,
+Firebug.PluginPanel.prototype = Obj.extend(Panel,
 {
     createBrowser: function()
     {
@@ -39,7 +40,10 @@ Firebug.PluginPanel.prototype = Obj.extend(Firebug.Panel,
     browserReady: function()
     {
         this.browser.removeEventListener("DOMContentLoaded", this.browserReady, false);
-        if (FBTrace.DBG_INITIALIZE) FBTrace.sysout("plugin.browserReady DOMContentLoaded addEventListener\n");
+
+        if (FBTrace.DBG_INITIALIZE)
+            FBTrace.sysout("plugin.browserReady DOMContentLoaded addEventListener");
+
         this.innerPanel = this.browser.contentWindow.FirebugPanel; // XXXjjb ?
         if (this.visible)
         {
@@ -49,19 +53,19 @@ Firebug.PluginPanel.prototype = Obj.extend(Firebug.Panel,
         }
     },
 
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
     // extends Panel
 
     initialize: function()
     {
         this.browserReady = Obj.bindFixed(this.browserReady, this);
-        Firebug.Panel.initialize.apply(this, arguments);
+        Panel.initialize.apply(this, arguments);
     },
 
     destroy: function(state)
     {
         this.destroyBrowser();
-        Firebug.Panel.destroy.apply(this, arguments);
+        Panel.destroy.apply(this, arguments);
     },
 
     show: function(state)
@@ -115,7 +119,7 @@ Firebug.PluginPanel.prototype = Obj.extend(Firebug.Panel,
     }
 });
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 
 function innerCall(innerPanel, name, args)
 {
@@ -129,10 +133,10 @@ function innerCall(innerPanel, name, args)
     }
 }
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 // Registration
 
 return Firebug.PluginPanel;
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 });
diff --git a/content/firebug/chrome/privacy.js b/content/firebug/chrome/privacy.js
index 66c81b9..e1fe3ec 100644
--- a/content/firebug/chrome/privacy.js
+++ b/content/firebug/chrome/privacy.js
@@ -1,12 +1,13 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/trace",
     "firebug/lib/object",
     "firebug/lib/array",
     "firebug/lib/events",
 ],
-function(FBTrace, Obj, Arr, Events) {
+function(Module, FBTrace, Obj, Arr, Events) {
 
 // ********************************************************************************************* //
 // Constants
@@ -32,7 +33,7 @@ catch (err)
  * xxxHonza: as soon as Fx 22 is the min for Firebug most of the methods can be removed.
  * The most important one will be the isPrivateBrowsing
  */
-var Privacy = Obj.extend(Firebug.Module,
+var Privacy = Obj.extend(Module,
 {
     initialize: function()
     {
diff --git a/content/firebug/chrome/rep.js b/content/firebug/chrome/rep.js
new file mode 100644
index 0000000..2988c3a
--- /dev/null
+++ b/content/firebug/chrome/rep.js
@@ -0,0 +1,167 @@
+/* See license.txt for terms of usage */
+
+define([
+    "firebug/firebug",
+    "firebug/lib/trace",
+    "firebug/lib/locale",
+    "firebug/lib/string",
+    "firebug/lib/domplate",
+    "firebug/html/inspector",
+],
+function(Firebug, FBTrace, Locale, Str, Domplate, Inspector) {
+
+"use strict";
+
+// ********************************************************************************************* //
+// Constants
+
+var TraceError = FBTrace.to("DBG_ERRORS");
+
+// ********************************************************************************************* //
+// Implementation
+
+var Rep = Domplate.domplate(
+{
+    className: "",
+    inspectable: true,
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+    supportsObject: function(object, type)
+    {
+        return false;
+    },
+
+    highlightObject: function(object, context)
+    {
+        var realObject = this.getRealObject(object, context);
+        if (realObject)
+            Inspector.highlightObject(realObject, context);
+    },
+
+    unhighlightObject: function(object, context)
+    {
+        Inspector.highlightObject(null);
+    },
+
+    inspectObject: function(object, context)
+    {
+        Firebug.chrome.select(object);
+    },
+
+    browseObject: function(object, context)
+    {
+    },
+
+    persistObject: function(object, context)
+    {
+    },
+
+    getRealObject: function(object, context)
+    {
+        return object;
+    },
+
+    getTitle: function(object)
+    {
+        if (!object)
+        {
+            TraceError.sysout("Rep.getTitle; ERROR No object provided");
+            return "null object";
+        }
+
+        try
+        {
+            if (object.constructor && typeof(object.constructor) == 'function')
+            {
+                var ctorName = object.constructor.name;
+
+                // xxxsz: Objects with 'Object' as constructor name should also be shown.
+                // See issue 6148.
+                if (ctorName)
+                    return ctorName;
+            }
+        }
+        catch (e)
+        {
+            TraceError.sysout("rep.getTitle; EXCEPTION " + e, e);
+        }
+
+        var label = Str.safeToString(object); // e.g. [object XPCWrappedNative [object foo]]
+
+        const re =/\[object ([^\]]*)/;
+        var m = re.exec(label);
+        var n = null;
+        if (m)
+            n = re.exec(m[1]);  // e.g. XPCWrappedNative [object foo
+
+        if (n)
+            return n[1];  // e.g. foo
+        else
+            return m ? m[1] : label;
+    },
+
+    showInfoTip: function(infoTip, target, x, y)
+    {
+        return false;
+    },
+
+    getTooltip: function(object)
+    {
+        return null;
+    },
+
+    /**
+     * Called by chrome.onContextMenu to build the context menu when the underlying object
+     * has this rep. See also Panel for a similar function also called by onContextMenu
+     * Extensions may monkey patch and chain off this call
+     *
+     * @param object: the 'realObject', a model value, e.g. a DOM property
+     * @param target: the HTML element clicked on.
+     * @param context: the context, probably Firebug.currentContext
+     * @return an array of menu items.
+     */
+    getContextMenuItems: function(object, target, context)
+    {
+        return [];
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Convenience for Domplate templates
+
+    STR: function(name)
+    {
+        return Locale.$STR(name);
+    },
+
+    cropString: function(text)
+    {
+        return Str.cropString(text);
+    },
+
+    cropMultipleLines: function(text, limit)
+    {
+        return Str.cropMultipleLines(text, limit);
+    },
+
+    toLowerCase: function(text)
+    {
+        return text ? text.toLowerCase() : text;
+    },
+
+    plural: function(n)
+    {
+        return n == 1 ? "" : "s";
+    }
+});
+
+// ********************************************************************************************* //
+// Registration
+
+// xxxHonza: backward compatibility
+Firebug.Rep = Rep;
+
+return Rep;
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/chrome/reps.js b/content/firebug/chrome/reps.js
index ed0540c..10cd76f 100644
--- a/content/firebug/chrome/reps.js
+++ b/content/firebug/chrome/reps.js
@@ -28,16 +28,18 @@ define([
     "arch/compilationunit",
     "firebug/net/netUtils",
     "firebug/chrome/panelActivation",
+    "firebug/chrome/rep",
+    "firebug/html/inspector",
 ],
 function(Obj, Arr, Firebug, Domplate, Firefox, Xpcom, Locale, HTMLLib, Events, Wrapper, Options,
     Url, SourceLink, StackFrame, Css, Dom, Win, System, Xpath, Str, Xml, ToggleBranch,
-    ClosureInspector, Menu, CompilationUnit, NetUtils, PanelActivation) {
-
-with (Domplate) {
+    ClosureInspector, Menu, CompilationUnit, NetUtils, PanelActivation, Rep, Inspector) {
 
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, FOR, TAG, DIV, SPAN, TR, P, UL, LI, PRE, A} = Domplate;
+
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 
@@ -75,7 +77,7 @@ var OBJECTLINK = FirebugReps.OBJECTLINK =
 
 // ********************************************************************************************* //
 
-FirebugReps.Undefined = domplate(Firebug.Rep,
+FirebugReps.Undefined = domplate(Rep,
 {
     tag: OBJECTBOX("undefined"),
 
@@ -91,7 +93,7 @@ FirebugReps.Undefined = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.Null = domplate(Firebug.Rep,
+FirebugReps.Null = domplate(Rep,
 {
     tag: OBJECTBOX("null"),
 
@@ -107,7 +109,7 @@ FirebugReps.Null = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.Hint = domplate(Firebug.Rep,
+FirebugReps.Hint = domplate(Rep,
 {
     tag: OBJECTBOX("$object"),
 
@@ -118,7 +120,7 @@ FirebugReps.Hint = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.Nada = domplate(Firebug.Rep,
+FirebugReps.Nada = domplate(Rep,
 {
     tag: SPAN(""),
 
@@ -129,15 +131,20 @@ FirebugReps.Nada = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.Number = domplate(Firebug.Rep,
+FirebugReps.Number = domplate(Rep,
 {
-    tag: OBJECTBOX({"_repObject": "$object"}, "$object"),
+    tag: OBJECTBOX({"_repObject": "$object"}, "$object|stringify"),
     tinyTag: OBJECTBOX("$object"),
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
     className: "number",
 
+    stringify: function(object)
+    {
+        return (Object.is(object, -0) ? "-0" : String(object));
+    },
+
     supportsObject: function(object, type)
     {
         return type == "boolean" || type == "number";
@@ -152,7 +159,7 @@ FirebugReps.Number = domplate(Firebug.Rep,
 // (See issues 3816, 6130.)
 // XXX: This would look much nicer with support for IF in domplate.
 var reSpecialWhitespace = /  |[\t\n]/;
-FirebugReps.SpecialWhitespaceString = domplate(Firebug.Rep,
+FirebugReps.SpecialWhitespaceString = domplate(Rep,
 {
     tag: PREOBJECTBOX({"_repObject": "$object"}, ""$object""),
 
@@ -169,7 +176,7 @@ FirebugReps.SpecialWhitespaceString = domplate(Firebug.Rep,
     }
 });
 
-FirebugReps.String = domplate(Firebug.Rep,
+FirebugReps.String = domplate(Rep,
 {
     tag: OBJECTBOX({"_repObject": "$object"}, ""$object""),
 
@@ -188,35 +195,7 @@ FirebugReps.String = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.XML = domplate(Firebug.Rep,
-{
-    tag: OBJECTBOX("$object|asString"),
-
-    shortTag: OBJECTBOX("$object|asShortString"),
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    className: "xml",
-
-    supportsObject: function(object, type)
-    {
-        return type == "xml";
-    },
-
-    asString: function(object)
-    {
-        return object.toXMLString();
-    },
-
-    asShortString: function(object)
-    {
-        return cropMultipleLines(this.asString(object));
-    },
-});
-
-// ********************************************************************************************* //
-
-FirebugReps.Text = domplate(Firebug.Rep,
+FirebugReps.Text = domplate(Rep,
 {
     tag: OBJECTBOX("$object"),
 
@@ -237,21 +216,21 @@ FirebugReps.Text = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.Caption = domplate(Firebug.Rep,
+FirebugReps.Caption = domplate(Rep,
 {
     tag: SPAN({"class": "caption"}, "$object")
 });
 
 // ********************************************************************************************* //
 
-FirebugReps.Warning = domplate(Firebug.Rep,
+FirebugReps.Warning = domplate(Rep,
 {
     tag: DIV({"class": "warning focusRow", role: "listitem"}, "$object|STR")
 });
 
 // ********************************************************************************************* //
 
-FirebugReps.Func = domplate(Firebug.Rep,
+FirebugReps.Func = domplate(Rep,
 {
     tag:
         OBJECTLINK("$object|summarizeFunction"),
@@ -361,7 +340,7 @@ FirebugReps.Func = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.Obj = domplate(Firebug.Rep,
+FirebugReps.Obj = domplate(Rep,
 {
     tag:
         OBJECTLINK(
@@ -435,7 +414,7 @@ FirebugReps.Obj = domplate(Firebug.Rep,
 
         if (props.length <= max)
         {
-            // There is not enough props yet (or at least, not enough props to
+            // There are not enough props yet (or at least, not enough props to
             // be able to know whether we should print "more..." or not).
             // Let's display also empty members and functions.
             this.getProps(props, object, max, function(t, value)
@@ -474,6 +453,9 @@ FirebugReps.Obj = domplate(Firebug.Rep,
         {
             for (var name in object)
             {
+                if (props.length > max)
+                    return;
+
                 var value;
                 try
                 {
@@ -498,10 +480,7 @@ FirebugReps.Obj = domplate(Firebug.Rep,
                             tag = FirebugReps.Obj.titleTag;
                     }
 
-                    if (props.length <= max)
-                        props.push({tag: tag, name: name, object: value, equal: "=", delim: ", "});
-                    else
-                        break;
+                    props.push({tag: tag, name: name, object: value, equal: "=", delim: ", "});
                 }
             }
         }
@@ -539,7 +518,7 @@ FirebugReps.ReferenceObj = function(target)
 /**
  * Rep for cycle reference in an array.
  */
-FirebugReps.Reference = domplate(Firebug.Rep,
+FirebugReps.Reference = domplate(Rep,
 {
     tag:
         OBJECTLINK({_repObject: "$object"},
@@ -735,7 +714,7 @@ FirebugReps.ArrBase = domplate(FirebugReps.Obj,
         target.removeAttribute("title");
 
         // Highlight multiple elements on the page.
-        Firebug.Inspector.highlightObject(arr, context);
+        Inspector.highlightObject(arr, context);
     },
 
     isArray: function(obj)
@@ -752,12 +731,16 @@ FirebugReps.Arr = domplate(FirebugReps.ArrBase,
         OBJECTBOX({_repObject: "$object",
             $hasTwisty: "$object|hasSpecialProperties",
             onclick: "$onToggleProperties"},
-            SPAN({"class": "arrayLeftBracket", role: "presentation"}, "["),
+            A({"class": "objectLink", onclick: "$onClickBracket"},
+                SPAN({"class": "arrayLeftBracket", role: "presentation"}, "[")
+            ),
             FOR("item", "$object|longArrayIterator",
                 TAG("$item.tag", {object: "$item.object"}),
                 SPAN({"class": "arrayComma", role: "presentation"}, "$item.delim")
             ),
-            SPAN({"class": "arrayRightBracket", role: "presentation"}, "]"),
+            A({"class": "objectLink", onclick: "$onClickBracket"},
+                SPAN({"class": "arrayRightBracket", role: "presentation"}, "]")
+            ),
             SPAN({"class": "arrayProperties", role: "group"})
         ),
 
@@ -774,18 +757,15 @@ FirebugReps.Arr = domplate(FirebugReps.ArrBase,
             SPAN({"class": "arrayProperties", role: "group"})
         ),
 
-    // http://code.google.com/p/fbug/issues/detail?id=874
+    onClickBracket: function(event)
+    {
+        var obj = Firebug.getRepObject(event.target);
+        Firebug.chrome.select(obj);
+    },
+
     isArray: function(obj)
     {
-        try
-        {
-            if (Arr.isArray(obj))
-                return true;
-            else if (isFinite(obj.length) && typeof obj.callee === "function") // arguments
-                return true;
-        }
-        catch (exc) {}
-        return false;
+        return Array.isArray(obj) || Object.prototype.toString.call(obj) === "[object Arguments]";
     }
 });
 
@@ -850,7 +830,7 @@ FirebugReps.ArrayLikeObject = domplate(FirebugReps.ArrBase,
 
 // ********************************************************************************************* //
 
-FirebugReps.Property = domplate(Firebug.Rep,
+FirebugReps.Property = domplate(Rep,
 {
     supportsObject: function(object, type)
     {
@@ -907,25 +887,7 @@ FirebugReps.NetFile = domplate(FirebugReps.Obj,
 
 // ********************************************************************************************* //
 
-function instanceOf(object, Klass)
-{
-    while (object != null)
-    {
-        if (object == Klass.prototype)
-           return true;
-
-        if (typeof(object) === "xml")
-            return (Klass.prototype === Xml.prototype);
-
-        object = object.__proto__;
-    }
-
-    return false;
-}
-
-// ********************************************************************************************* //
-
-FirebugReps.Element = domplate(Firebug.Rep,
+FirebugReps.Element = domplate(Rep,
 {
     className: "element",
 
@@ -946,7 +908,7 @@ FirebugReps.Element = domplate(Firebug.Rep,
             SPAN({"class": "$object|getVisible"},
                 SPAN({"class": "selectorTag"}, "$object|getSelectorTag"),
                 SPAN({"class": "selectorId"}, "$object|getSelectorId"),
-                SPAN({"class": "selectorClass"}, "$object|getSelectorClass"),
+                SPAN({"class": "selectorClass"}, "$object|getSelectorClasses"),
                 TAG("$object|getValueTag", {object: "$object"})
             )
          ),
@@ -1070,6 +1032,12 @@ FirebugReps.Element = domplate(Firebug.Rep,
         return (limit > 0) ? Str.cropString(attr.value, limit) : attr.value;
     },
 
+    getAttrTitle: function(attr)
+    {
+        var newValue = this.getAttrValue(attr);
+        return (attr.value != newValue) ? attr.value : undefined;
+    },
+
     getVisible: function(elt)
     {
         return Xml.isVisible(elt) ? "" : "selectorHidden";
@@ -1092,11 +1060,14 @@ FirebugReps.Element = domplate(Firebug.Rep,
         }
     },
 
-    getSelectorClass: function(elt)
+    getSelectorClasses: function(elt)
     {
         try
         {
-            return elt.classList.length > 0 ? ("." + elt.classList[0]) : "";
+            var selectorClasses = "";
+            for (var i=0, len=elt.classList.length; i<len; ++i)
+                selectorClasses += "." + elt.classList[i];
+            return selectorClasses;
         }
         catch (err)
         {
@@ -1222,14 +1193,6 @@ FirebugReps.Element = domplate(Firebug.Rep,
 
     paste: function(elt, clipboardContent, mode)
     {
-        if (elt instanceof window.HTMLElement)
-            return this.pasteHTML.apply(this, arguments);
-        else
-            return this.pasteXML.apply(this, arguments);
-    },
-
-    pasteHTML: function(elt, clipboardContent, mode)
-    {
         if (mode === "replaceInner")
             elt.innerHTML = clipboardContent;
         else if (mode === "replaceOuter")
@@ -1238,39 +1201,6 @@ FirebugReps.Element = domplate(Firebug.Rep,
             elt.insertAdjacentHTML(mode, clipboardContent);
     },
 
-    pasteXML: function(elt, clipboardContent, mode)
-    {
-        var contextNode, parentNode = elt.parentNode;
-        if (["beforeBegin", "afterEnd", "replaceOuter"].indexOf(mode) >= 0)
-            contextNode = parentNode;
-        else
-            contextNode = elt;
-
-        var pastedElements = Dom.markupToDocFragment(clipboardContent, contextNode);
-        switch (mode)
-        {
-            case "beforeBegin":
-                parentNode.insertBefore(pastedElements, elt);
-                break;
-            case "afterBegin":
-                elt.insertBefore(pastedElements, elt.firstChild);
-                break;
-            case "beforeEnd":
-                elt.appendChild(pastedElements);
-                break;
-            case "afterEnd":
-                Dom.insertAfter(pastedElements, elt);
-                break;
-            case "replaceInner":
-                Dom.eraseNode(elt);
-                elt.appendChild(pastedElements);
-                break;
-            case "replaceOuter":
-                parentNode.replaceChild(pastedElements, elt);
-                break;
-        }
-    },
-
     persistor: function(context, xpath)
     {
         var elts = xpath
@@ -1314,7 +1244,8 @@ FirebugReps.Element = domplate(Firebug.Rep,
     {
         if (this.ignoreTarget(target))
             return;
-        Firebug.Inspector.highlightObject(object, context);
+
+        Inspector.highlightObject(object, context);
     },
 
     persistObject: function(elt, context)
@@ -1350,12 +1281,8 @@ FirebugReps.Element = domplate(Firebug.Rep,
             }
         }
 
-        // Display xpath of the element.
-        var tooltip = this.getXPath(elt);
-        if (elt.namespaceURI)
-            tooltip += " (" + elt.namespaceURI + ")";
-
-        return tooltip;
+        // Don't show a tooltip when hovering an element (see issue 6706)
+        return "";
     },
 
     getContextMenuItems: function(elt, target, context)
@@ -1368,7 +1295,7 @@ FirebugReps.Element = domplate(Firebug.Rep,
         var clipboardContent = System.getStringDataFromClipboard();
         var isEltRoot = (elt === elt.ownerDocument.documentElement);
 
-        if (Xml.isElementHTML(elt) || Xml.isElementXHTML(elt))
+        if (Xml.isElementHTMLOrXHTML(elt))
             type = "HTML";
         else if (Xml.isElementMathML(elt))
             type = "MathML";
@@ -1386,7 +1313,7 @@ FirebugReps.Element = domplate(Firebug.Rep,
             command: Obj.bindFixed(this.copyHTML, this, elt)
         });
 
-        if (Xml.isElementHTML(elt) || Xml.isElementXHTML(elt))
+        if (Xml.isElementHTMLOrXHTML(elt))
         {
             items.push(
             {
@@ -1503,7 +1430,7 @@ FirebugReps.Element = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.TextNode = domplate(Firebug.Rep,
+FirebugReps.TextNode = domplate(Rep,
 {
     tag:
         OBJECTLINK(
@@ -1545,7 +1472,7 @@ FirebugReps.TextNode = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.RegExp = domplate(Firebug.Rep,
+FirebugReps.RegExp = domplate(Rep,
 {
     tag:
         OBJECTLINK(
@@ -1558,15 +1485,7 @@ FirebugReps.RegExp = domplate(Firebug.Rep,
 
     supportsObject: function(object, type)
     {
-        try
-        {
-            return type == "object" && Object.prototype.toString.call(object) === "[object RegExp]";
-        }
-        catch (err)
-        {
-            if (FBTrace.DBG_ERRORS)
-                FBTrace.sysout("reps.RegExp.supportsObject; EXCEPTION " + err, err);
-        }
+        return Object.prototype.toString.call(object) === "[object RegExp]";
     },
 
     getSource: function(object)
@@ -1581,7 +1500,7 @@ FirebugReps.RegExp = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.Document = domplate(Firebug.Rep,
+FirebugReps.Document = domplate(Rep,
 {
     tag:
         OBJECTLINK("Document ", SPAN({"class": "objectPropValue"}, "$object|getLocation")),
@@ -1597,7 +1516,7 @@ FirebugReps.Document = domplate(Firebug.Rep,
 
     supportsObject: function(object, type)
     {
-        return object instanceof window.Document || object instanceof window.XMLDocument;
+        return object instanceof window.Document;
     },
 
     browseObject: function(doc, context)
@@ -1629,7 +1548,7 @@ FirebugReps.Document = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.StyleSheet = domplate(Firebug.Rep,
+FirebugReps.StyleSheet = domplate(Rep,
 {
     tag:
         OBJECTLINK("StyleSheet ", SPAN({"class": "objectPropValue"}, "$object|getLocation")),
@@ -1711,7 +1630,7 @@ FirebugReps.StyleSheet = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.CSSRule = domplate(Firebug.Rep,
+FirebugReps.CSSRule = domplate(Rep,
 {
     tag:
         OBJECTLINK("$object|getType ", SPAN({"class": "objectPropValue"}, "$object|getDescription")),
@@ -1848,7 +1767,7 @@ FirebugReps.CSSRule = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.Window = domplate(Firebug.Rep,
+FirebugReps.Window = domplate(Rep,
 {
     tag:
         OBJECTLINK("$object|getWindowTitle ",
@@ -1919,7 +1838,7 @@ FirebugReps.Window = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.Event = domplate(Firebug.Rep,
+FirebugReps.Event = domplate(Rep,
 {
     className: "event",
 
@@ -1968,7 +1887,7 @@ FirebugReps.Event = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.SourceLink = domplate(Firebug.Rep,
+FirebugReps.SourceLink = domplate(Rep,
 {
     tag:
         OBJECTLINK(
@@ -2199,7 +2118,7 @@ FirebugReps.CompilationUnit = domplate(FirebugReps.SourceLink,
 // ********************************************************************************************* //
 
 // XXXjjb Since the repObject is fn the stack does not have correct line numbers
-FirebugReps.StackFrame = domplate(Firebug.Rep,
+FirebugReps.StackFrame = domplate(Rep,
 {
     tag:
         OBJECTBLOCK({$hasTwisty: "$object|hasArguments", _repObject: "$object",
@@ -2392,7 +2311,7 @@ FirebugReps.StackFrame = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.StackTrace = domplate(Firebug.Rep,
+FirebugReps.StackTrace = domplate(Rep,
 {
     tag:
         DIV({role : "group", "aria-label" : Locale.$STR("aria.labels.stack trace")},
@@ -2436,7 +2355,7 @@ FirebugReps.StackTrace = domplate(Firebug.Rep,
 // ********************************************************************************************* //
 
 // xxxsz: Is this code still in use?
-FirebugReps.Assert = domplate(Firebug.Rep,
+FirebugReps.Assert = domplate(Rep,
 {
     tag:
         DIV(
@@ -2480,7 +2399,7 @@ FirebugReps.Assert = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.SourceText = domplate(Firebug.Rep,
+FirebugReps.SourceText = domplate(Rep,
 {
     tag:
         DIV(
@@ -2494,13 +2413,13 @@ FirebugReps.SourceText = domplate(Firebug.Rep,
 
     lineIterator: function(sourceText)
     {
-        var maxLineNoChars = (sourceText.lines.length + "").length;
+        var maxLineNoChars = String(sourceText.lines.length).length;
         var list = [];
 
         for (var i = 0; i < sourceText.lines.length; ++i)
         {
             // Make sure all line numbers are the same width (with a fixed-width font)
-            var lineNo = (i+1) + "";
+            var lineNo = String(i + 1);
             while (lineNo.length < maxLineNoChars)
                 lineNo = " " + lineNo;
 
@@ -2518,7 +2437,7 @@ FirebugReps.SourceText = domplate(Firebug.Rep,
 
 //********************************************************************************************** //
 
-FirebugReps.nsIDOMHistory = domplate(Firebug.Rep,
+FirebugReps.nsIDOMHistory = domplate(Rep,
 {
     tag:
         OBJECTBOX({onclick: "$showHistory", _repObject: "$object"},
@@ -2563,7 +2482,7 @@ FirebugReps.nsIDOMHistory = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.ApplicationCache = domplate(Firebug.Rep,
+FirebugReps.ApplicationCache = domplate(Rep,
 {
     tag:
         OBJECTLINK("$object|summarizeCache"),
@@ -2593,7 +2512,7 @@ FirebugReps.ApplicationCache = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.Storage = domplate(Firebug.Rep,
+FirebugReps.Storage = domplate(Rep,
 {
     tag:
         OBJECTLINK(
@@ -2619,8 +2538,7 @@ FirebugReps.Storage = domplate(Firebug.Rep,
 
     summarize: function(storage)
     {
-        var object = this.objectView(storage);
-        return Locale.$STRP("firebug.storage.totalItems", [Object.keys(object).length]);
+        return Locale.$STRP("firebug.storage.totalItems", [storage.length]);
     },
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -2647,72 +2565,14 @@ FirebugReps.Storage = domplate(Firebug.Rep,
 
     propIterator: function(storage, max)
     {
-        var object = this.objectView(storage);
-        return FirebugReps.Obj.propIterator(object, max);
-    },
-
-    objectView: function(storage)
-    {
-        var object = this.makeObject(storage);
-        for (var any in object)
-            return object;
-
-        // We might have hit upon an https site (bug 709238).
-        // As a hack, we'll check if the current context's window
-        // contains the object as localStorage or sessionStorage.
-        try {
-            var context = Firebug.currentContext;
-            var win = context && context.window;
-            if (win && win.location.protocol === "https:")
-            {
-                var names = ["localStorage", "sessionStorage"], done = false;
-                for (var i = 0; i < 2; ++i)
-                {
-                    if (win[names[i]] !== storage)
-                        continue;
-                    Firebug.CommandLine.evaluate(
-                        "((" + this.makeObject + ")(" + names[i] + "))",
-                        context,
-                        null, null,
-                        function(result) {
-                            object = result;
-                            done = true;
-                        },
-                        function() {},
-                        true
-                    );
-                    if (done)
-                        break;
-                }
-            }
-        }
-        catch(e)
-        {
-            if (FBTrace.DBG_ERRORS)
-                FBTrace.sysout("reps.Storage.objectView; EXCEPTION " + e, e);
-        }
-
-        return object;
-    },
-
-    makeObject: function(storage)
-    {
-        // Create a raw object, free from getItem etc., from a storage.
-        // May be serialized and run in page scope.
-        var object = {};
-        try
+        // Extract names/values and pass them through to the standard propIterator.
+        var obj = Object.create(null);
+        for (var i = 0, len = storage.length; i < len; i++)
         {
-            for (var name in storage)
-            {
-                var value = storage.getItem(name);
-                Object.defineProperty(object, name, {value: value, enumerable: true});
-            }
+            var name = storage.key(i);
+            obj[name] = storage.getItem(name);
         }
-        catch(e)
-        {
-            // We can't log an error in page scope.
-        }
-        return object;
+        return FirebugReps.Obj.propIterator(obj, max);
     }
 });
 
@@ -2777,7 +2637,7 @@ FirebugReps.XPathResult = domplate(FirebugReps.Arr,
 
 // ********************************************************************************************* //
 
-FirebugReps.Description = domplate(Firebug.Rep,
+FirebugReps.Description = domplate(Rep,
 {
     className: "Description",
 
@@ -2822,7 +2682,7 @@ FirebugReps.Description = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.Attr = domplate(Firebug.Rep,
+FirebugReps.Attr = domplate(Rep,
 {
     tag:
         OBJECTLINK(
@@ -2855,7 +2715,7 @@ FirebugReps.Attr = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.Date = domplate(Firebug.Rep,
+FirebugReps.Date = domplate(Rep,
 {
     tag:
         OBJECTLINK(
@@ -2882,7 +2742,7 @@ FirebugReps.Date = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.NamedNodeMap = domplate(Firebug.Rep,
+FirebugReps.NamedNodeMap = domplate(Rep,
 {
     tag:
         OBJECTLINK(
@@ -2935,8 +2795,6 @@ FirebugReps.NamedNodeMap = domplate(Firebug.Rep,
     propIterator: function (object, max)
     {
         max = max || 3;
-        if (!object)
-            return [];
 
         var props = [];
         for (var i=0; i<object.length && i<max; i++)
@@ -2969,7 +2827,7 @@ FirebugReps.NamedNodeMap = domplate(Firebug.Rep,
         }
         else if (props.length > 0)
         {
-            props[props.length-1].delim = '';
+            props[props.length-1].delim = "";
         }
 
         return props;
@@ -2978,13 +2836,14 @@ FirebugReps.NamedNodeMap = domplate(Firebug.Rep,
 
 //********************************************************************************************** //
 
-FirebugReps.ClosureScope = domplate(Firebug.Rep,
+FirebugReps.ClosureScope = domplate(Rep,
 {
     tag: OBJECTBOX({_repObject: "$object"}, "$object|getTitle"),
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
     className: "scope",
+    inspectable: false,
 
     getTitle: function(object)
     {
@@ -3006,7 +2865,7 @@ FirebugReps.ClosureScope = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-FirebugReps.OptimizedAway = domplate(Firebug.Rep,
+FirebugReps.OptimizedAway = domplate(Rep,
 {
     tag: OBJECTBOX({_repObject: "$object"}, "$object|getTitle"),
 
@@ -3050,7 +2909,6 @@ Firebug.registerRep(
     FirebugReps.StackFrame,
     FirebugReps.NetFile,
     FirebugReps.Property,
-    FirebugReps.XML,
     FirebugReps.Arr,
     FirebugReps.ArrayLikeObject,
     FirebugReps.XPathResult,
@@ -3068,4 +2926,4 @@ Firebug.setDefaultReps(FirebugReps.Func, FirebugReps.Obj);
 return Firebug.Reps = FirebugReps;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/chrome/searchBox.js b/content/firebug/chrome/searchBox.js
index e143d2d..6d8d56e 100644
--- a/content/firebug/chrome/searchBox.js
+++ b/content/firebug/chrome/searchBox.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/css",
@@ -10,7 +11,7 @@ define([
     "firebug/lib/locale",
     "firebug/lib/options"
 ],
-function(Obj, Firebug, Css, Search, System, Str, Locale, Options) {
+function(Module, Obj, Firebug, Css, Search, System, Str, Locale, Options) {
 
 // ********************************************************************************************* //
 // Constants
@@ -29,7 +30,7 @@ const searchDelay = 150;
  * available for panels that have <code>searchable<code> property set to true (set to
  * false by default).
  */
-Firebug.Search = Obj.extend(Firebug.Module,
+Firebug.Search = Obj.extend(Module,
 {
     dispatchName: "search",
 
@@ -37,6 +38,7 @@ Firebug.Search = Obj.extend(Firebug.Module,
     {
         var el = document.activeElement;
         var id = el.id;
+        var doSearch = true;
 
         if (id == "fbPanelBar1-browser" || id == "fbPanelBar2-browser")
         {
@@ -49,11 +51,17 @@ Firebug.Search = Obj.extend(Firebug.Module,
                     sel = input.QueryInterface(Ci.nsIDOMNSEditableElement).
                         editor.selection.toString();
                 }
+                else
+                {
+                    doSearch = false;
+                }
             }
 
-            this.search(sel, Firebug.currentContext);
-            this.focus();
+            if (doSearch)
+                this.search(sel, Firebug.currentContext);
         }
+
+        this.focus();
     },
 
     search: function(text, context)
@@ -136,6 +144,7 @@ Firebug.Search = Obj.extend(Firebug.Module,
         if (immediate)
         {
             var found = panel.search(value, reverse);
+            panel.searchText = value;
             if (!found && value)
                this.onNotFound();
 
@@ -150,18 +159,24 @@ Firebug.Search = Obj.extend(Firebug.Module,
                 Css.removeClass(panelNode, "searching");
             }
 
-            panel.searchText = value;
-
             return found;
         }
         else
         {
+            var sBox = this;
             // After a delay, perform the search
             panelNode.searchTimeout = setTimeout(function()
             {
                 var found = panel.search(value, reverse);
+                panel.searchText = value;
                 if (!found && value)
-                    Firebug.Search.onNotFound(value);
+                {
+                    var shouldIgnore = panel.shouldIgnoreIntermediateSearchFailure;
+                    if (shouldIgnore && shouldIgnore.call(panel, value))
+                        found = true;
+                    else
+                        sBox.onNotFound();
+                }
 
                 if (value)
                 {
@@ -174,8 +189,8 @@ Firebug.Search = Obj.extend(Firebug.Module,
                     Css.removeClass(panelNode, "searching");
                 }
 
-                panel.searchText = value;
                 searchBox.status = (found ? "found" : "notfound");
+                sBox.setPlaceholder();
 
                 if (FBTrace.DBG_SEARCH)
                     FBTrace.sysout("search " + searchBox.status + " " + value);
@@ -266,6 +281,25 @@ Firebug.Search = Obj.extend(Firebug.Module,
         return history[0];
     },
 
+    setPlaceholder: function()
+    {
+        var panel = Firebug.chrome.getSelectedPanel();
+        if (!panel)
+            return;
+
+        var searchBox = Firebug.chrome.$("fbSearchBox");
+        if (panel.searchPlaceholder)
+        {
+            searchBox.placeholder = Locale.$STR(panel.searchPlaceholder);
+        }
+        else
+        {
+            var panelType = Firebug.getPanelType(panel.name);
+            var title = Firebug.getPanelTitle(panelType);
+            searchBox.placeholder = Locale.$STRF("search.Placeholder", [title]);
+        }
+    },
+
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
     // extends Module
 
@@ -301,6 +335,8 @@ Firebug.Search = Obj.extend(Firebug.Module,
         {
             searchBox.collapsed = false;
         }
+
+        this.setPlaceholder();
     }
 });
 
diff --git a/content/firebug/chrome/shortcuts.js b/content/firebug/chrome/shortcuts.js
index 9a4d678..b2e2d9e 100644
--- a/content/firebug/chrome/shortcuts.js
+++ b/content/firebug/chrome/shortcuts.js
@@ -1,26 +1,27 @@
 /* See license.txt for terms of usage */
 
 define([
-    "firebug/lib/lib",
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/chrome/firefox",
+    "firebug/firefox/customizeShortcuts",
 ],
-function(FBL, Obj, Firebug, Firefox) {
+function(Module, Obj, Firebug, Firefox, CustomizeShortcuts) {
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 // Constants
 
 Components.utils.import("resource://gre/modules/Services.jsm");
 
 var KeyEvent = window.KeyEvent;
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 
 /**
  * ShortcutsModel object implements keyboard shortcuts logic.
  */
-Firebug.ShortcutsModel = Obj.extend(Firebug.Module,
+Firebug.ShortcutsModel = Obj.extend(Module,
 {
     dispatchName: "shortcuts",
 
@@ -131,27 +132,23 @@ Firebug.ShortcutsModel = Obj.extend(Firebug.Module,
             this.keysets.push(keyElem.parentNode);
     },
 
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
     // UI Commands
+
     customizeShortcuts: function()
     {
-        var args = {
-            FBL: FBL,
-            FBTrace: FBTrace
-        };
-
-        // Open the "customize shortcuts" dialog. Pass FBL into the XUL window so that
-        // common APIs can be used (e.g. localization).
+        // Open the "customize shortcuts" dialog.
         window.openDialog("chrome://firebug/content/firefox/customizeShortcuts.xul", "",
-            "chrome,centerscreen,dialog,modal,resizable=yes", args);
+            "chrome,centerscreen,dialog,modal,resizable=yes", new CustomizeShortcuts());
     }
 });
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 // Registration
 
 Firebug.registerModule(Firebug.ShortcutsModel);
 
 return Firebug.ShortcutsModel;
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 });
diff --git a/content/firebug/chrome/tabWatcher.js b/content/firebug/chrome/tabWatcher.js
index 80630d1..d5abceb 100644
--- a/content/firebug/chrome/tabWatcher.js
+++ b/content/firebug/chrome/tabWatcher.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/eventSource",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/chrome/firefox",
@@ -17,7 +18,7 @@ define([
     "firebug/trace/traceModule",
     "firebug/chrome/tabContext",
 ],
-function(Obj, Firebug, Firefox, Xpcom, HttpRequestObserver, Events, Url, Http, Win,
+function(EventSource, Obj, Firebug, Firefox, Xpcom, HttpRequestObserver, Events, Url, Http, Win,
     Str, Arr, Debug, TraceListener, TraceModule) {
 
 // ********************************************************************************************* //
@@ -62,7 +63,7 @@ var showContextTimeout = 200;
  * responsible for creation of a context object that contains meta-data about currently
  * debugged page.
  */
-Firebug.TabWatcher = Obj.extend(new Firebug.Listener(),
+Firebug.TabWatcher = Obj.extend(new EventSource(),
 /** @lends Firebug.TabWatcher */
 {
     // Store contexts where they can be accessed externally
@@ -388,7 +389,7 @@ Firebug.TabWatcher = Obj.extend(new Firebug.Listener(),
         // The proper instance of Firebug.chrome object (different for detached Firebug and
         // accessible as Firebug.chrome property) must be used for the context object.
         // (the global context object Firebug.currentContext is also different for
-        // detached firebug).
+        // detached Firebug).
         var context = new contextType(win, browser, Firebug.chrome, persistedState);
         contexts.push(context);
 
@@ -763,10 +764,9 @@ Firebug.TabWatcher = Obj.extend(new Firebug.Listener(),
 
     iterateContexts: function(fn)
     {
-        var tempContexts = Arr.cloneArray(contexts);
-        for (var i = 0; i < tempContexts.length; i++)
+        for (var i = 0; i < contexts.length; ++i)
         {
-            var rc = fn(tempContexts[i]);
+            var rc = fn(contexts[i]);
             if (rc)
                 return rc;
         }
diff --git a/content/firebug/chrome/tableRep.js b/content/firebug/chrome/tableRep.js
index 41b25f5..4f3adb1 100644
--- a/content/firebug/chrome/tableRep.js
+++ b/content/firebug/chrome/tableRep.js
@@ -1,26 +1,52 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/firebug",
+    "firebug/chrome/rep",
+    "firebug/lib/trace",
     "firebug/lib/domplate",
     "firebug/lib/locale",
-    "firebug/chrome/reps",
     "firebug/lib/dom",
     "firebug/lib/css",
-    "firebug/lib/object",
     "firebug/lib/array",
+    "firebug/chrome/reps",
 ],
-function(Domplate, Locale, FirebugReps, Dom, Css, Obj, Arr) {
+function(Firebug, Rep, FBTrace, Domplate, Locale, Dom, Css, Arr, FirebugReps) {
+
+"use strict";
+
+// ********************************************************************************************* //
+// Resources
+
+// http://www.softwareishard.com/blog/firebug/tabular-logs-in-firebug/
 
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, DIV, TABLE, THEAD, TR, FOR, TH, TBODY, TD, TAG} = Domplate;
+
+// Tracing
+var Trace = FBTrace.to("DBG_TABLEREP");
+var TraceError = FBTrace.to("DBG_ERRORS");
+
 // ********************************************************************************************* //
 
-with (Domplate) {
-FirebugReps.Table = domplate(Firebug.Rep,
+/**
+ * @domplate The template is used to generate tabular UI for generic data/objects. Tables are
+ * typically logged into the Console panel through console.table() API, but the UI can be
+ * used within other panels too. Various complex as well as simple generic objects and arrays
+ * are supported.
+ */
+var TableRep = domplate(Rep,
+/** @lends TableRep */
 {
     className: "table",
     tableClassName: "dataTable",
+    groupable: false,
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Domplate
+
     tag:
         DIV({"class": "dataTableSizer", "tabindex": "-1" },
             TABLE({"class": "$tableClassName", cellspacing: 0, cellpadding: 0, width: "100%",
@@ -101,6 +127,9 @@ FirebugReps.Table = domplate(Firebug.Rep,
 
             cols.push(value);
         }
+
+        Trace.sysout("tableRep.getColumns", {cols: cols, row: row});
+
         return cols;
     },
 
@@ -109,12 +138,36 @@ FirebugReps.Table = domplate(Firebug.Rep,
         if (typeof(obj) != "object")
             return [obj];
 
-        if (FBTrace.DBG_CONSOLE)
-            FBTrace.sysout("FirebugReps.Table.getProps", {obj: obj, arr: Arr.cloneArray(obj)});
+        Trace.sysout("tableRep.getProps", obj);
+
+        var tabularData = this.isTabularData(obj);
 
-        if (obj.length)
+        if (Array.isArray(obj) && !tabularData)
+        {
+            // An array with no child objects (i.e. not tabular data),
+            // use two columns (name, value)
+            return getArrayProps(obj);
+        }
+        else if (Array.isArray(obj))
+        {
+            // Array with inner objects (i.e. tabular data), columns are
+            // generated according to props in the first object (i.e. first row).
             return Arr.cloneArray(obj);
+        }
+        else if (obj instanceof window.Storage)
+        {
+            // Special case for Storage. It uses different way to iterate over all items.
+            // Logged as generic array (two columns: name value)
+            return getStorageProps(obj);
+        }
+        else if (!tabularData)
+        {
+            // Generic object, use two columns (prop names, prop values) to display it.
+            return getObjectProps(obj);
+        }
 
+        // Typically map of objects (or object with object properties, i.e. tabular data),
+        // columns generated according to the first property object (aka first row). 
         var arr = [];
         for (var p in obj)
         {
@@ -155,6 +208,10 @@ FirebugReps.Table = domplate(Firebug.Rep,
         {
             var cell = row.childNodes[colIndex];
             var value = numerical ? parseFloat(cell.textContent) : cell.textContent;
+
+            // Use the original textContent if the parsing failed.
+            value = value || cell.textContent;
+
             values.push({row: row, value: value});
         }
 
@@ -164,7 +221,7 @@ FirebugReps.Table = domplate(Firebug.Rep,
         var headerSorted = Dom.getChildByClass(headerRow, "headerSorted");
         Css.removeClass(headerSorted, "headerSorted");
         if (headerSorted)
-            headerSorted.removeAttribute('aria-sort');
+            headerSorted.removeAttribute("aria-sort");
 
         var header = headerRow.childNodes[colIndex];
         Css.setClass(header, "headerSorted");
@@ -177,7 +234,7 @@ FirebugReps.Table = domplate(Firebug.Rep,
 
             header.sorted = -1;
 
-            for (var i = 0; i < values.length; ++i)
+            for (var i = 0; i < values.length; i++)
                 tbody.appendChild(values[i].row);
         }
         else
@@ -188,7 +245,7 @@ FirebugReps.Table = domplate(Firebug.Rep,
 
             header.sorted = 1;
 
-            for (var i = values.length-1; i >= 0; --i)
+            for (var i = values.length-1; i >= 0; i--)
                 tbody.appendChild(values[i].row);
         }
     },
@@ -228,14 +285,15 @@ FirebugReps.Table = domplate(Firebug.Rep,
         }
         catch (err)
         {
-            if (FBTrace.DBG_CONSOLE)
-                FBTrace.sysout("consoleInjector.table; EXCEPTION " + err, err);
+            TraceError.sysout("consoleInjector.table; EXCEPTION " + err, err);
         }
         finally
         {
             Firebug.stringCropLength = prevValue;
             delete this.columns;
         }
+
+        return row;
     },
 
     computeColumns: function(data, cols)
@@ -255,32 +313,52 @@ FirebugReps.Table = domplate(Firebug.Rep,
             });
         }
 
-        if (FBTrace.DBG_CONSOLE)
-            FBTrace.sysout("consoleInjector.table; columns", columns);
-
         // Generate header info from the data dynamically.
         if (!columns.length)
             columns = this.getHeaderColumns(data);
 
+        Trace.sysout("tableRep.computeColumns; columns:", columns);
+
         return columns;
     },
 
+    getFirstRow: function(data)
+    {
+        // Get the first row in the object.
+        var firstRow = null;
+        for (var p in data)
+            return data[p];
+    },
+
+    isTabularData: function(data)
+    {
+        var firstRow = this.getFirstRow(data);
+
+        // If the first property of given object is *not* an object we don't probably
+        // deal with a table structured data. In this case we assume that it's a generic
+        // object and the table will have two columns: object-properties and object-values.
+        return (typeof(firstRow) == "object");
+    },
+
     /**
-     * Analyse data and return dynamically created list of columns.
+     * Analyze data and return dynamically created list of columns.
      * @param {Object} data
      */
     getHeaderColumns: function(data)
     {
-        // Get the first row in the object.
-        var firstRow = null;
-        for (var p in data)
-        {
-            firstRow = data[p];
-            break;
-        }
+        var firstRow = this.getFirstRow(data);
 
+        // Generic objects (with no tabular structure) are displayed as two column table:
+        // property names and property values. 
         if (typeof(firstRow) != "object")
-            return [{label: Locale.$STR("firebug.reps.table.ObjectProperties")}];
+        {
+            Trace.sysout("tableRep.getHeaderColumns; Create columns for generic object");
+
+            return [
+                {label: Locale.$STR("firebug.reps.table.ObjectProperties"), property: "name"},
+                {label: Locale.$STR("firebug.reps.table.ObjectValues"), property: "value"}
+            ];
+        }
 
         // Put together a column property, label and type (type for default sorting logic).
         var header = [];
@@ -327,17 +405,51 @@ FirebugReps.Table = domplate(Firebug.Rep,
 
         return true;
     },
+});
 
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+// ********************************************************************************************* //
+// Get Properties Helpers
 
-    groupable: false
-});
-};
+function Property(name, value)
+{
+    this.name = name;
+    this.value = value;
+}
+
+function getStorageProps(storage)
+{
+    var result = [];
+    for (var i = 0, len = storage.length; i < len; i++)
+    {
+        var name = storage.key(i);
+        result.push(new Property(name, storage.getItem(name)));
+    }
+    return result;
+}
+
+function getArrayProps(arr)
+{
+    var result = [];
+    for (var i = 0; i < arr.length; i++)
+        result.push(new Property(i, arr[i]));
+    return result;
+}
+
+function getObjectProps(obj)
+{
+    var result = [];
+    for (var p in obj)
+        result.push(new Property(p, obj[p]));
+    return result;
+}
 
 // ********************************************************************************************* //
 // Registration
 
-return FirebugReps.Table;
+// Backward compatibility.
+FirebugReps.Table = TableRep;
+
+return TableRep;
 
 // ********************************************************************************************* //
 });
diff --git a/content/firebug/chrome/toggleSidePanels.js b/content/firebug/chrome/toggleSidePanels.js
index 28384cc..a0ff627 100644
--- a/content/firebug/chrome/toggleSidePanels.js
+++ b/content/firebug/chrome/toggleSidePanels.js
@@ -2,13 +2,14 @@
 
 define([
     "firebug/firebug",
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/lib/trace",
     "firebug/lib/dom",
     "firebug/lib/options",
     "firebug/lib/css",
 ],
-function(Firebug, Obj, FBTrace, Dom, Options, Css) {
+function(Firebug, Module, Obj, FBTrace, Dom, Options, Css) {
 
 // ********************************************************************************************* //
 // Constants
@@ -32,7 +33,7 @@ function(Firebug, Obj, FBTrace, Dom, Options, Css) {
  * Side panels visibility is updated upon 'updateSidePanels' event fired to all
  * UI listeners by Firebug chrome object.
  */
-var ToggleSidePanels = Obj.extend(Firebug.Module,
+var ToggleSidePanels = Obj.extend(Module,
 /** @lends ToggleSidePanels */
 {
     dispatchName: "ToggleSidePanels",
@@ -42,7 +43,7 @@ var ToggleSidePanels = Obj.extend(Firebug.Module,
 
     initialize: function()
     {
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
 
         // Register as a listener for 'updateSidePanels' event. 
         Firebug.registerUIListener(this);
@@ -55,7 +56,7 @@ var ToggleSidePanels = Obj.extend(Firebug.Module,
 
     shutdown: function()
     {
-        Firebug.Module.shutdown.apply(this, arguments);
+        Module.shutdown.apply(this, arguments);
 
         Firebug.unregisterUIListener(this);
     },
diff --git a/content/firebug/console/autoCompleter.js b/content/firebug/console/autoCompleter.js
index 369a60b..2733676 100644
--- a/content/firebug/console/autoCompleter.js
+++ b/content/firebug/console/autoCompleter.js
@@ -12,32 +12,35 @@ define([
     "firebug/lib/array",
     "firebug/console/closureInspector",
     "firebug/console/commandLineExposed",
-    "firebug/editor/editor"
+    "firebug/editor/editor",
+    "firebug/editor/inlineEditor",
 ],
 function(Obj, Firebug, Domplate, Locale, Events, Wrapper, Dom, Str, Arr, ClosureInspector,
-    CommandLineExposed, Editor) {
+    CommandLineExposed, Editor, InlineEditor) {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
 
-const kwActions = ["throw", "return", "in", "instanceof", "delete", "new",
+var kwActions = ["throw", "return", "in", "instanceof", "delete", "new",
                    "typeof", "void", "yield"];
-const kwAll = ["break", "case", "catch", "const", "continue", "debugger",
+var kwAll = ["break", "case", "catch", "const", "continue", "debugger",
   "default", "delete", "do", "else", "false", "finally", "for", "function",
   "get", "if", "in", "instanceof", "let", "new", "null", "return", "set",
   "switch", "this", "throw", "true", "try", "typeof", "var", "void", "while",
   "with", "yield"];
-const reOpenBracket = /[\[\(\{]/;
-const reCloseBracket = /[\]\)\}]/;
-const reJSChar = /[a-zA-Z0-9$_]/;
-const reLiteralExpr = /^[ "0-9,]*$/;
+var reOpenBracket = /[\[\(\{]/;
+var reCloseBracket = /[\]\)\}]/;
+var reJSChar = /[a-zA-Z0-9$_]/;
+var reLiteralExpr = /^[ "0-9,]*$/;
 
 var measureCache = {};
 
 // ********************************************************************************************* //
 // JavaScript auto-completion
 
-Firebug.JSAutoCompleter = function(textBox, completionBox, options)
+function JSAutoCompleter(textBox, completionBox, options)
 {
     var popupSize = 40;
 
@@ -143,43 +146,34 @@ Firebug.JSAutoCompleter = function(textBox, completionBox, options)
      * Show completions for the current contents of the text box. Either this or
      * hide() must be called when the contents change.
      */
-    this.complete = function(context)
+    this.complete = function(context, force)
     {
         this.revertValue = null;
-        this.createCandidates(context);
-        this.showCompletions(false);
+        var offset = this.textBox.selectionStart;
+        if (this.createCandidates(context, this.textBox.value, offset, force))
+            this.showCompletions(false);
+        else
+            this.hide();
     };
 
     /**
      * Update the completion base and create completion candidates for the
      * current value of the text box.
      */
-    this.createCandidates = function(context)
+    this.createCandidates = function(context, value, offset, force)
     {
-        var offset = this.textBox.selectionStart;
-        if (offset !== this.textBox.value.length)
-        {
-            this.hide();
-            return;
-        }
-
-        var value = this.textBox.value;
+        if (offset !== value.length)
+            return false;
 
         // Create a simplified expression by redacting contents/normalizing
         // delimiters of strings and regexes, to make parsing easier.
         // Give up if the syntax is too weird.
         var svalue = simplifyExpr(value);
         if (svalue === null)
-        {
-            this.hide();
-            return;
-        }
+            return false;
 
-        if (killCompletions(svalue, value))
-        {
-            this.hide();
-            return;
-        }
+        if (killCompletions(svalue, value, force))
+            return false;
 
         // Find the expression to be completed.
         var parseStart = getExpressionOffset(svalue);
@@ -206,17 +200,28 @@ Firebug.JSAutoCompleter = function(textBox, completionBox, options)
         // We only need to calculate a new candidate list if the expression has changed.
         if (preExpr !== this.completionBase.expr || preParsed !== this.completionBase.pre)
         {
+            var evalOptions = {
+                includeCommandLineAPI: options.includeCommandLineAPI,
+                includeCurrentScope: options.includeCurrentScope
+            };
+            if (!preExpr)
+            {
+                // Add names of variables declared previously in the typed code.
+                evalOptions.additionalCompletions = getNewlyDeclaredNames(spreParsed);
+            }
+
             this.completionBase.expr = preExpr;
             this.completionBase.pre = preParsed;
             var ev = autoCompleteEval(context, preExpr, spreExpr,
-                preParsed, spreParsed, this.options);
+                preParsed, spreParsed, evalOptions);
             prevCompletions = null;
             this.completionBase.candidates = ev.completions;
             this.completionBase.hiddenCandidates = ev.hiddenCompletions;
             this.completionBase.forceShowPopup = false;
         }
 
-        this.createCompletions(prop, prevCompletions);
+        this.createCompletions(prop, prevCompletions, force);
+        return true;
     };
 
     /**
@@ -226,28 +231,27 @@ Firebug.JSAutoCompleter = function(textBox, completionBox, options)
      * for the previous expression (null if none) are used to help with the
      * latter.
      */
-    this.createCompletions = function(prefix, prevCompletions)
+    this.createCompletions = function(prefix, prevCompletions, force)
     {
-        if (!this.completionBase.expr && !prefix)
+        if (!this.completionBase.expr && !prefix && !force)
         {
             // Don't complete "".
             this.completions = null;
             return;
         }
-        if (!this.completionBase.candidates.length && !prefix)
+        if (!this.completionBase.candidates.length && !prefix && !force)
         {
             // Don't complete empty objects -> toString.
             this.completions = null;
             return;
         }
 
-        var mustMatchFirstLetter = (this.completionBase.expr === "");
-        var clist = [
-            this.completionBase.candidates,
-            this.completionBase.hiddenCandidates
-        ], cind = 0;
         var valid = [], ciValid = [];
+        var clist = [this.completionBase.candidates, this.completionBase.hiddenCandidates];
+        var cind = 0;
+
         var lowPrefix = prefix.toLowerCase();
+        var mustMatchFirstLetter = (!this.completionBase.expr && prefix.length > 0);
         while (ciValid.length === 0 && cind < 2)
         {
             var candidates = clist[cind];
@@ -293,7 +297,8 @@ Firebug.JSAutoCompleter = function(textBox, completionBox, options)
             this.completions = {
                 list: (hasMatchingCase ? valid : ciValid),
                 prefix: prefix,
-                hidePopup: (cind === 2)
+                hidePopup: (cind === 2),
+                forced: force
             };
             this.completions.index = this.pickDefaultCandidate(prevCompletions);
 
@@ -331,6 +336,9 @@ Firebug.JSAutoCompleter = function(textBox, completionBox, options)
                 return ind;
         }
 
+        if (!this.completionBase.expr && !this.completions.prefix)
+            return list.length - 1;
+
         // Special-case certain expressions. (But remember to pick prefix-free
         // candidates; otherwise "validVariable<return>" can auto-complete
         // instead of run.)
@@ -517,11 +525,23 @@ Firebug.JSAutoCompleter = function(textBox, completionBox, options)
             Events.cancelEvent(event);
             return true;
         }
+        else if (event.keyCode === KeyEvent.DOM_VK_BACK_SPACE)
+        {
+            if (this.completions && !this.textBox.value)
+            {
+                this.hide();
+                Events.cancelEvent(event);
+                return true;
+            }
+        }
         else if (event.keyCode === KeyEvent.DOM_VK_ESCAPE)
         {
             if (this.completions)
             {
-                this.hideForExpression();
+                if (this.completions.forced)
+                    this.hide();
+                else
+                    this.hideForExpression();
                 Events.cancelEvent(event);
                 return true;
             }
@@ -578,9 +598,9 @@ Firebug.JSAutoCompleter = function(textBox, completionBox, options)
         {
             // Close the completion popup on escape in keydown, so that the popup
             // does not close itself and prevent event propagation on keypress.
-            // (Unless the popup is only open due to Ctrl+Space, in which case
-            // that's precisely what we want.)
-            if (!this.forceShowPopup)
+            // (Unless the popup is only open due to Ctrl+Space on a non-empty
+            // command line, in which case that's precisely what we want.)
+            if (!this.forceShowPopup || this.completions.forced)
                 this.closePopup();
         }
         else if (event.keyCode === KeyEvent.DOM_VK_SPACE && Events.isControl(event))
@@ -879,7 +899,7 @@ Firebug.JSAutoCompleter = function(textBox, completionBox, options)
         catch (err)
         {
             if (FBTrace.DBG_ERRORS)
-                FBTrace.sysout("Firebug.JSAutoCompleter.closePopup; EXCEPTION " + err, err);
+                FBTrace.sysout("JSAutoCompleter.closePopup; EXCEPTION " + err, err);
         }
     };
 
@@ -958,7 +978,7 @@ Firebug.JSAutoCompleter = function(textBox, completionBox, options)
  * (This is unrelated to the auto-completer, but autoCompleter.js has so many nice
  * helper functions.)
  */
-Firebug.JSAutoCompleter.transformScopeOperator = function(expr, fname)
+JSAutoCompleter.transformScopeOperator = function(expr, fname)
 {
     var sexpr = simplifyExpr(expr);
     if (!sexpr)
@@ -981,7 +1001,7 @@ Firebug.JSAutoCompleter.transformScopeOperator = function(expr, fname)
         {
             // Substitute "expr.%prop" with "scopeGetter(expr).prop", or, if used
             // in a "new" expression, "(scopeGetter(expr)).prop" (so that the scope
-            // getter isn't used as a constructor). We don't want to use the first
+            // getter isn't used as a constructor). We don't want to use the second
             // thing unconditionally though, because it messes with ASI.
             var newPos = (start === 0 ? -1 : sexpr.lastIndexOf("new", start-1));
             var hasNew = (newPos !== -1 && !/[a-zA-Z0-9_$.]/.test(sexpr.charAt(newPos-1)) &&
@@ -1010,8 +1030,7 @@ Firebug.JSEditor = function()
 {
 };
 
-with (Domplate) {
-Firebug.JSEditor.prototype = domplate(Firebug.InlineEditor.prototype,
+Firebug.JSEditor.prototype = domplate(InlineEditor.prototype,
 {
     setupCompleter: function(completionBox, options)
     {
@@ -1026,7 +1045,7 @@ Firebug.JSEditor.prototype = domplate(Firebug.InlineEditor.prototype,
     updateLayout: function()
     {
         // Make sure the completion box stays in sync with the input box.
-        Firebug.InlineEditor.prototype.updateLayout.apply(this, arguments);
+        InlineEditor.prototype.updateLayout.apply(this, arguments);
         this.completionBox.style.width = this.input.style.width;
         this.completionBox.style.height = this.input.style.height;
     },
@@ -1034,7 +1053,7 @@ Firebug.JSEditor.prototype = domplate(Firebug.InlineEditor.prototype,
     destroy: function()
     {
         this.autoCompleter.destroy();
-        Firebug.InlineEditor.prototype.destroy.call(this);
+        InlineEditor.prototype.destroy.call(this);
     },
 
     onKeyPress: function(event)
@@ -1047,7 +1066,7 @@ Firebug.JSEditor.prototype = domplate(Firebug.InlineEditor.prototype,
         if (event.keyCode === KeyEvent.DOM_VK_TAB ||
             event.keyCode === KeyEvent.DOM_VK_RETURN)
         {
-            Firebug.Editor.stopEditing();
+            Editor.stopEditing();
             Events.cancelEvent(event);
         }
     },
@@ -1056,19 +1075,21 @@ Firebug.JSEditor.prototype = domplate(Firebug.InlineEditor.prototype,
     {
         var context = this.panel.context;
         this.getAutoCompleter().complete(context);
-        Firebug.Editor.update();
+        Editor.update();
     }
 });
-}
 
 function EditorJSAutoCompleter(box, completionBox, options)
 {
-    var ac = new Firebug.JSAutoCompleter(box, completionBox, options);
+    var ac = new JSAutoCompleter(box, completionBox, options);
 
     this.destroy = Obj.bindFixed(ac.shutdown, ac);
     this.reset = Obj.bindFixed(ac.reset, ac);
-    this.complete = Obj.bind(ac.complete, ac);
     this.handleKeyPress = Obj.bind(ac.handleKeyPress, ac);
+    this.complete = function(context)
+    {
+        ac.complete(context);
+    };
 }
 
 // ********************************************************************************************* //
@@ -1211,7 +1232,8 @@ function endingDivIsRegex(expr)
 {
     var kwCont = ["function", "if", "while", "for", "switch", "catch", "with"];
 
-    var ind = prevNonWs(expr, expr.length), ch = (ind === -1 ? "{" : expr.charAt(ind));
+    var ind = prevNonWs(expr, expr.length);
+    var ch = (ind === -1 ? "{" : expr.charAt(ind));
     if (reJSChar.test(ch))
     {
         // Test if the previous word is a keyword usable like 'kw <expr>'.
@@ -1330,16 +1352,37 @@ function simplifyExpr(expr)
             }
             else if (ch === "/")
             {
-                var re = endingDivIsRegex(ret);
-                if (re === null)
-                    return null;
-                if (re)
+                if (i + 1 < expr.length && /[\/\*]/.test(expr.charAt(i + 1)))
                 {
-                    inreg = true;
-                    ret += '"';
+                    var singleLineComment = (expr.charAt(i + 1) === "/");
+                    ret += "  ";
+                    i += 2;
+                    var re = singleLineComment ? /^\n/ : /\*\//;
+                    while (i < len && !re.test(expr.substr(i, 2)))
+                    {
+                        ret += " ";
+                        i++;
+                    }
+                    if (!singleLineComment && i < len)
+                    {
+                        ret += "  ";
+                        i += 2;
+                    }
+                    i--;
                 }
                 else
-                    ret += "/";
+                {
+                    var re = endingDivIsRegex(ret);
+                    if (re === null)
+                        return null;
+                    if (re)
+                    {
+                        inreg = true;
+                        ret += '"';
+                    }
+                    else
+                        ret += "/";
+                }
             }
             else
             {
@@ -1367,11 +1410,10 @@ function simplifyExpr(expr)
 }
 
 // Check if auto-completion should be killed.
-function killCompletions(expr, origExpr)
+function killCompletions(expr, origExpr, force)
 {
-    // Make sure there is actually something to complete at the end.
     if (expr.length === 0)
-        return true;
+        return !force;
 
     if (reJSChar.test(expr[expr.length-1]) ||
             expr.slice(-1) === "." ||
@@ -1388,7 +1430,7 @@ function killCompletions(expr, origExpr)
             // Array completions - we're fine.
         }
         else {
-            return true;
+            return !force;
         }
     }
 
@@ -1770,16 +1812,16 @@ function propertiesToHide(expr, obj)
     ret.push("__defineGetter__", "__defineSetter__",
         "__lookupGetter__", "__lookupSetter__");
 
-    // function.caller/arguments are deprecated and ugly.
+    // function.caller/arguments are deprecated and ugly, and don't hold values when
+    // evaluated from the command line.
     if (typeof obj === "function")
         ret.push("caller", "arguments");
 
     if (Object.prototype.toString.call(obj) === "[object String]")
     {
         // Unused, cluttery.
-        ret.push("toLocaleLowerCase", "toLocaleUpperCase", "quote", "bold",
-            "italics", "fixed", "fontsize", "fontcolor", "link", "anchor",
-            "strike", "small", "big", "blink", "sup", "sub");
+        ret.push("quote", "bold", "italics", "fixed", "fontsize", "fontcolor",
+            "link", "anchor", "strike", "small", "big", "blink", "sup", "sub");
     }
 
     if (expr === "" || expr === "window.")
@@ -1799,7 +1841,7 @@ function propertiesToHide(expr, obj)
         );
 
         // Hide ourselves.
-        ret.push("_firebug", "_firebugUnwrappedDebuggerObject", "__fb_scopedVars");
+        ret.push("_firebug", "__fb_scopedVars");
     }
 
     // Old and ugly.
@@ -1809,7 +1851,7 @@ function propertiesToHide(expr, obj)
         ret.push("link", "aLink", "vLink");
 
     // Rather universal and feel like built-ins.
-    ret.push("valueOf", "toSource", "constructor", "QueryInterface");
+    ret.push("constructor", "QueryInterface");
 
     return ret;
 }
@@ -1956,7 +1998,8 @@ function propChainBuildComplete(out, context, tempExpr, result)
             {
                 done(result);
             },
-            function failed(result, context) { }
+            function failed(result, context) {},
+            {noStateChange: true}
         );
     }
     else
@@ -2153,7 +2196,8 @@ function evalPropChainStep(step, tempExpr, evalChain, out, context)
                     propChainBuildComplete(out, context, tempExpr, result);
                 }
             },
-            function failed(result, context) { }
+            function failed(result, context) {},
+            {noStateChange: true}
         );
     }
 }
@@ -2343,20 +2387,20 @@ function autoCompleteEval(context, preExpr, spreExpr, preParsed, spreParsed, opt
             {
                 setCompletionsFromObject(out, context.global, context);
             }
-
-            // Add names of variables declared previously in the typed code.
-            var previousDeclarations = getNewlyDeclaredNames(spreParsed);
-            out.completions.push.apply(out.completions, previousDeclarations);
         }
 
+        if (options.additionalCompletions)
+            out.completions.push.apply(out.completions, options.additionalCompletions);
+
         if (indexCompletion)
         {
             // If we are doing index-completions, add "] to everything.
-            function convertQuotes(x)
+            var convertQuotes = function(x)
             {
                 x = (out.indexQuoteType === '"') ? Str.escapeJS(x): Str.escapeSingleQuoteJS(x);
                 return x + out.indexQuoteType + "]";
             }
+
             out.completions = out.completions.map(convertQuotes);
             out.hiddenCompletions = out.hiddenCompletions.map(convertQuotes);
         }
@@ -2432,7 +2476,9 @@ function setCursorToEOL(input)
 // ********************************************************************************************* //
 // Registration
 
-return Firebug.JSAutoCompleter;
+Firebug.JSAutoCompleter = JSAutoCompleter;
+
+return JSAutoCompleter;
 
 // ********************************************************************************************* //
 });
diff --git a/content/firebug/console/closureInspector.js b/content/firebug/console/closureInspector.js
index 6e32384..3ecc2c2 100644
--- a/content/firebug/console/closureInspector.js
+++ b/content/firebug/console/closureInspector.js
@@ -406,24 +406,7 @@ var ClosureInspector =
             Trace.sysout("ClosureInspector; failed to inject " + fname, exc);
         }
 
-        var gotDebugger = false;
-        try
-        {
-            return DebuggerLib.withTemporaryDebugger(context, win, function()
-            {
-                gotDebugger = true;
-                return callback(newExpr);
-            });
-        }
-        catch (exc)
-        {
-            if (gotDebugger)
-                throw exc;
-
-            // Wasn't able to activate debugger. :(
-            // Rerun the command without debugger, and let it fail in a friendlier way.
-            return callback(newExpr);
-        }
+        return DebuggerLib.withTemporaryDebugger(context, win, () => callback(newExpr));
     }
 };
 
diff --git a/content/firebug/console/commandEditor.js b/content/firebug/console/commandEditor.js
index fa1b925..0e6b74c 100644
--- a/content/firebug/console/commandEditor.js
+++ b/content/firebug/console/commandEditor.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/events",
@@ -9,8 +10,9 @@ define([
     "firebug/lib/locale",
     "firebug/lib/css",
     "firebug/lib/options",
+    "firebug/lib/system",
 ],
-function(Obj, Firebug, Events, Menu, Dom, Locale, Css, Options) {
+function(Module, Obj, Firebug, Events, Menu, Dom, Locale, Css, Options, System) {
 
 "use strict";
 
@@ -23,36 +25,22 @@ var MODE_JAVASCRIPT = "js";
 var CONTEXT_MENU = "";
 var TEXT_CHANGED = "";
 
-try
-{
-    // Introduced in Firefox 8
-    Cu["import"]("resource:///modules/source-editor.jsm");
-}
-catch (err)
-{
-    try
-    {
-        // URL changed in Firefox 27
-        Cu["import"]("resource:///modules/devtools/sourceeditor/source-editor.jsm");
-    }
-    catch (err)
-    {
-        if (FBTrace.DBG_ERRORS)
-            FBTrace.sysout("commandEditor: EXCEPTION source-editors is not available!");
-    }
-}
+// URL of source-editor.jsm changed in Firefox 27 (introduced in Firefox 8).
+var sourceEditorScope = System.importModule([
+    "resource:///modules/devtools/sourceeditor/source-editor.jsm",
+    "resource:///modules/source-editor.jsm"]);
 
-if (typeof(SourceEditor) != "undefined")
+if (typeof(sourceEditorScope.SourceEditor) != "undefined")
 {
-    MODE_JAVASCRIPT = SourceEditor.MODES.JAVASCRIPT;
-    CONTEXT_MENU = SourceEditor.EVENTS.CONTEXT_MENU;
-    TEXT_CHANGED = SourceEditor.EVENTS.TEXT_CHANGED;
+    MODE_JAVASCRIPT = sourceEditorScope.SourceEditor.MODES.JAVASCRIPT;
+    CONTEXT_MENU = sourceEditorScope.SourceEditor.EVENTS.CONTEXT_MENU;
+    TEXT_CHANGED = sourceEditorScope.SourceEditor.EVENTS.TEXT_CHANGED;
 }
 
 // ********************************************************************************************* //
 // Command Editor
 
-Firebug.CommandEditor = Obj.extend(Firebug.Module,
+Firebug.CommandEditor = Obj.extend(Module,
 {
     dispatchName: "commandEditor",
 
@@ -60,7 +48,7 @@ Firebug.CommandEditor = Obj.extend(Firebug.Module,
 
     initialize: function()
     {
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
 
         if (this.editor)
             return;
@@ -69,8 +57,8 @@ Firebug.CommandEditor = Obj.extend(Firebug.Module,
         // support zooming. So, the TextEditor (based on textarea) can be used
         // by setting extensions.firebug.enableOrion pref to false.
         // See issue 5678
-        if (typeof(SourceEditor) != "undefined" && Options.get("enableOrion"))
-            this.editor = new SourceEditor();
+        if (typeof(sourceEditorScope.SourceEditor) != "undefined" && Options.get("enableOrion"))
+            this.editor = new sourceEditorScope.SourceEditor();
         else
             this.editor = new TextEditor();
 
@@ -278,7 +266,7 @@ Firebug.CommandEditor = Obj.extend(Firebug.Module,
         if (!this.editor || !this.editor._view)
             return;
 
-        if (typeof(SourceEditor) != "undefined")
+        if (typeof(sourceEditorScope.SourceEditor) != "undefined")
         {
             // See issue 5488
             // var doc = this.editor._view._frame.contentDocument;
diff --git a/content/firebug/console/commandLine.js b/content/firebug/console/commandLine.js
index 551349c..24e8992 100644
--- a/content/firebug/console/commandLine.js
+++ b/content/firebug/console/commandLine.js
@@ -3,6 +3,7 @@
 /*global FBTrace:true, Components:true, define:true, KeyEvent:true */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/chrome/reps",
@@ -24,7 +25,7 @@ define([
     "firebug/console/commands/commandLineHelp",
     "firebug/console/commands/commandLineInclude",
 ],
-function(Obj, Firebug, FirebugReps, Locale, Events, Url, Dom, Firefox, Win, System, Str,
+function(Module, Obj, Firebug, FirebugReps, Locale, Events, Url, Dom, Firefox, Win, System, Str,
     Persist, Console, CommandLineExposed, ClosureInspector, CommandLineAPI) {
 
 "use strict";
@@ -39,7 +40,7 @@ const commandPrefix = ">>> ";
 // ********************************************************************************************* //
 // Command Line
 
-Firebug.CommandLine = Obj.extend(Firebug.Module,
+Firebug.CommandLine = Obj.extend(Module,
 {
     dispatchName: "commandLine",
 
@@ -289,13 +290,6 @@ Firebug.CommandLine = Obj.extend(Firebug.Module,
         if (expr === "")
             return;
 
-        var mozJSEnabled = Firebug.Options.getPref("javascript", "enabled");
-        if (!mozJSEnabled)
-        {
-            Firebug.Console.log(Locale.$STR("console.JSDisabledInFirefoxPrefs"), context, "info");
-            return;
-        }
-
         if (!Firebug.commandEditor || context.panelName !== "console")
         {
             this.clear(context);
@@ -519,7 +513,7 @@ Firebug.CommandLine = Obj.extend(Firebug.Module,
 
     initialize: function()
     {
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
 
         this.setAutoCompleter();
         this.commandHistory = new Firebug.CommandHistory();
@@ -592,8 +586,11 @@ Firebug.CommandLine = Obj.extend(Firebug.Module,
         var panelState = Persist.getPersistedState(this, "console");
         panelState.commandLineText = context.commandLineText;
 
+        // Clean up the Command Line (the input field it's shared among all contexts)
+        // only if this context is the currently displayed one. See also issue 7060.
         var commandLine = this.getCommandLine(context);
-        commandLine.value = "";
+        if (context === Firebug.currentContext)
+            commandLine.value = "";
 
         this.autoCompleter.hide();
         Persist.persistObjects(this, panelState);
diff --git a/content/firebug/console/commandLineAPI.js b/content/firebug/console/commandLineAPI.js
index 71d5fd6..a21f0b9 100644
--- a/content/firebug/console/commandLineAPI.js
+++ b/content/firebug/console/commandLineAPI.js
@@ -236,19 +236,6 @@ CommandLineAPI.getCommandLineAPI = function(context)
         return Firebug.Console.getDefaultReturnValue();
     };
 
-    // xxxHonza: removed from 1.10 (issue 5599)
-    /*commands.memoryProfile = function(title)
-    {
-        Firebug.MemoryProfiler.start(context, title);
-        return Firebug.Console.getDefaultReturnValue();
-    };
-
-    commands.memoryProfileEnd = function()
-    {
-        Firebug.MemoryProfiler.stop(context);
-        return Firebug.Console.getDefaultReturnValue();
-    };*/
-
     return commands;
 };
 
diff --git a/content/firebug/console/commandLineExposed.js b/content/firebug/console/commandLineExposed.js
index b686c8f..b7280e1 100644
--- a/content/firebug/console/commandLineExposed.js
+++ b/content/firebug/console/commandLineExposed.js
@@ -10,6 +10,7 @@ define([
     "firebug/lib/locale",
 ],
 function(Wrapper, DebuggerLib, Obj, CommandLineAPI, Locale) {
+
 "use strict";
 
 // ********************************************************************************************* //
@@ -23,7 +24,7 @@ const Cu = Components.utils;
 // List of command line APIs
 var commandNames = ["$", "$$", "$n", "$x", "cd", "clear", "inspect", "keys",
     "values", "debug", "undebug", "monitor", "unmonitor", "traceCalls", "untraceCalls",
-    "traceAll", "untraceAll", "copy" /*, "memoryProfile", "memoryProfileEnd"*/];
+    "traceAll", "untraceAll", "copy"];
 
 // List of shortcuts for some console methods
 var consoleShortcuts = ["dir", "dirxml", "table"];
@@ -123,7 +124,7 @@ function createFirebugCommandLine(context, win)
         return object;
     }
 
-    function createUserCommandHandler(config, name)
+    function createUserCommandHandler(config)
     {
         return function()
         {
@@ -276,11 +277,6 @@ function evaluate(context, win, expr, origExpr, onSuccess, onError, options)
     }
 
 
-    var unwrap = function(obj)
-    {
-        return DebuggerLib.unwrapDebuggeeValue(obj, contentView, dglobal);
-    };
-
     // In case of abnormal termination, as if by the "slow script" dialog box,
     // do not print anything in the console.
     if (!resObj)
@@ -293,7 +289,7 @@ function evaluate(context, win, expr, origExpr, onSuccess, onError, options)
 
     if (resObj.hasOwnProperty("return"))
     {
-        result = unwrap(resObj.return);
+        result = DebuggerLib.unwrapDebuggeeValue(resObj.return);
         if (resObj.return && resObj.return.handle)
         {
             resObj.return.handle();
@@ -303,100 +299,12 @@ function evaluate(context, win, expr, origExpr, onSuccess, onError, options)
     }
     else if (resObj.hasOwnProperty("yield"))
     {
-        result = unwrap(resObj.yield);
+        result = DebuggerLib.unwrapDebuggeeValue(resObj.yield);
     }
     else if (resObj.hasOwnProperty("throw"))
     {
-        // Change source and line number of exceptions from commandline code
-        // create new error since properties of nsIXPCException are not modifiable.
-        // Example of code raising nsIXPCException: `alert({toString: function(){ throw "blah"; }})`
-
-        // xxxFlorent: FIXME: we can't get the right stack trace with this example:
-        //     function a(){
-        //          throw new Error("error");
-        //     }
-        //     <ENTER>
-        //     a();
-        //     <ENTER>
-        var exc = unwrap(resObj.throw);
-
-        if (exc === null || exc === undefined)
-            return;
-
-        if (typeof exc !== "object")
-        {
-            exc = new Error(exc, null, null);
-            exc.fileName = exc.lineNumber = exc.stack = null;
-        }
-
-        var shouldModify = false, isXPCException = false;
-        var fileName = exc.filename || exc.fileName || "";
-        var isInternalError = fileName.lastIndexOf("chrome://", 0) === 0;
-        var lineNumber = null;
-        var stack = null;
-        var splitStack;
-        var isFileNameMasked = DebuggerLib.isFrameLocationEval(fileName);
-        if (isInternalError || isFileNameMasked)
-        {
-            shouldModify = true;
-            isXPCException = (exc.filename !== undefined);
-
-            // Lie and show the pre-transformed expression instead.
-            fileName = "data:,/* " + Locale.$STR("commandline.errorSourceHeader") + " */"+
-                encodeURIComponent("\n"+origExpr);
-
-            if (isInternalError && typeof exc.stack === "string")
-            {
-                splitStack = exc.stack.split("\n");
-                var correctionSucceeded = correctStackTrace(splitStack);
-                if (correctionSucceeded)
-                {
-                    // correct the line number so we take into account the comment prepended above
-                    lineNumber = findLineNumberInExceptionStack(splitStack) + 1;
-
-                    // correct the first trace
-                    splitStack.splice(0, 1, "@" + fileName + ":" + lineNumber);
-                    stack = splitStack.join("\n");
-                }
-                else
-                    shouldModify = false;
-            }
-            else
-            {
-                // correct the line number so we take into account the comment prepended above
-                lineNumber = exc.lineNumber + 1;
-            }
-        }
-
-        result = new Error();
-
-        if (shouldModify)
-        {
-            result.stack = stack;
-            result.source = origExpr;
-            result.message = exc.message;
-            result.lineNumber = lineNumber;
-            result.fileName = fileName;
-
-            // The error message can also contain post-transform details about the
-            // source, but it's harder to lie about. Make it prettier, at least.
-            if (typeof result.message === "string")
-                result.message = result.message.replace(/__fb_scopedVars\(/g, "<get closure>(");
-
-            if (!isXPCException)
-                result.name = exc.name;
-        }
-        else
-        {
-            Obj.getPropertyNames(exc).forEach(function(prop)
-            {
-                result[prop] = exc[prop];
-            });
-            result.stack = exc.stack;
-            result.source = exc.source;
-        }
-
-        executeInWindowContext(window, onError, [result, context]);
+        var exc = DebuggerLib.unwrapDebuggeeValue(resObj.throw);
+        handleException(exc, origExpr, context, onError);
         return;
     }
 
@@ -464,6 +372,99 @@ function removeConflictingNames(commandLine, context, contentView)
     }
 }
 
+function handleException(exc, origExpr, context, onError)
+{
+    // Change source and line number of exceptions from commandline code
+    // create new error since properties of nsIXPCException are not modifiable.
+    // Example of code raising nsIXPCException: `alert({toString: function(){ throw "blah"; }})`
+
+    // xxxFlorent: FIXME: we can't get the right stack trace with this example:
+    //     function a(){
+    //          throw new Error("error");
+    //     }
+    //     <ENTER>
+    //     a();
+    //     <ENTER>
+
+    if (exc === null || exc === undefined)
+        return;
+
+    if (typeof exc !== "object")
+    {
+        exc = new Error(exc, null, null);
+        exc.fileName = exc.lineNumber = exc.stack = null;
+    }
+
+    var shouldModify = false, isXPCException = false;
+    var fileName = exc.filename || exc.fileName || "";
+    var isInternalError = fileName.lastIndexOf("chrome://", 0) === 0;
+    var lineNumber = null;
+    var stack = null;
+    var splitStack;
+    var isFileNameMasked = DebuggerLib.isFrameLocationEval(fileName);
+    if (isInternalError || isFileNameMasked)
+    {
+        shouldModify = true;
+        isXPCException = (exc.filename !== undefined);
+
+        // Lie and show the pre-transformed expression instead.
+        fileName = "data:,/* " + Locale.$STR("commandline.errorSourceHeader") + " */"+
+            encodeURIComponent("\n"+origExpr);
+
+        if (isInternalError && typeof exc.stack === "string")
+        {
+            splitStack = exc.stack.split("\n");
+            var correctionSucceeded = correctStackTrace(splitStack);
+            if (correctionSucceeded)
+            {
+                // correct the line number so we take into account the comment prepended above
+                lineNumber = findLineNumberInExceptionStack(splitStack) + 1;
+
+                // correct the first trace
+                splitStack.splice(0, 1, "@" + fileName + ":" + lineNumber);
+                stack = splitStack.join("\n");
+            }
+            else
+                shouldModify = false;
+        }
+        else
+        {
+            // correct the line number so we take into account the comment prepended above
+            lineNumber = exc.lineNumber + 1;
+        }
+    }
+
+    var result = new Error();
+
+    if (shouldModify)
+    {
+        result.stack = stack;
+        result.source = origExpr;
+        result.message = exc.message;
+        result.lineNumber = lineNumber;
+        result.fileName = fileName;
+
+        // The error message can also contain post-transform details about the
+        // source, but it's harder to lie about. Make it prettier, at least.
+        if (typeof result.message === "string")
+            result.message = result.message.replace(/__fb_scopedVars\(/g, "<get closure>(");
+
+        if (!isXPCException)
+            result.name = exc.name;
+    }
+    else
+    {
+        Obj.getPropertyNames(exc).forEach(function(prop)
+        {
+            result[prop] = exc[prop];
+        });
+        result.stack = exc.stack;
+        result.source = exc.source;
+    }
+
+    executeInWindowContext(window, onError, [result, context]);
+}
+
 /**
  * Executes a function in another window execution context.
  *
diff --git a/content/firebug/console/commandLinePopup.js b/content/firebug/console/commandLinePopup.js
index 19e6e47..52d46c1 100644
--- a/content/firebug/console/commandLinePopup.js
+++ b/content/firebug/console/commandLinePopup.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/console/commandLine",
@@ -10,7 +11,7 @@ define([
     "firebug/lib/xml",
     "firebug/lib/events",
 ],
-function(Obj, Firebug, CommandLine, Css, Dom, Str, Xml, Events) {
+function(Module, Obj, Firebug, CommandLine, Css, Dom, Str, Xml, Events) {
 
 // ************************************************************************************************
 // Constants
@@ -21,14 +22,14 @@ function(Obj, Firebug, CommandLine, Css, Dom, Str, Xml, Events) {
 /**
  * @module Command Line availability in other panels.
  */
-Firebug.CommandLine.Popup = Obj.extend(Firebug.Module,
+Firebug.CommandLine.Popup = Obj.extend(Module,
 {
     dispatchName: "commandLinePopup",
     lastFocused : null,
 
     initializeUI: function()
     {
-        Firebug.Module.initializeUI.apply(this, arguments);
+        Module.initializeUI.apply(this, arguments);
 
         this.setPopupBrowserStyle(Firebug.chrome);
 
@@ -45,7 +46,7 @@ Firebug.CommandLine.Popup = Obj.extend(Firebug.Module,
 
     initContext: function(context)
     {
-        Firebug.Module.showContext.apply(this, arguments);
+        Module.showContext.apply(this, arguments);
 
         var show = Firebug.Options.get("alwaysShowCommandLine");
         if (show && !this.isVisible())
diff --git a/content/firebug/console/commands/commandLineHelp.js b/content/firebug/console/commands/commandLineHelp.js
index 2358e99..1e9dd34 100644
--- a/content/firebug/console/commands/commandLineHelp.js
+++ b/content/firebug/console/commands/commandLineHelp.js
@@ -12,7 +12,8 @@ define([
     "firebug/lib/object",
 ],
 function(Firebug, Domplate, Locale, Dom, CommandLineExposed, Win, Xpcom, Events, Obj) {
-with (Domplate) {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
@@ -31,6 +32,8 @@ var CLOSURE_INSPECTOR_HELP_URL = "https://getfirebug.com/wiki/index.php/Closure_
 // ********************************************************************************************* //
 // Command Line Help
 
+var {domplate, SPAN, TABLE, THEAD, TR, TH, DIV, TBODY, TD, A, UL, LI, FOR, TAG} = Domplate;
+
 var HelpCaption = domplate(
 {
     tag:
@@ -166,7 +169,7 @@ var Tip = domplate(
     tag:
         LI({"class": "tip"},
             SPAN({"class": "text"}, "$tip|getText"),
-            SPAN("&nbsp"),
+            SPAN(" "),
             SPAN({"class": "example"},"$tip|getExample")
         ),
 
@@ -318,4 +321,4 @@ Firebug.registerCommand("help", {
 return CommandLineHelp;
 
 // ********************************************************************************************* //
-}});
+});
\ No newline at end of file
diff --git a/content/firebug/console/commands/commandLineInclude.js b/content/firebug/console/commands/commandLineInclude.js
index 0357dcc..c6afb55 100644
--- a/content/firebug/console/commands/commandLineInclude.js
+++ b/content/firebug/console/commands/commandLineInclude.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/chrome/reps",
     "firebug/lib/domplate",
     "firebug/lib/locale",
@@ -13,16 +14,19 @@ define([
     "firebug/lib/system",
     "firebug/lib/xpcom",
     "firebug/lib/object",
+    "firebug/chrome/tableRep",
     "firebug/console/console",
     "firebug/editor/editor",
+    "firebug/editor/inlineEditor",
 ],
-function(FirebugReps, Domplate, Locale, Dom, Win, Css, Str, Options, Menu, System, Xpcom, 
-    Obj, Console) {
-with (Domplate) {
+function(Module, FirebugReps, Domplate, Locale, Dom, Win, Css, Str, Options, Menu, System, Xpcom,
+    Obj, TableRep, Console, Editor, InlineEditor) {
 
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, DomplateTag, SPAN, TR, P, LI, A, BUTTON} = Domplate;
+
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 const removeConfirmation = "commandline.include.removeConfirmation";
@@ -55,15 +59,10 @@ var defaultAliases = {
 // ********************************************************************************************* //
 // Implementation
 
-var CommandLineIncludeRep = domplate(FirebugReps.Table,
+var CommandLineIncludeRep = domplate(TableRep,
 {
     tableClassName: "tableCommandLineInclude dataTable",
 
-    tag:
-        FirebugReps.OBJECTBOX({_repObject: "$object"},
-            FirebugReps.Table.tag
-        ),
-
     inspectable: false,
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -74,25 +73,25 @@ var CommandLineIncludeRep = domplate(FirebugReps.Table,
         if (object.cons === DomplateTag)
             return object;
         else
-            return FirebugReps.Table.getValueTag(object);
+            return TableRep.getValueTag(object);
     },
 
     getUrlTag: function(href, aliasName)
     {
         var urlTag =
-            SPAN({style:"height:100%"},
+            SPAN({style: "height: 100%"},
                 A({"href": href, "target": "_blank", "class": "url"},
                     Str.cropString(href, 100)
-                ),
-                SPAN({"class": "commands"}
-                // xxxFlorent: temporarily disabled, see: 
-                //    http://code.google.com/p/fbug/issues/detail?id=5878#c27
+                )
                 /*,
+                // xxxFlorent: temporarily disabled, see:
+                //    http://code.google.com/p/fbug/issues/detail?id=5878#c27
+                SPAN({"class": "commands"},
                 SPAN({
                     "class":"closeButton",
                     onclick: this.deleteAlias.bind(this, aliasName),
-                })*/
-                )
+                })
+                )*/
             );
 
         return urlTag;
@@ -103,12 +102,12 @@ var CommandLineIncludeRep = domplate(FirebugReps.Table,
         var store = CommandLineInclude.getStore();
         var keys = store.getKeys();
         var arrayToDisplay = [];
-        var returnValue = Firebug.Console.getDefaultReturnValue();
+        var returnValue = Console.getDefaultReturnValue();
 
         if (keys.length === 0)
         {
             var msg = Locale.$STR("commandline.include.noDefinedAlias");
-            Firebug.Console.log(msg, context, null, FirebugReps.Hint);
+            Console.log(msg, context, null, FirebugReps.Hint);
             return returnValue;
         }
 
@@ -116,19 +115,34 @@ var CommandLineIncludeRep = domplate(FirebugReps.Table,
         {
             var aliasName = keys[i];
             arrayToDisplay.push({
-                "alias": SPAN({"class":"aliasName", "data-aliasname": aliasName}, aliasName),
-                "URL": this.getUrlTag(store.getItem(aliasName), aliasName, context)
+                alias: SPAN({"class": "aliasName", "data-aliasname": aliasName}, aliasName),
+                URL: this.getUrlTag(store.getItem(aliasName), aliasName, context)
             });
         }
 
+        var columns = [
+            {
+                property: "alias",
+                label: Locale.$STR("commandline.include.Alias")
+            },
+            {
+                property: "URL",
+                label: Locale.$STR("commandline.include.URL")
+            }
+        ];
+
         var input = new CommandLineIncludeObject();
-        this.log(arrayToDisplay, ["alias", "URL"], context, input);
+        var row = this.log(arrayToDisplay, columns, context, input);
+
+        // Add rep object for the context menu options
+        row.repObject = input;
+
         return returnValue;
     },
 
     deleteAlias: function(aliasName, ev)
     {
-        // NOTE: that piece of code has not been tested since deleting aliases through the table 
+        // NOTE: that piece of code has not been tested since deleting aliases through the table
         // has been disabled.
         // Once it is enabled again, make sure FBTests is available for this feature
         var store = CommandLineInclude.getStore();
@@ -155,7 +169,7 @@ var CommandLineIncludeRep = domplate(FirebugReps.Table,
     startEditing: function(target)
     {
         var editor = this.getEditor(target.ownerDocument);
-        Firebug.Editor.startEditing(target, target.dataset.aliasname, editor);
+        Editor.startEditing(target, target.dataset.aliasname, editor);
     },
 
     editAliasName: function(tr)
@@ -231,10 +245,11 @@ var CommandLineIncludeRep = domplate(FirebugReps.Table,
     getContextMenuItems: function(object, target, context)
     {
         var tr = Dom.getAncestorByTagName(target, "tr");
-        if (!tr)
+        var link = tr && tr.querySelector("a.url");
+        if (!link)
             return [];
 
-        var url = tr.querySelector("a.url").href;
+        var url = link.href;
         var aliasName = tr.querySelector(".aliasName").dataset.aliasname;
         var context = Firebug.currentContext;
         var items = [
@@ -244,7 +259,7 @@ var CommandLineIncludeRep = domplate(FirebugReps.Table,
                 tooltiptext: "clipboard.tip.Copy_Location",
                 command: Obj.bindFixed(System.copyToClipboard, System, url)
             },
-            // xxxFlorent: temporarily disabled, see: 
+            // xxxFlorent: temporarily disabled, see:
             //    http://code.google.com/p/fbug/issues/detail?id=5878#c27
             /*"-",
             {
@@ -311,7 +326,7 @@ function CommandLineIncludeObject()
 
 // ********************************************************************************************* //
 
-var CommandLineInclude = Obj.extend(Firebug.Module,
+var CommandLineInclude = Obj.extend(Module,
 {
     onSuccess: function(newAlias, context, loadingMsgRow, xhr, hasWarnings)
     {
@@ -373,14 +388,13 @@ var CommandLineInclude = Obj.extend(Firebug.Module,
     },
 
     // xxxFlorent: Prefix with underscore until we fix Issue 6806
-    //             since we're listening to Firebug.Console events.
+    // since we're listening to Firebug.Console events.
     _log: function(localeStr, localeArgs, logArgs, noAutoPrefix)
     {
-        var prefixedLocaleStr = (noAutoPrefix ? localeStr : "commandline.include."+localeStr);
-
+        var prefixedLocaleStr = (noAutoPrefix ? localeStr : "commandline.include." + localeStr);
         var msg = Locale.$STRF(prefixedLocaleStr, localeArgs);
         logArgs.unshift([msg]);
-        return Firebug.Console.logFormatted.apply(Firebug.Console, logArgs);
+        return Console.logFormatted.apply(Console, logArgs);
     },
 
     /**
@@ -395,7 +409,7 @@ var CommandLineInclude = Obj.extend(Firebug.Module,
     {
         var reNotAlias = /[\.\/]/;
         var urlIsAlias = url !== null && !reNotAlias.test(url);
-        var returnValue = Firebug.Console.getDefaultReturnValue();
+        var returnValue = Console.getDefaultReturnValue();
 
         // checking arguments:
         if ((newAlias !== undefined && typeof newAlias !== "string") || newAlias === "")
@@ -589,7 +603,7 @@ var CommandLineInclude = Obj.extend(Firebug.Module,
      * Hack; Should only be used inside CommandLineInclude.
      * Intercept the display of a warning if related to the use of isCSPDoc().
      *
-     * Event triggered by Firebug.Console.logRow().
+     * Event triggered by Console.logRow().
      */
     onLogRowCreated: function(panel, row, context)
     {
@@ -621,10 +635,10 @@ function onCommand(context, args)
 
 function IncludeEditor(doc)
 {
-    Firebug.InlineEditor.call(this, doc);
+    InlineEditor.call(this, doc);
 }
 
-IncludeEditor.prototype = domplate(Firebug.InlineEditor.prototype,
+IncludeEditor.prototype = domplate(InlineEditor.prototype,
 {
     endEditing: function(target, value, cancel)
     {
@@ -691,4 +705,4 @@ Console.addListener(CommandLineInclude);
 return CommandLineInclude;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/console/commands/eventMonitor.js b/content/firebug/console/commands/eventMonitor.js
index 6b30ef6..124784a 100644
--- a/content/firebug/console/commands/eventMonitor.js
+++ b/content/firebug/console/commands/eventMonitor.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/trace",
@@ -11,12 +12,14 @@ define([
     "firebug/chrome/reps",
     "firebug/chrome/menu",
 ],
-function(Obj, Firebug, FBTrace, Events, Locale, Dom, Domplate, FirebugReps, Menu) {
+function(Module, Obj, Firebug, FBTrace, Events, Locale, Dom, Domplate, FirebugReps, Menu) {
+
+"use strict";
 
 // ********************************************************************************************* //
 // EventMonitor Module
 
-var EventMonitor = Obj.extend(Firebug.Module,
+var EventMonitor = Obj.extend(Module,
 {
     dispatchName: "eventMonitor",
 
@@ -25,14 +28,14 @@ var EventMonitor = Obj.extend(Firebug.Module,
 
     initialize: function()
     {
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
         Firebug.registerUIListener(this);
     },
 
     shutdown: function()
     {
         Firebug.unregisterUIListener(this);
-        Firebug.Module.shutdown.apply(this, arguments);
+        Module.shutdown.apply(this, arguments);
     },
 
     destroyContext: function(context, persistedState)
@@ -144,12 +147,12 @@ var EventMonitor = Obj.extend(Firebug.Module,
         var eventTypes = getMonitoredEventTypes(types);
         var monitoredObjectEvents = monitoredEvents.get(object);
         if (!monitoredObjectEvents)
-            return;
+            return false;
 
         if (typeof allMonitored == "undefined")
             allMonitored = true;
 
-        for (var i = 0, len = eventTypes.length; i < len; ++i)
+        for (var i=0, len=eventTypes.length; i<len; ++i)
         {
             var monitored = monitoredObjectEvents.has(eventTypes[i]);
 
@@ -203,8 +206,42 @@ var EventMonitor = Obj.extend(Firebug.Module,
 
         var elt = object;
 
-        // Create sub-menu-items for "Log Event"
+        function onToggleAll(event)
+        {
+            Events.cancelEvent(event);
+
+            var checked = event.target.getAttribute("checked") == "true";
+            var menupopup = event.target.parentNode;
+
+            // Iterate over all event families (menu items) and check/uncheck them.
+            var child = menupopup.firstChild;
+            while (child)
+            {
+                if (child.tagName != "separator" && child.id != "fbLogAllEvents")
+                    child.setAttribute("checked", checked ? "true" : "false");
+
+                child = child.nextSibling;
+            }
+
+            this.toggleMonitorEvents(elt, null, checked, context);
+        }
+
         var logEventItems = [];
+
+        // The first item allows to select all event type (families) at once. Just like if
+        // the user clicks directly the parent item (it's split-menu).
+        logEventItems.push({
+            label: "html.logAllEvents",
+            tooltiptext: "html.logAllEvents.tip",
+            id: "fbLogAllEvents",
+            type: "checkbox",
+            checked: this.areEventsMonitored(elt, null, context, true),
+            command: onToggleAll.bind(this),
+        });
+
+        logEventItems.push("-");
+
+        // Create sub-menu-items for "Log Event"
         var eventFamilies = Events.getEventFamilies();
         for (var i=0, count=eventFamilies.length; i<count; ++i)
         {
@@ -219,7 +256,7 @@ var EventMonitor = Obj.extend(Firebug.Module,
             var Element = FirebugReps.Element;
             var selector = Element.getSelectorTag(elt) +
                 Element.getSelectorId(elt) +
-                Element.getSelectorClass(elt);
+                Element.getSelectorClasses(elt);
 
             // xxxHonza: localization?
             tooltipText += "\n\nCommand Line Example:\n" +
@@ -236,6 +273,7 @@ var EventMonitor = Obj.extend(Firebug.Module,
             });
         }
 
+        // Helper for monitoring all event families at once.
         function onCommand(event)
         {
             Events.cancelEvent(event);
@@ -248,9 +286,6 @@ var EventMonitor = Obj.extend(Firebug.Module,
             label: "ShowEventsInConsole",
             tooltiptext: "html.tip.Show_Events_In_Console",
             id: "fbShowEventsInConsole",
-            type: "checkbox",
-            checked: this.areEventsMonitored(elt, null, context, false),
-            command: onCommand.bind(this),
             items: logEventItems
         };
 
@@ -267,10 +302,10 @@ var EventMonitor = Obj.extend(Firebug.Module,
 
         Events.cancelEvent(event);
 
-        // Toggle the main "Log Events" option depending on whether all events are monitored.
+        // The 'Log All Events' helper item.
         var doc = event.target.ownerDocument;
-        var logEvents = doc.getElementById("fbShowEventsInConsole");
-        logEvents.setAttribute("checked", this.areEventsMonitored(elt, null, context, false));
+        var logAllEvents = doc.getElementById("fbLogAllEvents");
+        logAllEvents.setAttribute("checked", this.areEventsMonitored(elt, null, context, true));
     },
 });
 
@@ -322,7 +357,8 @@ var EventLog = function(event)
 // ********************************************************************************************* //
 // Rep Template
 
-with (Domplate) {
+var {domplate, TAG, SPAN} = Domplate;
+
 var EventLogRep = domplate(FirebugReps.Event,
 {
     className: "eventLog",
@@ -335,9 +371,9 @@ var EventLogRep = domplate(FirebugReps.Event,
     copyEventTag:
         SPAN(
             FirebugReps.OBJECTLINK("$object|summarizeEvent"),
-            SPAN("&nbsp"),
+            SPAN(" "),
             SPAN("»"),
-            SPAN("&nbsp"),
+            SPAN(" "),
             TAG("$object|getTargetTag", {object: "$object|getTarget"})
         ),
 
@@ -365,7 +401,7 @@ var EventLogRep = domplate(FirebugReps.Event,
     {
         return object instanceof EventLog;
     },
-})};
+});
 
 // ********************************************************************************************* //
 // CommandLine Support
diff --git a/content/firebug/console/commands/getEventListeners.js b/content/firebug/console/commands/getEventListeners.js
index 7699912..f222f13 100644
--- a/content/firebug/console/commands/getEventListeners.js
+++ b/content/firebug/console/commands/getEventListeners.js
@@ -3,83 +3,482 @@
 
 define([
     "firebug/firebug",
+    "firebug/chrome/module",
     "firebug/lib/trace",
+    "firebug/lib/object",
     "firebug/lib/locale",
     "firebug/lib/wrapper",
-    "firebug/lib/xpcom",
     "firebug/lib/events",
+    "firebug/lib/domplate",
+    "firebug/console/console",
+    "firebug/chrome/tableRep",
 ],
-function(Firebug, FBTrace, Locale, Wrapper, Xpcom, Events) {
+function(Firebug, Module, FBTrace, Obj, Locale, Wrapper, Events, Domplate, Console,
+    TableRep) {
+
 "use strict";
 
-const versionChecker = Xpcom.CCSV("@mozilla.org/xpcom/version-comparator;1", "nsIVersionComparator");
-const appInfo = Xpcom.CCSV("@mozilla.org/xre/app-info;1", "nsIXULAppInfo");
-var pre23 = (versionChecker.compare(appInfo.version, "23.0*") < 0);
+// ********************************************************************************************* //
+// Resources
+
+// Bug 912874 - New API to enumerate mutation observers
+// Bug 448602 - Have a way to enumerate event listeners
+// Issue 6740: Display registered MutationObservers for an element
+
+// ********************************************************************************************* //
+// Constants
+
+var {domplate, SPAN, TAG} = Domplate;
+
+var TraceError = FBTrace.to("DBG_ERRORS");
+
+var mutationObservers = "MutationObservers";
+var parents = "Parents";
+
+// ********************************************************************************************* //
+// Module Implementation
+
+/**
+ * @module The modules registers a console listeners that logs a pretty-printed
+ * information about listeners and mutation observers for a target element.
+ *
+ * The log lists listeners/observers registered for the target element as well as those
+ * registered for parent elements.
+ *
+ * The pretty-print log is made only for getEventListeners() return value. So, if the method
+ * is used within an expression where the return value is e.g. a particular
+ * listener, the pretty-print log is not created.
+ *
+ * Examples:
+ * > getEventListeners(target);             // pretty print log is created.
+ * > getEventListeners(target).click[0];    // pretty print log is not created.
+ */
+var GetEventListenersModule = Obj.extend(Module,
+/** @lends GetEventListenersModule */
+{
+    dispatchName: "getEventListenersModule",
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+    initialize: function()
+    {
+        Module.initialize.apply(this, arguments);
+        Console.addListener(this);
+    },
+
+    shutdown: function()
+    {
+        Module.shutdown.apply(this, arguments);
+        Console.removeListener(this);
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Console Listener
+
+    log: function(context, object, className, sourceLink)
+    {
+        if (!context || !object)
+            return;
+
+        // The log we are waiting for must be Object type.
+        if (typeof(object) != "object")
+            return;
+
+        var cache = context.getEventListenersCache;
+        if (!cache)
+            return false;
+
+        // Objects keys in the cache-map are using wrappers, so don't forget to
+        // wrap it before lookup. The map is initialized within onExecuteCommand
+        // where the Console log object is created (and exposed to the content).
+        object = Wrapper.wrapObject(object);
+
+        // If the currently logged object is stored within the cache-map, we are dealing
+        // with a return value of getEventListeners() command. In such case we can append
+        // additional pretty-printed info into the Console panel.
+        var logInfo = cache.get(object);
+        if (logInfo)
+            consoleLog(context, logInfo.target, logInfo.listeners, logInfo.observers);
+    },
+});
 
 // ********************************************************************************************* //
 // Command Implementation
 
+/**
+ * This function is executed by the framework when getEventListener() is executed
+ * on the command line. The first argument must be reference to the target element.
+ */
 function onExecuteCommand(context, args)
 {
     var target = args[0];
+    var noParents = args[1] || false;
+
     if (typeof target !== "object" || target === null)
         return undefined;
 
-    if (pre23 && !context.getPanel("script", true))
+    try
+    {
+        var result = {};
+
+        // Get event listeners and construct the result log-object.
+        var listeners = getEventListeners(target, !noParents);
+        var map = getListenerMap(listeners.targetListeners);
+        if (map)
+            result = map;
+
+        // parentListeners array is empty in case of noParents == true.
+        map = getListenerMap(listeners.parentListeners);
+        if (map)
+            result[parents] = map;
+
+        // Append also mutation observers into the result (if there are any).
+        var observers = getMutationObservers(target, !noParents);
+        if (observers.targetObservers && observers.targetObservers.length > 0)
+            result[mutationObservers] = observers.targetObservers;
+
+        // parentObservers array is empty in case of noParents == true.
+        if (observers.parentObservers && observers.parentObservers.length > 0)
+        {
+            if (!result[mutationObservers])
+                result[mutationObservers] = [];
+
+            var array = result[mutationObservers];
+            array[parents] = observers.parentObservers;
+        }
+
+        // Make sure the result structure with listeners and observers is properly
+        // cloned into the content scope.
+        var global = context.getCurrentGlobal();
+        var recursiveClone = function(obj)
+        {
+            var res;
+            if (Array.isArray(obj))
+                res = [];
+            else if (obj instanceof Object && Object.getPrototypeOf(obj) === Object.prototype)
+                res = {};
+            else
+                return obj;
+            for (var prop in obj)
+                res[prop] = recursiveClone(obj[prop]);
+            return Wrapper.cloneIntoContentScope(global, res);
+        };
+        var object = recursiveClone(result);
+
+        if (!context.getEventListenersCache)
+            context.getEventListenersCache = new WeakMap();
+
+        // The logged object doesn't have any specific type since returned from
+        // Wrapper.cloneIntoContentScope, which is based on Cu.createObjectIn.
+        // (using specific types will be able as soon as bug 914970 is fixed)
+        // So, store the result logged-object into a weak-map, which will be used
+        // later (within 'log' event handler) to figure out whether additional
+        // pretty-printed logs should be appended in to the Console.
+        // See {@GetEventListenersModule} above.
+        context.getEventListenersCache.set(Wrapper.wrapObject(object), {
+            target: target,
+            listeners: listeners,
+            observers: observers
+        });
+
+        return object;
+    }
+    catch (exc)
     {
-        // XXXsimon: Don't bother translating this, it will go away in one release,
-        // happen very seldom, and English error messages look better anyway.
-        throw new Error("getEventListeners requires the Script panel to be enabled (or the use of Firefox 23 or higher)");
+        TraceError.sysout("getEventListeners FAILS " + exc, exc);
     }
 
-    var listeners;
-    try
+    return undefined;
+}
+
+// ********************************************************************************************* //
+// Event Listeners
+
+/**
+ * Get sorted list of listeners registered for the target and list of listeners
+ * registered for all ancestor elements (if required).
+ *
+ * @param context {TabContext} The current Firebug context.
+ * @param target {Object} The event target for which listeners should be returned.
+ * @param includeParents {Boolean} True if parent listeners should also be returned.
+ */
+function getEventListeners(target, includeParents)
+{
+    var targetListeners;
+    var parentListeners = [];
+
+    // Iterate also all parent nodes and look for listeners that can be
+    // executed during bubble phase.
+    var element = target;
+    while (element)
     {
-        listeners = Events.getEventListenersForTarget(target);
+        try
+        {
+            var listeners = Events.getEventListenersForTarget(element);
+
+            // Listeners coming from parent elements are stored into
+            // parentListeners array.
+            if (!targetListeners)
+            {
+                targetListeners = listeners;
+            }
+            else
+            {
+                parentListeners.push.apply(parentListeners, listeners.filter(function(listener)
+                {
+                    return Events.eventTypeBubblesToDocument(listener.type);
+                }));
+            }
+        }
+        catch (exc)
+        {
+            TraceError.sysout("getEventListenersForTarget threw an EXCEPTION " + exc, exc);
+            return undefined;
+        }
+
+        // Break the loop if we don't need listeners for element ancestors.
+        if (!includeParents)
+            break;
+
+        // Use 'parentElement' so, document isn't included as a parent. The document
+        // object is special case handled below.
+        element = element.parentElement;
     }
-    catch (exc)
+
+    // Special case for document object.
+    var doc = target.ownerDocument;
+    if (doc && includeParents && target != doc)
     {
-        if (FBTrace.DBG_COMMANDLINE)
-            FBTrace.sysout("getEventListenersForTarget threw an exception", exc);
-        return undefined;
+        var listeners = Events.getEventListenersForTarget(doc);
+        parentListeners.push.apply(parentListeners, listeners.filter(function(listener)
+        {
+            return Events.eventTypeBubblesToDocument(listener.type);
+        }));
     }
 
-    // Sort listeners by type in alphabetical order, so they show up as such
-    // in the returned object.
-    listeners.sort(function(a, b)
+    // Special case for window object.
+    var win = doc && doc.defaultView;
+    if (win && includeParents && target != win)
+    {
+        var listeners = Events.getEventListenersForTarget(win);
+        parentListeners.push.apply(parentListeners, listeners.filter(function(listener)
+        {
+            return Events.eventTypeBubblesToDocument(listener.type);
+        }));
+    }
+
+    function sort(a, b)
     {
         if (a.type === b.type)
             return 0;
         return (a.type < b.type ? -1 : 1);
-    });
+    }
 
-    try
+    // Sort listeners by type in alphabetical order, so they show up as such
+    // in the returned object.
+    targetListeners.sort(sort);
+    parentListeners.sort(sort);
+
+    return {
+        targetListeners: targetListeners,
+        parentListeners: parentListeners
+    };
+}
+
+/**
+ * Transform simple array of listeners into a structure that is directly logged
+ * into the Console panel. Note that this result log can be further inspected by the user
+ * within the DOM panel.
+ */
+function getListenerMap(listeners)
+{
+    if (!listeners || !listeners.length)
+        return undefined;
+
+    var map = {};
+
+    for (var i = 0; i < listeners.length; i++)
     {
-        var global = context.getCurrentGlobal();
-        var ret = {};
-        for (let li of listeners)
+        var li = listeners[i];
+        if (!map[li.type])
+            map[li.type] = [];
+
+        map[li.type].push({
+            listener: li.func,
+            useCapture: li.capturing,
+            target: li.target,
+        });
+    }
+
+    return map;
+}
+
+// ********************************************************************************************* //
+// Mutation Observers
+
+/**
+ * Get list of mutation observers registered for given target as well as list of observers
+ * registered for parent elements (if required). Observers registered for parent elements
+ * must have 'subtree' flag set to 'true' to be included in the result list.
+ */
+function getMutationObservers(target, includeParents)
+{
+    var targetObservers;
+    var parentObservers = [];
+
+    // Iterate all parent nodes and look for observers that are watching
+    // also children nodes (subtree == true)
+    var element = target;
+    while (element)
+    {
+        var parent = targetObservers;
+        var result = getMutationObserversForTarget(element, parent);
+
+        if (!parent)
+            targetObservers = result;
+        else
+            parentObservers.push.apply(parentObservers, result);
+
+        // Break the loop if observers registered for target ancestors aren't required.
+        if (!includeParents)
+            break;
+
+        element = element.parentNode;
+    }
+
+    return {
+        targetObservers: targetObservers,
+        parentObservers: parentObservers
+    };
+}
+
+/**
+ * Get list of observers registered for specific target.
+ */
+function getMutationObserversForTarget(target, parent)
+{
+    var result = [];
+
+    // getBoundMutationObservers() API has been introduced in Firefox 23
+    // Also |window| that can be passed as an event target doeesn't implement
+    // the method.
+    if (typeof(target.getBoundMutationObservers) != "function")
+        return result;
+
+    // Get all mutation observers registered for given target.
+    var observers = target.getBoundMutationObservers();
+    for (var i=0; i<observers.length; i++)
+    {
+        var observer = observers[i];
+        var observingInfo = observer.getObservingInfo();
+        for (var j=0; j<observingInfo.length; j++)
         {
-            if (!ret[li.type])
-                ret[li.type] = [];
+            var info = observingInfo[j];
+
+            // Get only observers that are registered for:
+            // a) the original target
+            // b) a parent element with subtree == true.
+            if (parent && !info.subtree)
+                continue;
 
-            ret[li.type].push(Wrapper.cloneIntoContentScope(global, {
-                listener: li.func,
-                useCapture: li.capturing
-            }));
+            // OK, insert the observer into the result array.
+            result.push({
+                attributeOldValue: info.attributeOldValue,
+                attributes: info.attributes,
+                characterData: info.characterData,
+                characterDataOldValue: info.characterDataOldValue,
+                childList: info.childList,
+                subtree: info.subtree,
+                observedNode: info.observedNode,
+                mutationCallback: observer.mutationCallback,
+            });
         }
-        return Wrapper.cloneIntoContentScope(global, ret);
     }
-    catch (exc)
+
+    return result;
+}
+
+// ********************************************************************************************* //
+// Console Logging
+
+/**
+ * Append pretty-printed information about listeners and mutation observers (for a target)
+ * into the Console panel.
+ */
+function consoleLog(context, target, listenersObj, observersObj)
+{
+    var input = {
+        target: target,
+    };
+
+    // Display listeners registered for the target as well as any possible
+    // listeners registered for parent elements.
+    var listeners = [];
+    listeners.push.apply(listeners, listenersObj.targetListeners);
+    listeners.push.apply(listeners, listenersObj.parentListeners);
+
+    if (listeners && listeners.length > 0)
+    {
+        // Group for event listeners list
+        input.title = Locale.$STR("eventListeners.group_title");
+        Console.openCollapsedGroup(input, context, "eventListenersDetails",
+            GroupCaption, true, null, true);
+
+        TableRep.log(listeners, ["type", "capturing", "allowsUntrusted", "func", "target"], context);
+        Console.closeGroup(context, true);
+    }
+
+    // Similarly as for listeners, the observers list is computed for those observers
+    // registered for the target as well as those registered for any ancestor.
+    var observers = [];
+    observers.push.apply(observers, observersObj.targetObservers);
+    observers.push.apply(observers, observersObj.parentObservers);
+
+    if (observers && observers.length > 0)
     {
-        if (FBTrace.DBG_ERRORS)
-            FBTrace.sysout("getEventListeners FAILS to create content view" + exc, exc);
+        // Group for mutation observers list
+        input.title = Locale.$STR("mutationObservers.group_title");
+        Console.openCollapsedGroup(input, context, "eventListenersDetails",
+            GroupCaption, true, null, true);
+
+        TableRep.log(observers, ["attributeOldValue", "attributes", "characterData",
+            "characterDataOldValue", "childList", "subtree", "mutationCallback",
+            "observedNode"], context);
+
+        Console.closeGroup(context, true);
     }
-    return undefined;
 }
 
 // ********************************************************************************************* //
+// Domplate Templates
+
+var GroupCaption = domplate(
+{
+    tag:
+        SPAN({"class": "eventListenersTitle"},
+            SPAN({"class": "eventListenersCaption"},
+                "$object.title"
+            ),
+            SPAN(" "),
+            SPAN("»"),
+            SPAN(" "),
+            SPAN({"class": "eventListenersTarget"},
+                TAG("$object|getTargetTag", {object: "$object.target"})
+            )
+        ),
+
+    getTargetTag: function(object)
+    {
+        var rep = Firebug.getRep(object.target);
+        return rep.shortTag ? rep.shortTag : rep.tag;
+    }
+});
+
+// ********************************************************************************************* //
 // Registration
 
+Firebug.registerModule(GetEventListenersModule);
+
 Firebug.registerCommand("getEventListeners", {
     helpUrl: "https://getfirebug.com/wiki/index.php/getEventListeners",
     handler: onExecuteCommand.bind(this),
diff --git a/content/firebug/console/commands/lastCommandLineResult.js b/content/firebug/console/commands/lastCommandLineResult.js
index f74debd..9180c75 100644
--- a/content/firebug/console/commands/lastCommandLineResult.js
+++ b/content/firebug/console/commands/lastCommandLineResult.js
@@ -2,18 +2,19 @@
 
 define([
     "firebug/firebug",
+    "firebug/chrome/module",
     "firebug/lib/trace",
     "firebug/console/console",
     "firebug/console/commandLine",
     "firebug/lib/locale",
     "firebug/lib/object",
 ],
-function(Firebug, FBTrace, Console, CommandLine, Locale, Obj) {
+function(Firebug, Module, FBTrace, Console, CommandLine, Locale, Obj) {
 
 // ********************************************************************************************* //
 // CommandLine Listener
 
-var LastCommandLineResult = Obj.extend(Firebug.Module,
+var LastCommandLineResult = Obj.extend(Module,
 {
     dispatchName: "LastCommandLineResult",
 
@@ -22,14 +23,14 @@ var LastCommandLineResult = Obj.extend(Firebug.Module,
 
     initialize: function()
     {
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
 
         CommandLine.addListener(this);
     },
 
     shutdown: function()
     {
-        Firebug.Module.shutdown.apply(this, arguments);
+        Module.shutdown.apply(this, arguments);
 
         CommandLine.removeListener(this);
     },
diff --git a/content/firebug/console/commands/profiler.js b/content/firebug/console/commands/profiler.js
index 4f86993..61cc72c 100644
--- a/content/firebug/console/commands/profiler.js
+++ b/content/firebug/console/commands/profiler.js
@@ -1,6 +1,8 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
+    "firebug/chrome/rep",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/domplate",
@@ -15,19 +17,21 @@ define([
     "firebug/lib/string",
     "firebug/js/fbs",
 ],
-function(Obj, Firebug, Domplate, FirebugReps, Locale, Wrapper, Url, StackFrame, Events,
-    Css, Dom, Str, FBS) {
+function(Module, Rep, Obj, Firebug, Domplate, FirebugReps, Locale, Wrapper, Url, StackFrame,
+    Events, Css, Dom, Str, FBS) {
 
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, TAG, DIV, SPAN, TD, TR, TH, TABLE, THEAD, TBODY, P, UL, LI, A} = Domplate;
+
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 
 // ********************************************************************************************* //
 // Profiler
 
-Firebug.Profiler = Obj.extend(Firebug.Module,
+Firebug.Profiler = Obj.extend(Module,
 {
     dispatchName: "profiler",
 
@@ -287,7 +291,6 @@ Firebug.Profiler = Obj.extend(Firebug.Module,
 
 // ********************************************************************************************* //
 
-with (Domplate) {
 Firebug.Profiler.ProfileTable = domplate(
 {
     tag:
@@ -440,7 +443,7 @@ Firebug.Profiler.ProfileTable = domplate(
 
 // ********************************************************************************************* //
 
-Firebug.Profiler.ProfileCaption = domplate(Firebug.Rep,
+Firebug.Profiler.ProfileCaption = domplate(Rep,
 {
     tag:
         SPAN({"class": "profileTitle", "role": "status"},
@@ -456,7 +459,7 @@ Firebug.Profiler.ProfileCaption = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-Firebug.Profiler.ProfileCall = domplate(Firebug.Rep,
+Firebug.Profiler.ProfileCall = domplate(Rep,
 {
     tag:
         TR({"class": "focusRow profileRow subFocusRow", "role": "row"},
@@ -533,8 +536,6 @@ Firebug.Profiler.ProfileCall = domplate(Firebug.Rep,
     }
 });
 
-} // END Domplate
-
 // ********************************************************************************************* //
 
 function ProfileCall(script, context, callCount, totalTime, totalOwnTime, minTime, maxTime, sourceLink)
diff --git a/content/firebug/console/commands/useInCommandLine.js b/content/firebug/console/commands/useInCommandLine.js
index 07913c2..48d46e2 100644
--- a/content/firebug/console/commands/useInCommandLine.js
+++ b/content/firebug/console/commands/useInCommandLine.js
@@ -2,6 +2,7 @@
 
 define([
     "firebug/firebug",
+    "firebug/chrome/module",
     "firebug/lib/trace",
     "firebug/console/commandLine",
     "firebug/lib/locale",
@@ -10,7 +11,7 @@ define([
     "firebug/js/sourceLink",
     "firebug/lib/string",
 ],
-function(Firebug, FBTrace, CommandLine, Locale, Obj, Menu, SourceLink, Str) {
+function(Firebug, Module, FBTrace, CommandLine, Locale, Obj, Menu, SourceLink, Str) {
 
 "use strict";
 
@@ -21,7 +22,7 @@ function(Firebug, FBTrace, CommandLine, Locale, Obj, Menu, SourceLink, Str) {
  * @module Responsible for implementing 'Use in Command Line' feature.
  * See also: https://getfirebug.com/wiki/index.php/$p
  */
-var UseInCommandLine = Obj.extend(Firebug.Module,
+var UseInCommandLine = Obj.extend(Module,
 /** @lends UseInCommandLine */
 {
     dispatchName: "UseInCommandLine",
@@ -31,14 +32,14 @@ var UseInCommandLine = Obj.extend(Firebug.Module,
 
     initialize: function()
     {
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
 
         Firebug.registerUIListener(this);
     },
 
     shutdown: function()
     {
-        Firebug.Module.shutdown.apply(this, arguments);
+        Module.shutdown.apply(this, arguments);
 
         Firebug.unregisterUIListener(this);
     },
diff --git a/content/firebug/console/console.js b/content/firebug/console/console.js
index d37615a..6d695e0 100644
--- a/content/firebug/console/console.js
+++ b/content/firebug/console/console.js
@@ -1,153 +1,40 @@
 /* See license.txt for terms of usage */
 
 define([
-    "firebug/lib/object",
     "firebug/firebug",
-    "firebug/chrome/firefox",
+    "firebug/lib/trace",
+    "firebug/lib/object",
     "firebug/lib/events",
     "firebug/lib/locale",
-    "firebug/chrome/window",
     "firebug/lib/search",
     "firebug/lib/xml",
     "firebug/lib/options",
-    "firebug/console/commands/profiler",
+    "firebug/chrome/window",
+    "firebug/chrome/firefox",
+    "firebug/chrome/panelNotification",
+    "firebug/chrome/activableModule",
     "firebug/chrome/searchBox",
+    "firebug/console/consoleBase",
+    "firebug/console/commands/profiler",
     "firebug/console/consolePanel",
     "firebug/console/commandEditor",
     "firebug/console/functionMonitor",
     "firebug/console/commands/eventMonitor",
     "firebug/console/performanceTiming",
 ],
-function(Obj, Firebug, Firefox, Events, Locale, Win, Search, Xml, Options) {
+function(Firebug, FBTrace, Obj, Events, Locale, Search, Xml, Options, Win, Firefox,
+    PanelNotification, ActivableModule, SearchBox, ConsoleBase) {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
 
-var maxQueueRequests = 500;
-
 // Note: createDefaultReturnValueInstance() is a local helper (see below).
 var defaultReturnValue = createDefaultReturnValueInstance();
 
-// ********************************************************************************************* //
-
-Firebug.ConsoleBase =
-{
-    log: function(object, context, className, rep, noThrottle, sourceLink)
-    {
-        Events.dispatch(this.fbListeners,"log",[context, object, className, sourceLink]);
-        return this.logRow(appendObject, object, context, className, rep, sourceLink, noThrottle);
-    },
-
-    logFormatted: function(objects, context, className, noThrottle, sourceLink)
-    {
-        Events.dispatch(this.fbListeners,"logFormatted",[context, objects, className, sourceLink]);
-        return this.logRow(appendFormatted, objects, context, className, null, sourceLink,
-            noThrottle);
-    },
-
-    openGroup: function(objects, context, className, rep, noThrottle, sourceLink, noPush)
-    {
-        return this.logRow(appendOpenGroup, objects, context, className, rep, sourceLink,
-            noThrottle);
-    },
-
-    openCollapsedGroup: function(objects, context, className, rep, noThrottle, sourceLink, noPush)
-    {
-        return this.logRow(appendCollapsedGroup, objects, context, className, rep, sourceLink,
-            noThrottle);
-    },
-
-    closeGroup: function(context, noThrottle)
-    {
-        return this.logRow(appendCloseGroup, null, context, null, null, null, noThrottle, true);
-    },
-
-    logRow: function(appender, objects, context, className, rep, sourceLink, noThrottle, noRow)
-    {
-        if (!context)
-            context = Firebug.currentContext;
-
-        if (FBTrace.DBG_ERRORS && FBTrace.DBG_CONSOLE && !context)
-            FBTrace.sysout("Console.logRow has no context, skipping objects", objects);
-
-        if (!context)
-            return;
-
-        if (noThrottle || !context)
-        {
-            var panel = this.getPanel(context);
-            if (panel)
-            {
-                var row = panel.append(appender, objects, className, rep, sourceLink, noRow);
-                var container = panel.panelNode;
-                var template = Firebug.NetMonitor.NetLimit;
-
-                while (container.childNodes.length > maxQueueRequests + 1)
-                {
-                    container.removeChild(container.firstChild.nextSibling);
-                    panel.limit.limitInfo.totalCount++;
-                    template.updateCounter(panel.limit);
-                }
-                Events.dispatch(this.fbListeners, "onLogRowCreated", [panel, row, context]);
-                return row;
-            }
-        }
-        else
-        {
-            if (!context.throttle)
-            {
-                FBTrace.sysout("console.logRow has not context.throttle! ");
-                return;
-            }
-            var args = [appender, objects, context, className, rep, sourceLink, true, noRow];
-            context.throttle(this.logRow, this, args);
-        }
-    },
-
-    appendFormatted: function(args, row, context)
-    {
-        if (!context)
-            context = Firebug.currentContext;
-
-        var panel = this.getPanel(context);
-        panel.appendFormatted(args, row);
-    },
-
-    clear: function(context)
-    {
-        if (!context)
-            context = Firebug.currentContext;
-
-        if (context)
-        {
-            // There could be some logs waiting in the throttle queue, so
-            // clear asynchronously after the queue is flushed.
-            context.throttle(this.clearPanel, this, [context]);
-
-            // Also clear now
-            this.clearPanel(context);
-
-            // Let listeners react to console clearing
-            Events.dispatch(this.fbListeners, "onConsoleCleared", [context]);
-        }
-    },
-
-    clearPanel: function(context)
-    {
-        Firebug.Errors.clear(context);
-
-        var panel = this.getPanel(context, true);
-        if (panel)
-            panel.clear();
-    },
-
-    // Override to direct output to your panel
-    getPanel: function(context, noCreate)
-    {
-        if (context)
-            return context.getPanel("console", noCreate);
-    },
-};
+var Trace = FBTrace.to("DBG_CONSOLE");
+var TraceError = FBTrace.to("DBG_ERRORS");
 
 // ********************************************************************************************* //
 
@@ -155,7 +42,7 @@ Firebug.ConsoleBase =
  * @module Represents module for the Console panel. Responsible e.g. for handling
  * user actions related to Console panel filter.
  */
-var ActivableConsole = Obj.extend(Firebug.ActivableModule, Firebug.ConsoleBase);
+var ActivableConsole = Obj.extend(ActivableModule, ConsoleBase);
 Firebug.Console = Obj.extend(ActivableConsole,
 /** @lends Firebug.Console */
 {
@@ -179,10 +66,7 @@ Firebug.Console = Obj.extend(ActivableConsole,
 
     initialize: function()
     {
-        // Initialize log limit.
-        this.updateMaxLimit();
-
-        Firebug.ActivableModule.initialize.apply(this, arguments);
+        ActivableModule.initialize.apply(this, arguments);
 
         Firebug.connection.addListener(this);
     },
@@ -208,15 +92,14 @@ Firebug.Console = Obj.extend(ActivableConsole,
     shutdown: function()
     {
         Firebug.connection.removeListener(this);
-        Firebug.ActivableModule.shutdown.apply(this, arguments);
+        ActivableModule.shutdown.apply(this, arguments);
     },
 
     initContext: function(context, persistedState)
     {
-        if (FBTrace.DBG_CONSOLE)
-            FBTrace.sysout("Console.initContext");
+        Trace.sysout("console.initContext;");
 
-        Firebug.ActivableModule.initContext.apply(this, arguments);
+        ActivableModule.initContext.apply(this, arguments);
 
         if (this.isEnabled())
             this.attachConsoleToWindows(context);
@@ -275,19 +158,7 @@ Firebug.Console = Obj.extend(ActivableConsole,
     {
         Firebug.chrome.setGlobalAttribute("cmd_firebug_clearConsole", "disabled", !context);
 
-        Firebug.ActivableModule.showContext.apply(this, arguments);
-    },
-
-    updateOption: function(name, value)
-    {
-        if (name == "console.logLimit")
-            this.updateMaxLimit();
-    },
-
-    updateMaxLimit: function()
-    {
-        var value = Options.get("console.logLimit");
-        maxQueueRequests =  value ? value : maxQueueRequests;
+        ActivableModule.showContext.apply(this, arguments);
     },
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -303,13 +174,13 @@ Firebug.Console = Obj.extend(ActivableConsole,
 
     onSuspendFirebug: function()
     {
-        if (FBTrace.DBG_CONSOLE)
-            FBTrace.sysout("console.onSuspendFirebug isAlwaysEnabled:" +
-                Firebug.Console.isAlwaysEnabled());
+        Trace.sysout("console.onSuspendFirebug; isAlwaysEnabled: " +
+            Firebug.Console.isAlwaysEnabled());
 
         if (Firebug.Errors.toggleWatchForErrors(false))
         {
             this.setStatus();
+
             // Make sure possible errors coming from the page and displayed in the Firefox
             // status bar are removed.
             this.clear();
@@ -318,8 +189,7 @@ Firebug.Console = Obj.extend(ActivableConsole,
 
     onResumeFirebug: function()
     {
-        if (FBTrace.DBG_CONSOLE)
-            FBTrace.sysout("console.onResumeFirebug\n");
+        Trace.sysout("console.onResumeFirebug;");
 
         var watchForErrors = Firebug.Console.isAlwaysEnabled() || Firebug.Console.hasObservers();
         if (Firebug.Errors.toggleWatchForErrors(watchForErrors))
@@ -372,6 +242,7 @@ Firebug.Console = Obj.extend(ActivableConsole,
         {
             filterTypes.add(element);
         });
+
         var doc = chrome.window.document;
         var buttons = doc.getElementsByClassName("fbConsoleFilter");
 
@@ -394,8 +265,7 @@ Firebug.Console = Obj.extend(ActivableConsole,
         }
         else
         {
-            if (FBTrace.DBG_ERRORS)
-                FBTrace.sysout("console.setStatus ERROR no firebugStatus element");
+            TraceError.sysout("console.setStatus; ERROR no firebugStatus element");
         }
     },
 
@@ -406,11 +276,11 @@ Firebug.Console = Obj.extend(ActivableConsole,
         if (!context)
             context = Firebug.currentContext;
 
-        if (FBTrace.DBG_WINDOWS && !context)
-            FBTrace.sysout("Console.logRow: no context \n");
+        if (!context)
+            TraceError.sysout("Console.logRow; no context");
 
         if (this.isAlwaysEnabled())
-            return Firebug.ConsoleBase.logRow.apply(this, arguments);
+            return ConsoleBase.logRow.apply(this, arguments);
     },
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -451,22 +321,17 @@ Firebug.ConsoleListener =
 };
 
 // ********************************************************************************************* //
-
-var appendObject = Firebug.ConsolePanel.prototype.appendObject;
-var appendFormatted = Firebug.ConsolePanel.prototype.appendFormatted;
-var appendOpenGroup = Firebug.ConsolePanel.prototype.appendOpenGroup;
-var appendCollapsedGroup = Firebug.ConsolePanel.prototype.appendCollapsedGroup;
-var appendCloseGroup = Firebug.ConsolePanel.prototype.appendCloseGroup;
-
-// ********************************************************************************************* //
 // Local Helpers
 
 function createDefaultReturnValueInstance()
 {
-    var proto = {
-        __exposedProps__: {
+    var proto =
+    {
+        __exposedProps__:
+        {
             "toString": "rw"
         },
+
         toString: function()
         {
             return undefined;
diff --git a/content/firebug/console/consoleBase.js b/content/firebug/console/consoleBase.js
new file mode 100644
index 0000000..78adb1d
--- /dev/null
+++ b/content/firebug/console/consoleBase.js
@@ -0,0 +1,162 @@
+/* See license.txt for terms of usage */
+
+define([
+    "firebug/firebug",
+    "firebug/lib/trace",
+    "firebug/lib/events",
+    "firebug/lib/options",
+    "firebug/console/consolePanel",
+],
+function(Firebug, FBTrace, Events, Options, ConsolePanel) {
+
+"use strict";
+
+// ********************************************************************************************* //
+// Constants
+
+var Trace = FBTrace.to("DBG_CONSOLE");
+var TraceError = FBTrace.to("DBG_ERRORS");
+
+var appendObject = ConsolePanel.prototype.appendObject;
+var appendFormatted = ConsolePanel.prototype.appendFormatted;
+var appendOpenGroup = ConsolePanel.prototype.appendOpenGroup;
+var appendCollapsedGroup = ConsolePanel.prototype.appendCollapsedGroup;
+var appendCloseGroup = ConsolePanel.prototype.appendCloseGroup;
+
+// ********************************************************************************************* //
+// ConsoleBase Implementation
+
+/**
+ * @object
+ */
+var ConsoleBase =
+/** @lends ConsoleBase */
+{
+    log: function(object, context, className, rep, noThrottle, sourceLink)
+    {
+        Events.dispatch(this.fbListeners, "log", [context, object, className, sourceLink]);
+        return this.logRow(appendObject, object, context, className, rep, sourceLink, noThrottle);
+    },
+
+    logFormatted: function(objects, context, className, noThrottle, sourceLink)
+    {
+        Events.dispatch(this.fbListeners, "logFormatted", [context, objects, className, sourceLink]);
+        return this.logRow(appendFormatted, objects, context, className, null, sourceLink,
+            noThrottle);
+    },
+
+    openGroup: function(objects, context, className, rep, noThrottle, sourceLink, noPush)
+    {
+        return this.logRow(appendOpenGroup, objects, context, className, rep, sourceLink,
+            noThrottle);
+    },
+
+    openCollapsedGroup: function(objects, context, className, rep, noThrottle, sourceLink, noPush)
+    {
+        return this.logRow(appendCollapsedGroup, objects, context, className, rep, sourceLink,
+            noThrottle);
+    },
+
+    closeGroup: function(context, noThrottle)
+    {
+        return this.logRow(appendCloseGroup, null, context, null, null, null, noThrottle, true);
+    },
+
+    logRow: function(appender, objects, context, className, rep, sourceLink, noThrottle, noRow)
+    {
+        if (!context)
+            context = Firebug.currentContext;
+
+        if (!context)
+            TraceError.sysout("console.logRow; has no context, skipping objects", objects);
+
+        if (!context)
+            return;
+
+        if (noThrottle || !context)
+        {
+            var panel = this.getPanel(context);
+            if (panel)
+            {
+                var row = panel.append(appender, objects, className, rep, sourceLink, noRow);
+                var container = panel.panelNode;
+
+                var logLimit = Options.get("console.logLimit");
+                while (container.childNodes.length > logLimit + 1)
+                {
+                    container.removeChild(container.firstChild.nextSibling);
+                    panel.limit.config.totalCount++;
+                    PanelNotification.updateCounter(panel.limit);
+                }
+
+                Events.dispatch(this.fbListeners, "onLogRowCreated", [panel, row, context]);
+                return row;
+            }
+        }
+        else
+        {
+            if (!context.throttle)
+            {
+                TraceError.sysout("console.logRow; has not context.throttle!");
+                return;
+            }
+
+            var args = [appender, objects, context, className, rep, sourceLink, true, noRow];
+            context.throttle(this.logRow, this, args);
+        }
+    },
+
+    appendFormatted: function(args, row, context)
+    {
+        if (!context)
+            context = Firebug.currentContext;
+
+        var panel = this.getPanel(context);
+        panel.appendFormatted(args, row);
+    },
+
+    clear: function(context)
+    {
+        if (!context)
+            context = Firebug.currentContext;
+
+        if (context)
+        {
+            // There could be some logs waiting in the throttle queue, so
+            // clear asynchronously after the queue is flushed.
+            context.throttle(this.clearPanel, this, [context]);
+
+            // Also clear now
+            this.clearPanel(context);
+
+            // Let listeners react to console clearing
+            Events.dispatch(this.fbListeners, "onConsoleCleared", [context]);
+        }
+    },
+
+    clearPanel: function(context)
+    {
+        Firebug.Errors.clear(context);
+
+        var panel = this.getPanel(context, true);
+        if (panel)
+            panel.clear();
+    },
+
+    // Override to direct output to your panel
+    getPanel: function(context, noCreate)
+    {
+        if (context)
+            return context.getPanel("console", noCreate);
+    },
+};
+
+// ********************************************************************************************* //
+// Registration
+
+Firebug.ConsoleBase = ConsoleBase;
+
+return ConsoleBase;
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/console/consoleExposed.js b/content/firebug/console/consoleExposed.js
index 19ac58e..129605c 100644
--- a/content/firebug/console/consoleExposed.js
+++ b/content/firebug/console/consoleExposed.js
@@ -12,9 +12,10 @@ define([
     "firebug/console/console",
     "firebug/lib/options",
     "firebug/debugger/debuggerLib",
+    "firebug/chrome/tableRep",
 ],
 function(FirebugReps, Locale, Wrapper, Url, Str, StackFrame, Errors, Debug, Console, Options,
-    DebuggerLib) {
+    DebuggerLib, TableRep) {
 
 // Note: since we are using .caller and .arguments for stack walking, we can not use strict mode.
 //"use strict";
@@ -147,35 +148,34 @@ function createFirebugConsole(context, win)
 
     console.count = function(key)
     {
-        var frameId = getStackFrameId();
-        if (frameId)
+        var strKey = String(key);
+        var emptyKey = false;
+        if (key === null || key === undefined || strKey === "")
         {
-            if (!context.frameCounters)
-                context.frameCounters = {};
+            emptyKey = true;
+            strKey = getStackFrameId();
+            if (!strKey)
+                return Console.getDefaultReturnValue();
+        }
+        var id = emptyKey + " " + strKey;
 
-            if (key != undefined)
-                frameId += key;
+        if (!context.frameCounters)
+            context.frameCounters = {};
 
-            var frameCounter = context.frameCounters[frameId];
-            if (!frameCounter)
-            {
-                var logRow = logFormatted(["0"], null, true, true);
+        if (!context.frameCounters[id])
+        {
+            var logRow = logFormatted(["0"], null, true, true);
+            context.frameCounters[id] = {logRow: logRow, count: 0};
+        }
 
-                frameCounter = {logRow: logRow, count: 1};
-                context.frameCounters[frameId] = frameCounter;
-            }
-            else
-            {
-                ++frameCounter.count;
-            }
+        var frameCounter = context.frameCounters[id];
+        frameCounter.count++;
 
-            var label = key == undefined
-                ? frameCounter.count
-                : key + " " + frameCounter.count;
+        var label = (emptyKey ? "" : strKey + " ") + frameCounter.count;
+
+        var node = frameCounter.logRow.getElementsByClassName("objectBox-text")[0];
+        node.firstChild.nodeValue = label;
 
-            var node = frameCounter.logRow.getElementsByClassName("objectBox-text")[0];
-            node.firstChild.nodeValue = label;
-        }
         return Console.getDefaultReturnValue();
     };
 
@@ -244,7 +244,7 @@ function createFirebugConsole(context, win)
 
     console.table = function(data, columns)
     {
-        FirebugReps.Table.log(data, columns, context);
+        TableRep.log(data, columns, context);
         return Console.getDefaultReturnValue();
     };
 
@@ -261,19 +261,6 @@ function createFirebugConsole(context, win)
         }
     };
 
-    // xxxHonza: removed from 1.10 (issue 5599)
-    /*console.memoryProfile = function(title)
-    {
-        Firebug.MemoryProfiler.start(context, title);
-        return Console.getDefaultReturnValue();
-    };
-
-    console.memoryProfileEnd = function()
-    {
-        Firebug.MemoryProfiler.stop(context);
-        return Console.getDefaultReturnValue();
-    };*/
-
     // Expose only these properties to the content scope (read only).
     console.__exposedProps__.log = "r";
     console.__exposedProps__.debug = "r";
@@ -296,8 +283,6 @@ function createFirebugConsole(context, win)
     console.__exposedProps__.clear = "r";
     console.__exposedProps__.table = "r";
     console.__exposedProps__.error = "r";
-    //console.__exposedProps__.memoryProfile = "r";
-    //console.__exposedProps__.memoryProfileEnd = "r";
 
     // DBG console.uid = Math.random();
 
@@ -443,7 +428,7 @@ function createFirebugConsole(context, win)
                 continue;
 
             // command line
-            var fn = frames[i].getFunctionName() + "";
+            var fn = String(frames[i].getFunctionName());
             if (fn && (fn.indexOf("_firebugEvalEvent") != -1))
                 continue;
 
@@ -491,7 +476,8 @@ function createFirebugConsole(context, win)
                         else
                         {
                             var argValues = Array.prototype.slice.call(func.arguments);
-                            var argNames = StackFrame.guessFunctionArgNamesFromSource(func + "");
+                            var argNames =
+                                StackFrame.guessFunctionArgNamesFromSource(String(func));
                             if (argNames && argNames.length === func.length)
                             {
                                 for (var i = 0; i < func.length; i++)
diff --git a/content/firebug/console/consolePanel.js b/content/firebug/console/consolePanel.js
index 193a0dc..3b4fe2e 100644
--- a/content/firebug/console/consolePanel.js
+++ b/content/firebug/console/consolePanel.js
@@ -12,16 +12,19 @@ define([
     "firebug/lib/search",
     "firebug/chrome/menu",
     "firebug/lib/options",
+    "firebug/chrome/panelNotification",
+    "firebug/chrome/activablePanel",
     "firebug/console/commands/profiler",
     "firebug/chrome/searchBox"
 ],
-function(Obj, Firebug, Domplate, FirebugReps, Locale, Events, Css, Dom, Search, Menu, Options) {
-
-with (Domplate) {
+function(Obj, Firebug, Domplate, FirebugReps, Locale, Events, Css, Dom, Search, Menu, Options,
+    PanelNotification, ActivablePanel) {
 
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, DIV, SPAN, TD, TR, TABLE, TBODY, P, A} = Domplate;
+
 var reAllowedCss = /^(-moz-)?(background|border|color|font|line|margin|padding|text)/;
 
 const Cc = Components.classes;
@@ -50,7 +53,7 @@ const logTypes =
 
 Firebug.ConsolePanel = function () {};
 
-Firebug.ConsolePanel.prototype = Obj.extend(Firebug.ActivablePanel,
+Firebug.ConsolePanel.prototype = Obj.extend(ActivablePanel,
 {
     template: domplate(
     {
@@ -62,7 +65,18 @@ Firebug.ConsolePanel.prototype = Obj.extend(Firebug.ActivablePanel,
                         SPAN({"class": "logCounterValue"})
                     )
                 )
-            )
+            ),
+
+        limitTag:
+            DIV({"class": "panelNotificationBox collapsed"},
+                TABLE({width: "100%", cellpadding: 0, cellspacing: 0},
+                    TBODY(
+                        TR(
+                            TD({"class": "consolPanelNotification"})
+                        )
+                    )
+                )
+            ),
     }),
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -86,7 +100,7 @@ Firebug.ConsolePanel.prototype = Obj.extend(Firebug.ActivablePanel,
 
     initialize: function()
     {
-        Firebug.ActivablePanel.initialize.apply(this, arguments);  // loads persisted content
+        ActivablePanel.initialize.apply(this, arguments);  // loads persisted content
 
         this.filterMatchSet = [];
 
@@ -121,12 +135,12 @@ Firebug.ConsolePanel.prototype = Obj.extend(Firebug.ActivablePanel,
                 this.wasScrolledToBottom + ", " + this.context.getName());
 
         Firebug.Console.removeListener(this);
-        Firebug.ActivablePanel.destroy.apply(this, arguments);  // must be called last
+        ActivablePanel.destroy.apply(this, arguments);  // must be called last
     },
 
     initializeNode: function()
     {
-        Firebug.ActivablePanel.initializeNode.apply(this, arguments);
+        ActivablePanel.initializeNode.apply(this, arguments);
 
         this.onScroller = Obj.bind(this.onScroll, this);
         Events.addEventListener(this.panelNode, "scroll", this.onScroller, true);
@@ -138,7 +152,7 @@ Firebug.ConsolePanel.prototype = Obj.extend(Firebug.ActivablePanel,
 
     destroyNode: function()
     {
-        Firebug.ActivablePanel.destroyNode.apply(this, arguments);
+        ActivablePanel.destroyNode.apply(this, arguments);
 
         if (this.onScroller)
             Events.removeEventListener(this.panelNode, "scroll", this.onScroller, true);
@@ -637,19 +651,20 @@ Firebug.ConsolePanel.prototype = Obj.extend(Firebug.ActivablePanel,
         // entries reaches the limit.
         var row = this.createRow("limitRow");
 
-        var limitInfo = {
+        // Configure the panel notification box.
+        var prefName = Options.prefDomain + ".console.logLimit";
+        var config = {
             totalCount: 0,
-            limitPrefsTitle: Locale.$STRF("LimitPrefsTitle",
-                [Options.prefDomain+".console.logLimit"])
+            prefName: prefName,
+            buttonTooltip: Locale.$STRF("LimitPrefsTitle", [prefName])
         };
 
-        var netLimitRep = Firebug.NetMonitor.NetLimit;
-        var nodes = netLimitRep.createTable(row, limitInfo);
+        var container = this.template.limitTag.replace({}, row);
+        container = container.querySelector(".consolPanelNotification");
 
-        this.limit = nodes[1];
+        this.limit = PanelNotification.render(container, config);
 
-        var container = this.panelNode;
-        container.insertBefore(nodes[0], container.firstChild);
+        this.panelNode.insertBefore(row, this.panelNode.firstChild);
     },
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -1076,4 +1091,4 @@ Firebug.registerPanel(Firebug.ConsolePanel);
 return Firebug.ConsolePanel;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/console/errorMessageRep.js b/content/firebug/console/errorMessageRep.js
index a77c7e7..de0e206 100644
--- a/content/firebug/console/errorMessageRep.js
+++ b/content/firebug/console/errorMessageRep.js
@@ -2,6 +2,8 @@
 
 define([
     "firebug/firebug",
+    "firebug/chrome/module",
+    "firebug/chrome/rep",
     "firebug/lib/trace",
     "firebug/lib/domplate",
     "firebug/console/errors",
@@ -20,8 +22,8 @@ define([
     "firebug/js/fbs",
     "firebug/chrome/panelActivation",
 ],
-function(Firebug, FBTrace, Domplate, Errors, ErrorMessageObj, FirebugReps, Locale, Url, Str,
-    SourceLink, Dom, Css, Obj, Menu, System, Events, FBS, PanelActivation) {
+function(Firebug, Module, Rep, FBTrace, Domplate, Errors, ErrorMessageObj, FirebugReps, Locale,
+    Url, Str, SourceLink, Dom, Css, Obj, Menu, System, Events, FBS, PanelActivation) {
 
 "use strict"
 
@@ -40,7 +42,7 @@ var {domplate, TAG, SPAN, DIV, TD, TR, TABLE, TBODY, A, PRE} = Domplate;
  * @domplate Domplate template used to represent Error logs in the UI. Registered as Firebug rep.
  * This template is used for {@ErrorMessageObj} instances.
  */
-var ErrorMessage = domplate(Firebug.Rep,
+var ErrorMessage = domplate(Rep,
 /** @lends ErrorMessage */
 {
     className: "errorMessage",
@@ -410,7 +412,7 @@ var ErrorMessage = domplate(Firebug.Rep,
 /**
  * @module Responsible for asynchronous UI update or ErrorMessage template.
  */
-var ErrorMessageUpdater = Obj.extend(Firebug.Module,
+var ErrorMessageUpdater = Obj.extend(Module,
 /** @lends ErrorMessageUpdater */
 {
     dispatchName: "ErrorMessageUpdater",
@@ -420,13 +422,13 @@ var ErrorMessageUpdater = Obj.extend(Firebug.Module,
 
     initialize: function()
     {
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
         PanelActivation.addListener(this);
     },
 
     shutdown: function()
     {
-        Firebug.Module.shutdown.apply(this, arguments);
+        Module.shutdown.apply(this, arguments);
         PanelActivation.removeListener(this);
     },
 
diff --git a/content/firebug/console/errors.js b/content/firebug/console/errors.js
index 1db0b51..9f1d5fb 100644
--- a/content/firebug/console/errors.js
+++ b/content/firebug/console/errors.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/chrome/reps",
@@ -11,7 +12,7 @@ define([
     "firebug/lib/array",
     "firebug/lib/string"
 ],
-function(Obj, Firebug, FirebugReps, Xpcom, Console, Css, Win, Arr, Str) {
+function(Module, Obj, Firebug, FirebugReps, Xpcom, Console, Css, Win, Arr, Str) {
 
 // ********************************************************************************************* //
 // Constants
@@ -56,7 +57,7 @@ const wm = Xpcom.CCSV("@mozilla.org/appshell/window-mediator;1", "nsIWindowMedia
 
 // ********************************************************************************************* //
 
-var Errors = Firebug.Errors = Obj.extend(Firebug.Module,
+var Errors = Firebug.Errors = Obj.extend(Module,
 {
     dispatchName: "errors",
 
@@ -68,7 +69,7 @@ var Errors = Firebug.Errors = Obj.extend(Firebug.Module,
         // Make sure the error observer is removed.
         this.stopObserving();
 
-        Firebug.Module.shutdown.apply(this, arguments);
+        Module.shutdown.apply(this, arguments);
     },
 
     initContext: function(context)
diff --git a/content/firebug/console/exceptionRep.js b/content/firebug/console/exceptionRep.js
index 2f4f595..d5173cf 100644
--- a/content/firebug/console/exceptionRep.js
+++ b/content/firebug/console/exceptionRep.js
@@ -2,6 +2,7 @@
 
 define([
     "firebug/firebug",
+    "firebug/chrome/rep",
     "firebug/lib/trace",
     "firebug/lib/object",
     "firebug/lib/domplate",
@@ -11,7 +12,7 @@ define([
     "firebug/chrome/reps",
     "firebug/js/stackFrame",
 ],
-function(Firebug, FBTrace, Obj, Domplate, ErrorMessageObj, ErrorMessage, ErrorCopy,
+function(Firebug, Rep, FBTrace, Obj, Domplate, ErrorMessageObj, ErrorMessage, ErrorCopy,
     FirebugReps, StackFrame) {
 
 "use strict"
@@ -28,7 +29,7 @@ var {domplate, TAG} = Domplate;
  * @domplate This template represents exceptions that happen in the content and appear
  * within Firebug UI. It's registered as Firebug rep.
  */
-var Exception = domplate(Firebug.Rep,
+var Exception = domplate(Rep,
 /** @lends Exception */
 {
     tag:
diff --git a/content/firebug/console/functionMonitor.js b/content/firebug/console/functionMonitor.js
index 9957856..8b03c50 100644
--- a/content/firebug/console/functionMonitor.js
+++ b/content/firebug/console/functionMonitor.js
@@ -1,6 +1,8 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
+    "firebug/chrome/rep",
     "firebug/lib/trace",
     "firebug/lib/object",
     "firebug/lib/domplate",
@@ -11,12 +13,19 @@ define([
     "firebug/lib/dom",
     "firebug/lib/url",
 ],
-function(FBTrace, Obj, Domplate, Reps, StackFrame, Events, Css, Dom, Url) { with (Domplate) {
+function(Module, Rep, FBTrace, Obj, Domplate, Reps, StackFrame, Events, Css, Dom, Url) {
+
+"use strict";
+
+// ********************************************************************************************* //
+// Constants
+
+var {domplate, A, SPAN, FOR, TAG, DIV} = Domplate;
 
 // ********************************************************************************************* //
 // Function Monitor
 
-var FunctionMonitor = Obj.extend(Firebug.Module,
+var FunctionMonitor = Obj.extend(Module,
 {
     dispatchName: "functionMonitor",
 
@@ -25,14 +34,14 @@ var FunctionMonitor = Obj.extend(Firebug.Module,
 
     initialize: function()
     {
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
         Firebug.connection.addListener(this);
     },
 
     shutdown: function()
     {
         Firebug.connection.removeListener(this);
-        Firebug.Module.shutdown.apply(this, arguments);
+        Module.shutdown.apply(this, arguments);
     },
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -75,7 +84,7 @@ function FunctionLog(frame, stackTrace)
 // ********************************************************************************************* //
 // Function Monitor Rep
 
-var FunctionMonitorRep = domplate(Firebug.Rep,
+var FunctionMonitorRep = domplate(Rep,
 {
     className: "functionCall",
 
@@ -188,4 +197,4 @@ Firebug.registerRep(FunctionMonitorRep);
 return FunctionMonitor;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/console/memoryProfiler.js b/content/firebug/console/memoryProfiler.js
deleted file mode 100644
index e1736f8..0000000
--- a/content/firebug/console/memoryProfiler.js
+++ /dev/null
@@ -1,864 +0,0 @@
-/* See license.txt for terms of usage */
-
-define([
-    "firebug/lib/object",
-    "firebug/firebug",
-    "firebug/lib/domplate",
-    "firebug/chrome/reps",
-    "firebug/lib/locale",
-    "firebug/lib/wrapper",
-    "firebug/js/stackFrame",
-    "firebug/lib/dom",
-    "firebug/lib/css",
-    "firebug/lib/string",
-    "firebug/js/fbs",
-],
-function(Obj, Firebug, Domplate, FirebugReps, Locale, Wrapper, StackFrame, Dom, Css, Str, FBS) {
-
-// ********************************************************************************************* //
-
-var Cc = Components.classes;
-var Ci = Components.interfaces;
-
-var RETURN_CONTINUE = Ci.jsdIExecutionHook.RETURN_CONTINUE;
-
-var memoryReporterManager = null;
-
-try
-{
-    memoryReporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].
-        getService(Ci.nsIMemoryReporterManager);
-}
-catch (err)
-{
-    if (FBTrace.DBG_MEMORY_PROFILER)
-        FBTrace.sysout("memoryProfiler; Looks like '@mozilla.org/memory-reporter-manager;1'" +
-            "is no available", err);
-}
-
-// List of memory reports displayed in the result. Append new path in the list in order
-// to create a new column in the result report-table.
-var MEMORY_PATHS =
-{
-    "explicit/js": true,
-    "explicit/js/gc-heap": true,
-    "explicit/js/tjit-data": true,
-    "explicit/js/mjit-code": true,
-    "explicit/images/content/used/raw": true,
-};
-
-// ********************************************************************************************* //
-
-Firebug.MemoryProfiler = Obj.extend(Firebug.Module,
-{
-    dispatchName: "memoryProfiler",
-
-    initialize: function()  // called once
-    {
-        Firebug.Module.initialize.apply(this, arguments);
-
-        if (FBTrace.DBG_MEMORY_PROFILER)
-            FBTrace.sysout("memoryProfiler; initialize");
-    },
-
-    shutdown: function()
-    {
-        Firebug.Module.shutdown.apply(this, arguments);
-    },
-
-    initContext: function(context)
-    {
-        Firebug.Module.initContext.apply(this, arguments);
-
-        // xxxHonza: If profiling is on and the user reloads,needs better testing
-        // Profilinig should support reloads to profile page load.
-        if (this.profiling)
-            this.start(context);
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    onConsoleCleared: function(context)
-    {
-        if (this.isProfiling())
-            this.stop(context, true);
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // Activation/deactivation
-
-    toggleProfiling: function(context)
-    {
-        try
-        {
-            if (this.profiling)
-                this.stop(context);
-            else
-                this.start(context);
-        }
-        catch (err)
-        {
-            if (FBTrace.DBG_ERRORS)
-                FBTrace.sysout("memoryProfiler; toggleProfiling EXCEPTION " + err, err);
-        }
-    },
-
-    isProfiling: function()
-    {
-        return this.profiling;
-    },
-
-    start: function(context, title)
-    {
-        if (!memoryReporterManager)
-        {
-            // xxxHonza: locale if memory profiler will be part of 1.8
-            Firebug.Console.log("Memory profiler component is not available on your platform.");
-            return;
-        }
-
-        Firebug.chrome.setGlobalAttribute("cmd_firebug_toggleMemoryProfiling", "checked", "true");
-
-        this.profiling = true;
-        FBS.addHandler(this);
-
-        // Initialize structures for collected memory data.
-        context.memoryProfileStack = []; // Holds memory reports for called fucntions.
-        context.memoryProfileResult = {}; // Holds differences between function-call and function-return.
-        context.memoryProfileTime = (new Date()).getTime();
-
-        // Memory leak detection
-        this.mark(context);
-
-        var isCustomMessage = !!title;
-        if (!isCustomMessage)
-            title = Locale.$STR("firebug.Memory Profiler Started");
-
-        context.memoryProfileRow = this.logProfileRow(context, title);
-        context.memoryProfileRow.customMessage = isCustomMessage;
-
-        // For summary numbers (difference between profiling-start and profiling-end)
-        context.memoryProfileStack.push(this.getMemoryReport());
-
-        Firebug.Console.addListener(this);
-    },
-
-    stop: function(context, cancelReport)
-    {
-        FBS.removeHandler(this);
-        this.profiling = false;
-
-        Firebug.chrome.setGlobalAttribute("cmd_firebug_toggleMemoryProfiling", "checked", "false");
-
-        // Calculate total diff
-        var oldReport = context.memoryProfileStack.pop();
-        var newReport = this.getMemoryReport();
-
-        context.memoryProfileSummary = this.diffMemoryReport(oldReport, newReport);
-        context.memoryProfileTime = (new Date()).getTime() - context.memoryProfileTime;
-
-        this.logProfileReport(context, context.memoryProfileResult);
-
-        delete context.memoryProfileRow;
-        delete context.memoryProfileStack;
-        delete context.memoryProfileResult;
-
-        // Memory leak detection
-        var deltaObjects = this.sweep(context);
-        this.cleanUp(context);
-
-        if (!cancelReport)
-        {
-            var title = Locale.$STR("firebug.Objects Added While Profiling");
-            Firebug.Console.openCollapsedGroup(title, context, "profile",
-                Firebug.MemoryProfiler.ProfileCaption, true, null, true);
-    
-            Firebug.Console.log(deltaObjects, context, "memoryDelta", Firebug.DOMPanel.DirTable);
-            Firebug.Console.closeGroup(context, true);
-        }
-
-        Firebug.Console.removeListener(this);
-
-        //Firebug.Console.logFormatted([deltaObjects], context, "memoryDelta");
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // JSD Handler
-
-    unhook: function()
-    {
-    },
-
-    hook: function()
-    {
-    },
-
-    onFunctionCall: function(frame, depth)
-    {
-        var context = Firebug.Debugger.getContextByFrame(frame);
-        if (!context)
-            return RETURN_CONTINUE;
-
-        context.memoryProfileStack.push(this.getMemoryReport());
-
-        return RETURN_CONTINUE;
-    },
-
-    onFunctionReturn: function(frame, depth)
-    {
-        var context = Firebug.Debugger.getContextByFrame(frame);
-        if (!context)
-            return RETURN_CONTINUE;
-
-        frame = StackFrame.getStackFrame(frame, context);
-
-        var oldReport = context.memoryProfileStack.pop();
-        var newReport = this.getMemoryReport();
-        var diff = this.diffMemoryReport(oldReport, newReport);
-
-        // Collect reports.
-        var entryId = frameId(frame);
-        var entry = context.memoryProfileResult[entryId];
-
-        if (entry)
-        {
-            entry.callCount++;
-            entry.report = this.sumMemoryReport(entry.report, diff);
-        }
-        else
-        {
-            context.memoryProfileResult[entryId] = {
-                callCount: 1,
-                report: diff,
-                frame: frame
-            };
-        }
-
-        return RETURN_CONTINUE;
-    },
-
-    /*onInterrupt: function(frame, depth)
-    {
-    },*/
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // Memory
-
-    getMemoryReport: function()
-    {
-        var report = {};
-
-        if (!memoryReporterManager)
-            return report;
-
-        var iter = memoryReporterManager.enumerateReporters();
-        while (iter.hasMoreElements())
-        {
-            var reporter = iter.getNext().QueryInterface(Ci.nsIMemoryReporter);
-            if (MEMORY_PATHS[reporter.path])
-                report[reporter.path] = reporter.memoryUsed;
-        }
-        return report;
-    },
-
-    diffMemoryReport: function(oldReport, newReport)
-    {
-        var diff = {};
-        for (var p in oldReport)
-        {
-            var oldVal = oldReport[p];
-            var newVal = newReport[p];
-            diff[p] = newVal - oldVal;
-        }
-        return diff;
-    },
-
-    sumMemoryReport: function(report1, report2)
-    {
-        var sum = [];
-        for (var p in report1)
-        {
-            var val1 = report1[p];
-            var val2 = report2[p];
-            sum[p] = val1 + val2;
-        }
-        return sum;
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // Memory leak detection
-
-    mark: function(context)
-    {
-        // Iterate all objects of the content window.
-        var iter = new ObjectIterator();
-        var contentView = Wrapper.getContentView(context.window);
-        iter.iterate(contentView, "window", function(obj, path)
-        {
-            // We have been here, bail out.
-            if (obj.hasOwnProperty("__fbugMemMark"))
-                return false;
-
-            if (FirebugReps.Arr.isArray(obj, context.window))
-                obj.__fbugMemMark = obj.length;
-            else
-                obj.__fbugMemMark = true;
-
-            //if (FBTrace.DBG_MEMORY_PROFILER)
-            //    FBTrace.sysout("mark "+path+": "+obj.__fbugMemMark+" view: "+
-            //       Wrapper.getContentView(obj));
-
-            // Continue with children
-            return true;
-        });
-    },
-
-    sweep: function(context)
-    {
-        var iter = new ObjectIterator();
-        iter.deltaObjects = {};
-
-        var contentView = Wrapper.getContentView(context.window);
-        iter.iterate(contentView, "window", function(obj, path)
-        {
-            //if (FBTrace.DBG_MEMORY_PROFILER)
-            //    FBTrace.sysout("sweep "+path+" "+obj.hasOwnProperty("__fbugMemSweep")+" view: "+
-            //        Wrapper.getContentView(obj), obj);
-
-            if (obj.hasOwnProperty("__fbugMemSweep"))
-                return false;
-
-            obj.__fbugMemSweep = true;
-
-            if (!obj.hasOwnProperty("__fbugMemMark")) // then we did not see this object 'before'
-            {
-                this.deltaObjects[path] = obj;
-            }
-            else // we did see it
-            {
-                // but it was an array with a different size
-                if (FirebugReps.Arr.isArray(obj, context.window) &&
-                    (obj.__fbugMemMark !== obj.length))
-                {
-                    this.deltaObjects[path] = obj;
-                }
-            }
-
-            // Iterate children
-            return true;
-        });
-
-        return iter.deltaObjects;
-    },
-
-    cleanUp: function(context)
-    {
-        var iter = new ObjectIterator();
-        var contentView = Wrapper.getContentView(context.window);
-        iter.iterate(contentView, "window", function(obj, path)
-        {
-            if (!obj.hasOwnProperty("__fbugMemSweep"))
-                return false;
-
-            // Clean up
-            delete obj.__fbugMemSweep;
-            delete obj.__fbugMemMark;
-
-            return true;
-        });
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // UI
-
-    logProfileRow: function(context, title)
-    {
-        var row = Firebug.Console.openGroup(title, context, "profile",
-            Firebug.MemoryProfiler.ProfileCaption, true, null, true);
-        Css.setClass(row, "profilerRunning");
-
-        Firebug.Console.closeGroup(context, true);
-
-        return row;
-    },
-
-    logProfileReport: function(context, memoryReport, cancel)
-    {
-        if (FBTrace.DBG_MEMORY_PROFILER)
-        {
-            FBTrace.sysout("memoryProfiler; logProfileReport", memoryReport);
-            FBTrace.sysout("memoryProfiler; logProfileReport SUMMARY", context.memoryProfileSummary);
-        }
-
-        // Get an existing console log (with throbber) or create a new one.
-        var groupRow = context.memoryProfileRow && context.memoryProfileRow.ownerDocument
-            ? context.memoryProfileRow
-            : this.logProfileRow(context);
-        delete context.memoryProfileRow;
-
-        Css.removeClass(groupRow, "profilerRunning");
-
-        var calls = [];
-        var totalCalls = 0;
-        var sourceFileMap = context.sourceFileMap;
-
-        for (var p in memoryReport)
-        {
-            if (!memoryReport.hasOwnProperty(p))
-                continue;
-
-            var entry = memoryReport[p];
-            totalCalls++;
-
-            if (!entry.frame)
-            {
-                if (FBTrace.DBG_MEMORY_PROFILER)
-                    FBTrace.sysout("memoryProfiler no entry.frame? for p="+p, entry);
-                continue;
-            }
-
-            var script = entry.frame.script;
-            var sourceLink = Firebug.SourceFile.getSourceLinkForScript(script, context);
-
-            if (sourceLink && sourceLink.href in sourceFileMap)
-            {
-                var call = new MemoryProfileCall(script, context, entry.callCount,
-                    entry.report, sourceLink);
-                calls.push(call);
-            }
-        }
-
-        // Summary log
-        var call = new MemoryProfileSummary(context, context.memoryProfileSummary);
-        calls.push(call);
-        totalCalls++;
-
-        if (totalCalls > 0)
-        {
-            var captionBox = groupRow.getElementsByClassName("profileCaption").item(0);
-            if (!groupRow.customMessage)
-                captionBox.textContent = Locale.$STR("firebug.Memory Profiler Results");
-
-            var timeBox = groupRow.getElementsByClassName("profileTime").item(0);
-            timeBox.textContent = "(" + Str.formatTime(context.memoryProfileTime) + ")";
-
-            var groupBody = groupRow.lastChild;
-            var sizer = Firebug.MemoryProfiler.ProfileTable.tag.replace(
-                {object: MEMORY_PATHS}, groupBody);
-
-            var table = sizer.firstChild;
-            var tHeader = table.lastChild;  // no rows inserted.
-
-            var callTag = Firebug.MemoryProfiler.ProfileCall.tag;
-            var sumTag = Firebug.MemoryProfiler.ProfileSummary.tag;
-
-            for (var i = 0; i < calls.length; ++i)
-            {
-                var call = calls[i];
-                call.index = i;
-                var tag = (call instanceof MemoryProfileCall) ? callTag : sumTag;
-                context.throttle(tag.insertRows, tag, [{object: call}, tHeader]);
-            }
-
-            context.throttle(groupRow.scrollIntoView, groupRow, []);
-        }
-        else
-        {
-            var captionBox = groupRow.getElementsByClassName("profileCaption").item(0);
-            captionBox.textContent = Locale.$STR("NothingToProfile");
-        }
-    }
-});
-
-// ********************************************************************************************* //
-
-function MemoryProfileCall(script, context, callCount, report, sourceLink)
-{
-    this.script = script;
-    this.context = context;
-    this.callCount = callCount;
-    this.report = report;
-    this.sourceLink = sourceLink;
-}
-
-function MemoryProfileSummary(context, report)
-{
-    this.context = context;
-    this.report = report;
-}
-
-// ********************************************************************************************* //
-// Object Iterator
-
-/**
- * Recursively iterates all children objects.
- */
-function ObjectIterator()
-{
-}
-
-ObjectIterator.prototype =
-/** @lends ObjectIterator */
-{
-    /**
-     * Recursive iteration over all children of given object
-     * @param {Object} obj The object to iterate
-     * @param {String} path helper path for logging.
-     * @param {Function} callback Callback function executed for each object.
-     */
-    iterate: function(obj, path, callback)
-    {
-        if (!callback.apply(this, [obj, path]))
-            return;
-
-        var names = Object.keys(obj);
-        for (var i=0; i<names.length; i++)
-        {
-            var name = names[i];
-
-            // Ignore memory-profiler helper fields
-            if (name === "__fbugMemSweep" || name === "__fbugMemMark")
-                continue;
-
-            // Ignore built-in objects
-            if (Dom.isDOMMember(obj, name) || Dom.isDOMConstant(obj, name))
-                continue;
-
-            try
-            {
-                var child = obj[name];
-
-                // xxxHonza, xxxJJB: this should be removed once the problem is clear.
-                if (name === "HTMLBodyElement")
-                    FBTrace.sysout("memoryProfiler; HTMLBodyElement " + name + " instanceof: " +
-                        (prop instanceof window.HTMLBodyElement) + " toString: " + child);
-
-                // Recursion
-                if (typeof(child) === "object")  // TODO function
-                    this.iterate(child, path + "." + name, callback);
-            }
-            catch (exc)
-            {
-                if (FBTrace.DBG_MEMORY_PROFILER)
-                    FBTrace.sysout("memoryProfiler; iteration fails on " + path + "." + name, exc);
-            }
-        }
-
-        //xxxHonza, xxxJBB: iterate also prototype as soon as we understand the consequences.
-        /*
-         var proto = Object.getPrototypeOf(obj);
-        if (proto && typeof(proto) === 'object')
-            this.sweepRecursive(deltaObjects, proto, path+'.__proto__');
-        */
-    },
-};
-
-// ********************************************************************************************* //
-// Domplate Templates
-
-with (Domplate) {
-Firebug.MemoryProfiler.ProfileTable = domplate(
-{
-    tag:
-        DIV({"class": "profileSizer", "tabindex": "-1" },
-            TABLE({"class": "profileTable", cellspacing: 0, cellpadding: 0,
-                width: "100%", "role": "grid"},
-                THEAD({"class": "profileThead", "role": "presentation"},
-                    TR({"class": "headerRow focusRow profileRow subFocusRow",
-                        onclick: "$onClick", "role": "row"},
-                        TH({"class": "headerCell alphaValue a11yFocus", "role": "columnheader"},
-                            DIV({"class": "headerCellBox"},
-                                Locale.$STR("Function")
-                            )
-                        ),
-                        TH({"class": "headerCell a11yFocus", "role": "columnheader"},
-                            DIV({"class": "headerCellBox", title: Locale.$STR("CallsHeaderTooltip")},
-                                Locale.$STR("Calls")
-                            )
-                        ),
-                        FOR("column", "$object|getColumns",
-                            TH({"class": "headerCell a11yFocus", "role": "columnheader",
-                                "aria-sort": "descending"},
-                                DIV({"class": "headerCellBox"},
-                                    Locale.$STR("$column|getColumnLabel")
-                                )
-                            )
-                        ),
-                        TH({"class": "headerCell alphaValue a11yFocus", "role": "columnheader"},
-                            DIV({"class": "headerCellBox"},
-                                Locale.$STR("File")
-                            )
-                        )
-                    )
-                ),
-                TBODY({"class": "profileTbody", "role": "presentation"})
-            )
-        ),
-
-    getColumns: function(object)
-    {
-        var cols = [];
-        for (var p in object)
-            cols.push(p);
-        return cols;
-    },
-
-    getColumnLabel: function(column)
-    {
-        return column;
-    },
-
-    onClick: function(event)
-    {
-        var table = Dom.getAncestorByClass(event.target, "profileTable");
-        var header = Dom.getAncestorByClass(event.target, "headerCell");
-        if (!header)
-            return;
-
-        var numerical = !Css.hasClass(header, "alphaValue");
-
-        var colIndex = 0;
-        for (header = header.previousSibling; header; header = header.previousSibling)
-            ++colIndex;
-
-        this.sort(table, colIndex, numerical);
-    },
-
-    sort: function(table, colIndex, numerical)
-    {
-        sortAscending = function()
-        {
-            Css.removeClass(header, "sortedDescending");
-            Css.setClass(header, "sortedAscending");
-            header.setAttribute("aria-sort", "ascending");
-
-            header.sorted = -1;
-
-            for (var i = 0; i < values.length; ++i)
-                tbody.appendChild(values[i].row);
-        };
-
-        sortDescending = function()
-        {
-            Css.removeClass(header, "sortedAscending");
-            Css.setClass(header, "sortedDescending");
-            header.setAttribute("aria-sort", "descending");
-
-            header.sorted = 1;
-
-            for (var i = values.length-1; i >= 0; --i)
-                tbody.appendChild(values[i].row);
-        };
-
-        var tbody = Dom.getChildByClass(table, "profileTbody");
-        var thead = Dom.getChildByClass(table, "profileThead");
-
-        var values = [];
-        for (var row = tbody.childNodes[0]; row; row = row.nextSibling)
-        {
-            var cell = row.childNodes[colIndex];
-            var sortValue = cell.sortValue ? cell.sortValue : cell.textContent;
-            var value = numerical ? parseFloat(sortValue) : sortValue;
-            values.push({row: row, value: value});
-        }
-
-        values.sort(function(a, b) { return a.value < b.value ? -1 : 1; });
-
-        var headerRow = thead.firstChild;
-        var headerSorted = Dom.getChildByClass(headerRow, "headerSorted");
-        Css.removeClass(headerSorted, "headerSorted");
-        if (headerSorted)
-            headerSorted.removeAttribute('aria-sort');
-
-        var header = headerRow.childNodes[colIndex];
-        Css.setClass(header, "headerSorted");
-
-        if (numerical)
-        {
-            if (!header.sorted || header.sorted == -1)
-            {
-                sortDescending();
-            }
-            else
-            {
-                sortAscending();
-            }
-        }
-        else
-        {
-            if (!header.sorted || header.sorted == -1)
-            {
-                sortAscending();
-            }
-            else
-            {
-                sortDescending();
-            }
-        }
-    }
-});
-
-// ********************************************************************************************* //
-
-Firebug.MemoryProfiler.ProfileCaption = domplate(Firebug.Rep,
-{
-    tag:
-        SPAN({"class": "profileTitle", "role": "status"},
-            SPAN({"class": "profileCaption"}, "$object"),
-            " ",
-            SPAN({"class": "profileTime"}, "")
-        )
-});
-
-// ********************************************************************************************* //
-
-// FirebugReps.OBJECTLINK is not yet initialized at this moment.
-var OBJECTLINK =
-    A({
-        "class": "objectLink objectLink-$className a11yFocus",
-        _repObject: "$object"
-    });
-
-Firebug.MemoryProfiler.ProfileCall = domplate(Firebug.Rep,
-{
-    tag:
-        TR({"class": "focusRow profileRow subFocusRow", "role": "row"},
-            TD({"class": "profileCell", "role": "presentation"},
-                OBJECTLINK("$object|getCallName")
-            ),
-            TD({"class": "a11yFocus profileCell", "role": "gridcell"},
-                "$object.callCount"
-            ),
-            FOR("column", "$object|getColumns",
-                TD({"class": "a11yFocus profileCell", "role": "gridcell", _sortValue: "$column"},
-                    "$column|getColumnLabel"
-                )
-            ),
-            TD({"class": "linkCell profileCell", "role": "presentation"},
-                 TAG("$object|getSourceLinkTag", {object: "$object|getSourceLink"})
-            )
-        ),
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    getSourceLinkTag: function(object)
-    {
-        return FirebugReps.SourceLink.tag;
-    },
-
-    getCallName: function(call)
-    {
-        return Str.cropString(StackFrame.getFunctionName(call.script, call.context), 60);
-    },
-
-    getColumns: function(call)
-    {
-        var cols = [];
-        for (var p in MEMORY_PATHS)
-            cols.push(call.report[p] || 0);
-        return cols;
-    },
-
-    getColumnLabel: function(call)
-    {
-        return Str.formatSize(call);
-    },
-
-    getSourceLink: function(call)
-    {
-        return call.sourceLink;
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    className: "profile",
-
-    supportsObject: function(object, type)
-    {
-        return object instanceof MemoryProfileCall;
-    },
-
-    inspectObject: function(call, context)
-    {
-        var sourceLink = this.getSourceLink(call);
-        Firebug.chrome.select(sourceLink);
-    },
-
-    getTooltip: function(call)
-    {
-        try
-        {
-            var fn = StackFrame.getFunctionName(call.script, call.context);
-            return FirebugReps.Func.getTooltip(fn, call.context);
-        }
-        catch (exc)
-        {
-            if (FBTrace.DBG_ERRORS)
-                FBTrace.sysout("profiler.getTooltip FAILS ", exc);
-        }
-    },
-
-    getContextMenuItems: function(call, target, context)
-    {
-        var fn = Wrapper.unwrapIValue(call.script.functionObject);
-        return FirebugReps.Func.getContextMenuItems(fn, call.script, context);
-    }
-});
-
-// ********************************************************************************************* //
-
-Firebug.MemoryProfiler.ProfileSummary = domplate(Firebug.Rep,
-{
-    tag:
-        TR({"class": "focusRow profileSummaryRow subFocusRow", "role": "row"},
-            TD({"class": "profileCell", "role": "presentation", colspan: 2},
-                Locale.$STR("firebug.Entire Session")
-            ),
-            FOR("column", "$object|getColumns",
-                TD({"class": "a11yFocus profileCell", "role": "gridcell", _sortValue: "$column"},
-                    "$column|getColumnLabel"
-                )
-            ),
-            TD({"class": "linkCell profileCell", "role": "presentation"})
-        ),
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    className: "profile",
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    getColumns: function(call)
-    {
-        return Firebug.MemoryProfiler.ProfileCall.getColumns(call);
-    },
-
-    getColumnLabel: function(call)
-    {
-        return Firebug.MemoryProfiler.ProfileCall.getColumnLabel(call);
-    }
-});
-
-} // END with Domplate
-
-// ********************************************************************************************* //
-// Private Functions
-
-function frameId(frame, depth)
-{
-    if (frame)
-        return frame.script.tag+"@"+frame.line;
-    else
-        return "noIdForNoframe";
-}
-
-// ********************************************************************************************* //
-// Registration
-
-Firebug.registerModule(Firebug.MemoryProfiler);
-Firebug.registerRep(Firebug.MemoryProfiler.ProfileCall);
-
-return Firebug.MemoryProfiler;
-
-// ********************************************************************************************* //
-});
diff --git a/content/firebug/console/performanceTiming.js b/content/firebug/console/performanceTiming.js
index 37ab122..c691f1f 100644
--- a/content/firebug/console/performanceTiming.js
+++ b/content/firebug/console/performanceTiming.js
@@ -2,6 +2,8 @@
 
 define([
     "firebug/firebug",
+    "firebug/chrome/module",
+    "firebug/chrome/rep",
     "firebug/lib/trace",
     "firebug/lib/domplate",
     "firebug/lib/object",
@@ -12,7 +14,7 @@ define([
     "firebug/lib/wrapper",
     "firebug/lib/css",
 ],
-function(Firebug, FBTrace, Domplate, Obj, Locale, Dom, Events, Str, Wrapper, Css) {
+function(Firebug, Module, Rep, FBTrace, Domplate, Obj, Locale, Dom, Events, Str, Wrapper, Css) {
 
 "use strict";
 
@@ -57,17 +59,17 @@ var {domplate, TABLE, THEAD, TH, TBODY, TR, TD, DIV, SPAN, FOR} = Domplate;
 // ********************************************************************************************* //
 // Module
 
-var PerformanceTimingModule = Obj.extend(Firebug.Module,
+var PerformanceTimingModule = Obj.extend(Module,
 {
     initialize: function(prefDomain, prefNames)
     {
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
         Firebug.Console.addListener(ConsoleListener);
     },
 
     shutdown: function()
     {
-        Firebug.Module.shutdown.apply(this, arguments);
+        Module.shutdown.apply(this, arguments);
         Firebug.Console.removeListener(ConsoleListener);
     },
 });
@@ -78,7 +80,7 @@ var PerformanceTimingModule = Obj.extend(Firebug.Module,
 /**
  * This template is used to render the timing waterfall graph.
  */
-var PerformanceTimingRep = domplate(Firebug.Rep,
+var PerformanceTimingRep = domplate(Rep,
 /** @lends PerformanceTimingRep */
 {
     className: "perfTiming",
@@ -154,7 +156,7 @@ var PerformanceTimingRep = domplate(Firebug.Rep,
  * Hovering mouse over the waterfall graph shows an infotip. This template is responsible
  * for rendering its content.
  */
-var PerfInfoTip = domplate(Firebug.Rep,
+var PerfInfoTip = domplate(Rep,
 /** @lends PerfInfoTip */
 {
     tableTag:
diff --git a/content/firebug/cookies/breakpoints.js b/content/firebug/cookies/breakpoints.js
index 52ebf2c..07c3359 100644
--- a/content/firebug/cookies/breakpoints.js
+++ b/content/firebug/cookies/breakpoints.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/rep",
     "firebug/lib/object",
     "firebug/lib/locale",
     "firebug/lib/string",
@@ -10,14 +11,16 @@ define([
     "firebug/lib/events",
     "firebug/cookies/cookieUtils"
 ],
-function(Obj, Locale, Str, Domplate, Dom, Css, Events, CookieUtils) {
+function(Rep, Obj, Locale, Str, Domplate, Dom, Css, Events, CookieUtils) {
 
-with (Domplate) {
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
 
-const panelName = "cookies";
+var panelName = "cookies";
+
+var {domplate, DIV, INPUT, SPAN} = Domplate;
 
 // ********************************************************************************************* //
 // Implementation
@@ -184,7 +187,7 @@ var Breakpoints =
 // ********************************************************************************************* //
 // Cookie Breakpoints
 
-Breakpoints.BreakpointTemplate = Domplate.domplate(Firebug.Rep,
+Breakpoints.BreakpointTemplate = Domplate.domplate(Rep,
 {
     inspectable: false,
 
@@ -404,4 +407,4 @@ Firebug.registerRep(Breakpoints.BreakpointTemplate);
 return Breakpoints;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/cookies/cookieModule.js b/content/firebug/cookies/cookieModule.js
index 3e9a39e..44d0221 100644
--- a/content/firebug/cookies/cookieModule.js
+++ b/content/firebug/cookies/cookieModule.js
@@ -1,6 +1,8 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/activableModule",
+    "firebug/chrome/rep",
     "firebug/lib/xpcom",
     "firebug/lib/object",
     "firebug/lib/locale",
@@ -34,16 +36,16 @@ define([
     "firebug/lib/url",
     "firebug/cookies/legacy",
 ],
-function(Xpcom, Obj, Locale, Domplate, Dom, Options, Persist, Str, Http, Css, Events, Arr,
-    BaseObserver, MenuUtils, CookieReps, CookieUtils, Cookier, Breakpoints, CookieObserver,
-    CookieClipboard, TabWatcher, HttpObserver, System, Cookie, CookiePermissions, EditCookie,
-    TraceListener, TraceModule, Firefox, Win, Url) {
-
-with (Domplate) {
+function(ActivableModule, Rep, Xpcom, Obj, Locale, Domplate, Dom, Options, Persist, Str, Http,
+    Css, Events, Arr, BaseObserver, MenuUtils, CookieReps, CookieUtils, Cookier, Breakpoints,
+    CookieObserver, CookieClipboard, TabWatcher, HttpObserver, System, Cookie, CookiePermissions,
+    EditCookie, TraceListener, TraceModule, Firefox, Win, Url) {
 
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, DIV, SPAN, TR, P, UL, A, BUTTON} = Domplate;
+
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 
@@ -87,7 +89,7 @@ Firebug.registerStylesheet("chrome://firebug/skin/cookies/cookies.css");
  * to control activity of Firebug panels in order to avoid (performance) expensive
  * features.
  */
-Firebug.CookieModule = Obj.extend(Firebug.ActivableModule,
+Firebug.CookieModule = Obj.extend(ActivableModule,
 /** @lends Firebug.CookieModule */
 {
     contexts: contexts,
@@ -114,7 +116,7 @@ Firebug.CookieModule = Obj.extend(Firebug.ActivableModule,
         this.panelName = panelName;
         this.description = Locale.$STR("cookies.modulemanager.description");
 
-        Firebug.ActivableModule.initialize.apply(this, arguments);
+        ActivableModule.initialize.apply(this, arguments);
 
         var permTooltip = Firebug.chrome.$("fcPermTooltip");
         permTooltip.fcEnabled = true;
@@ -157,7 +159,7 @@ Firebug.CookieModule = Obj.extend(Firebug.ActivableModule,
 
     initializeUI: function()
     {
-        Firebug.ActivableModule.initializeUI.apply(this, arguments);
+        ActivableModule.initializeUI.apply(this, arguments);
 
         // Append the styleesheet to a new console popup panel introduced in Firebug 1.6
         this.addStyleSheet(null);
@@ -207,7 +209,7 @@ Firebug.CookieModule = Obj.extend(Firebug.ActivableModule,
             FBTrace.sysout("cookies.cookieModule.registerObservers;");
     },
 
-    unregisterObservers: function(context)
+    unregisterObservers: function()
     {
         if (!this.observersRegistered)
         {
@@ -324,10 +326,10 @@ Firebug.CookieModule = Obj.extend(Firebug.ActivableModule,
 
         // The base class must be called after the context for Cookies panel is
         // properly initialized. The panel can be created inside this function
-        // (within Firebug.ActivableModule.enablePanel), which can result in
+        // (within ActivableModule.enablePanel), which can result in
         // calling CookiePanel.initialize method. This method directly calls
         // CookiePanel.refresh, which needs the context.cookies object ready.
-        Firebug.ActivableModule.initContext.apply(this, arguments);
+        ActivableModule.initContext.apply(this, arguments);
 
         // Unregister all observers if the panel is disabled.
         if (!this.isEnabled(context))
@@ -336,7 +338,7 @@ Firebug.CookieModule = Obj.extend(Firebug.ActivableModule,
 
     destroyContext: function(context)
     {
-        Firebug.ActivableModule.destroyContext.apply(this, arguments);
+        ActivableModule.destroyContext.apply(this, arguments);
 
         if (!context.cookies)
         {
@@ -560,7 +562,17 @@ Firebug.CookieModule = Obj.extend(Firebug.ActivableModule,
      */
     isEnabled: function(context)
     {
-        return Firebug.ActivableModule.isEnabled.apply(this, arguments);
+        return ActivableModule.isEnabled.apply(this, arguments);
+    },
+
+    hasContexts: function()
+    {
+        var ret = false;
+        TabWatcher.iterateContexts(function()
+        {
+            ret = true;
+        });
+        return ret;
     },
 
     /**
@@ -569,19 +581,17 @@ Firebug.CookieModule = Obj.extend(Firebug.ActivableModule,
      */
     onObserverChange: function(observer)
     {
-        if (this.hasObservers())
-            TabWatcher.iterateContexts(Firebug.CookieModule.registerObservers);
+        if (this.hasObservers() && this.hasContexts())
+            this.registerObservers();
         else
-            TabWatcher.iterateContexts(Firebug.CookieModule.unregisterObservers);
+            this.unregisterObservers();
 
         this.setStatus();
     },
 
     onSuspendFirebug: function()
     {
-        TabWatcher.iterateContexts(Firebug.CookieModule.unregisterObservers);
-
-        this.setStatus();
+        this.onObserverChange();
 
         if (FBTrace.DBG_COOKIES)
             FBTrace.sysout("cookies.onSuspendFirebug");
@@ -589,10 +599,7 @@ Firebug.CookieModule = Obj.extend(Firebug.ActivableModule,
 
     onResumeFirebug: function(context)
     {
-        if (Firebug.CookieModule.isAlwaysEnabled())
-            TabWatcher.iterateContexts(Firebug.CookieModule.registerObservers);
-
-        this.setStatus();
+        this.onObserverChange();
 
         if (FBTrace.DBG_COOKIES)
             FBTrace.sysout("cookies.onResumeFirebug");
@@ -639,7 +646,7 @@ Firebug.CookieModule = Obj.extend(Firebug.ActivableModule,
             return Locale.$STRF("cookies.HostEnable", [host]);
         }
 
-        return Firebug.ActivableModule.getMenuLabel.apply(this, arguments);
+        return ActivableModule.getMenuLabel.apply(this, arguments);
     },
 
     // xxxHonza: This method is overriden just to provide translated strings from
@@ -1159,7 +1166,7 @@ Firebug.CookieModule = Obj.extend(Firebug.ActivableModule,
  * @domplate Represents domplate template for cookie body that is displayed if
  * a cookie entry in the cookie list is expanded.
  */
-Firebug.CookieModule.NetInfoBody = domplate(Firebug.Rep,
+Firebug.CookieModule.NetInfoBody = domplate(Rep,
 /** @lends Firebug.CookieModule.NetInfoBody */
 {
     tag:
@@ -1436,4 +1443,4 @@ Firebug.registerActivableModule(Firebug.CookieModule);
 return Firebug.CookieModule;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/cookies/cookiePanel.js b/content/firebug/cookies/cookiePanel.js
index ce9b660..8af3abe 100644
--- a/content/firebug/cookies/cookiePanel.js
+++ b/content/firebug/cookies/cookiePanel.js
@@ -1,6 +1,8 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/activableModule",
+    "firebug/chrome/activablePanel",
     "firebug/lib/xpcom",
     "firebug/lib/object",
     "firebug/lib/locale",
@@ -24,15 +26,15 @@ define([
     "firebug/cookies/cookiePermissions",
     "firebug/cookies/cookieClipboard",
 ],
-function(Xpcom, Obj, Locale, Domplate, Dom, Options, Persist, Str, Http, Css, Events, Arr, Search,
-    MenuUtils, CookieReps, HeaderResizer, CookieObserver, CookieUtils, Cookie, Breakpoints,
-    CookiePermissions, CookieClipboard) {
-
-with (Domplate) {
+function(ActivableModule, ActivablePanel, Xpcom, Obj, Locale, Domplate, Dom, Options, Persist,
+    Str, Http, Css, Events, Arr, Search, MenuUtils, CookieReps, HeaderResizer, CookieObserver,
+    CookieUtils, Cookie, Breakpoints, CookiePermissions, CookieClipboard) {
 
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, DIV, TR, P, A} = Domplate;
+
 const Ci = Components.interfaces;
 
 // Cookies preferences
@@ -55,7 +57,7 @@ const panelName = "cookies";
  */
 function CookiePanel() {}
 
-CookiePanel.prototype = Obj.extend(Firebug.ActivablePanel,
+CookiePanel.prototype = Obj.extend(ActivablePanel,
 /** @lends CookiePanel */
 {
     name: panelName,
@@ -84,7 +86,7 @@ CookiePanel.prototype = Obj.extend(Firebug.ActivablePanel,
 
         this.onContextMenu = Obj.bind(this.onContextMenu, this);
 
-        Firebug.ActivablePanel.initialize.apply(this, arguments);
+        ActivablePanel.initialize.apply(this, arguments);
 
         Firebug.ConsolePanel.prototype.addListener(this);
 
@@ -243,12 +245,12 @@ CookiePanel.prototype = Obj.extend(Firebug.ActivablePanel,
 
     detach: function(oldChrome, newChrome)
     {
-        Firebug.ActivablePanel.detach.apply(this, arguments);
+        ActivablePanel.detach.apply(this, arguments);
     },
 
     reattach: function(doc)
     {
-        Firebug.ActivablePanel.reattach.apply(this, arguments);
+        ActivablePanel.reattach.apply(this, arguments);
     },
 
     clear: function()
@@ -268,7 +270,7 @@ CookiePanel.prototype = Obj.extend(Firebug.ActivablePanel,
         //
         // Firebug 1.6 removes Firebug.DisabledPanelPage, simplifies the activation
         // and the following code is not necessary any more.
-        if (Firebug.ActivableModule && Firebug.DisabledPanelPage)
+        if (ActivableModule && Firebug.DisabledPanelPage)
         {
             var shouldShow = Firebug.CookieModule.isEnabled(this.context);
             this.showToolbarButtons("fbCookieButtons", shouldShow);
@@ -378,7 +380,7 @@ CookiePanel.prototype = Obj.extend(Firebug.ActivablePanel,
         if (header)
             return CookieReps.CookieTable;
 
-        return Firebug.ActivablePanel.getPopupObject.apply(this, arguments);
+        return ActivablePanel.getPopupObject.apply(this, arguments);
     },
 
     findRepObject: function(cookie)
@@ -449,8 +451,8 @@ CookiePanel.prototype = Obj.extend(Firebug.ActivablePanel,
 
         if (FBTrace.DBG_COOKIES)
         {
-            FBTrace.sysout("cookies.breakOnNext; " + context.breakOnCookie + ", " +
-                context.getName());
+            FBTrace.sysout("cookies.breakOnNext; " + this.context.breakOnCookie + ", " +
+                this.context.getName());
         }
     },
 
@@ -588,4 +590,4 @@ Firebug.registerPanel(CookiePanel);
 return CookiePanel;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/cookies/cookiePanel.xul b/content/firebug/cookies/cookiePanel.xul
index 1235af0..49db5d0 100644
--- a/content/firebug/cookies/cookiePanel.xul
+++ b/content/firebug/cookies/cookiePanel.xul
@@ -19,7 +19,7 @@
     </commandset>
 
     <keyset id="mainKeyset">
-        <key id="key_firebug_removeAllCookies" key="o" modifiers="control,shift" command="cmd_firebug_cookieRemoveAll" class="fbOnlyKey"/>
+        <key id="key_firebug_removeAllCookies" key="o" modifiers="accel,shift" command="cmd_firebug_cookieRemoveAll" class="fbOnlyKey"/>
     </keyset>
 
     <!-- Firebug toolbar -->
diff --git a/content/firebug/cookies/cookieReps.js b/content/firebug/cookies/cookieReps.js
index ea82cbb..788dc30 100644
--- a/content/firebug/cookies/cookieReps.js
+++ b/content/firebug/cookies/cookieReps.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/rep",
     "firebug/lib/xpcom",
     "firebug/lib/object",
     "firebug/lib/locale",
@@ -24,15 +25,15 @@ define([
     "firebug/cookies/editCookie",
     "firebug/cookies/cookieClipboard",
 ],
-function(Xpcom, Obj, Locale, Domplate, Dom, Options, Persist, Str, Http, Css, Events, Arr, System,
-    BaseObserver, MenuUtils, CookieUtils, Cookie, Breakpoints, CookieEvents,
+function(Rep, Xpcom, Obj, Locale, Domplate, Dom, Options, Persist, Str, Http, Css, Events, Arr,
+    System, BaseObserver, MenuUtils, CookieUtils, Cookie, Breakpoints, CookieEvents,
     CookiePermissions, EditCookie, CookieClipboard) {
 
-with (Domplate) {
-
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, FOR, TAG, DIV, SPAN, TD, TR, TABLE, TBODY, P, LI, A} = Domplate;
+
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 
@@ -50,7 +51,7 @@ var CookieReps = {};
 /**
  * @domplate Basic template for Cookies panel UI.
  */
-CookieReps.Rep = domplate(Firebug.Rep,
+CookieReps.Rep = domplate(Rep,
 {
     getContextMenuItems: function(cookie, target, context)
     {
@@ -88,17 +89,17 @@ CookieReps.CookieRow = domplate(CookieReps.Rep,
                     DIV({"class": "cookieNameLabel cookieLabel"}, "$cookie|getName")
                 ),
                 TD({"class": "cookieValueCol cookieCol"},
-                    DIV({"class": "cookieValueLabel cookieLabel"}, 
+                    DIV({"class": "cookieValueLabel cookieLabel"},
                         SPAN("$cookie.cookie.value|getValue")
                     )
                 ),
                 TD({"class": "cookieRawValueCol cookieCol"},
-                    DIV({"class": "cookieRawValueLabel cookieLabel"}, 
+                    DIV({"class": "cookieRawValueLabel cookieLabel"},
                         SPAN("$cookie.cookie.rawValue|getValue")
                     )
                 ),
                 TD({"class": "cookieDomainCol cookieCol"},
-                    SPAN({"class": "cookieDomainLabel cookieLabel", onclick: "$onClickDomain"}, 
+                    SPAN({"class": "cookieDomainLabel cookieLabel", onclick: "$onClickDomain"},
                         "$cookie|getDomain")
                 ),
                 TD({"class": "cookieRawSizeCol cookieCol"},
@@ -576,7 +577,7 @@ CookieReps.CookieRow = domplate(CookieReps.Rep,
         var tab = Dom.getChildByClass(cookieInfoBody, "cookieInfoTabs",
             "cookieInfo" + tabName + "Tab");
 
-        // Don't select collapsed tabs. 
+        // Don't select collapsed tabs.
         if (tab && !Css.hasClass(tab, "collapsed"))
             return this.selectTab(tab);
 
@@ -624,7 +625,7 @@ CookieReps.CookieRow = domplate(CookieReps.Rep,
         var nextSibling = cookie.row.nextSibling;
         parent.removeChild(cookie.row);
 
-        var row = CookieReps.CookieRow.cookieTag.insertRows({cookies: [cookie]}, 
+        var row = CookieReps.CookieRow.cookieTag.insertRows({cookies: [cookie]},
             panel.table.lastChild.lastChild)[0];
 
         var opened = Css.hasClass(cookie.row, "opened");
@@ -750,13 +751,13 @@ CookieReps.CookieChanged = domplate(CookieReps.Rep,
     tag:
         DIV({"class": "cookieEvent", _repObject: "$object"},
         	SPAN(Locale.$STR("cookies.console.cookie"), " "),
-            SPAN({"class": "cookieNameLabel", onclick: "$onClick"}, 
-                "$object|getName", 
+            SPAN({"class": "cookieNameLabel", onclick: "$onClick"},
+                "$object|getName",
                 " "),
-            SPAN({"class": "cookieActionLabel"}, 
-                "$object|getAction", 
+            SPAN({"class": "cookieActionLabel"},
+                "$object|getAction",
                 ".  "),
-            SPAN({"class": "cookieValueLabel"}, 
+            SPAN({"class": "cookieValueLabel"},
                 "$object|getValue"),
             DIV({"class": "cookieDomainLabel", onclick: "$onClickDomain",
                 title: "$object|getOriginalURI"}, "$object|getDomain")
@@ -802,7 +803,7 @@ CookieReps.CookieChanged = domplate(CookieReps.Rep,
         var originalURI;
         if (activeCookie)
             originalURI = activeCookie.originalURI.spec;
-        else 
+        else
             originalURI = cookieEvent.rawHost;
 
         if (FBTrace.DBG_COOKIES)
@@ -810,7 +811,7 @@ CookieReps.CookieChanged = domplate(CookieReps.Rep,
             FBTrace.sysout("cookies.context.cookies.activeCookies[" + cookie.host + "]",
                 activeCookies);
 
-            FBTrace.sysout("cookies.Original URI for: " + CookieUtils.getCookieId(cookie) + 
+            FBTrace.sysout("cookies.Original URI for: " + CookieUtils.getCookieId(cookie) +
                 " is: " + originalURI, activeCookie);
         }
 
@@ -896,9 +897,9 @@ CookieReps.CookieRejected = domplate(CookieReps.Rep,
                                 "$object|getCookieList")
                         ),
                         TD(
-                            SPAN({"class": "cookieDomainLabel", onclick: "$onClickDomain"}, 
+                            SPAN({"class": "cookieDomainLabel", onclick: "$onClickDomain"},
                                 "$object|getDomain"),
-                            SPAN(" ") 
+                            SPAN(" ")
                         )
                     )
                 )
@@ -975,7 +976,7 @@ CookieReps.CookieCleared = domplate(CookieReps.Rep,
 });
 
 
-CookieReps.SizeInfoTip = domplate(Firebug.Rep,
+CookieReps.SizeInfoTip = domplate(Rep,
 {
     tag:
         TABLE({"class": "sizeInfoTip", "id": "cookiesSizeInfoTip", role:"presentation"},
@@ -1000,7 +1001,7 @@ CookieReps.SizeInfoTip = domplate(Firebug.Rep,
 
     formatNumber: function(size)
     {
-        return size.size && size.size >= 1024 ? "(" + Str.formatNumber(size.size) + " B)" : "";
+        return size.size && size.size >= 1024 ? "(" + size.size.toLocaleString() + " B)" : "";
     },
 
     render: function(cookie, parentNode)
@@ -1046,61 +1047,61 @@ CookieReps.CookieTable = domplate(CookieReps.Rep,
                     TD({id: "colValue", role: "columnheader",
                         "class": "cookieHeaderCell alphaValue a11yFocus"},
                         DIV({"class": "cookieHeaderCellBox",
-                            title: Locale.$STR("cookies.header.value.tooltip")}, 
+                            title: Locale.$STR("cookies.header.value.tooltip")},
                         Locale.$STR("cookies.header.value"))
                     ),
                     TD({id: "colRawValue", role: "columnheader",
                         "class": "cookieHeaderCell alphaValue a11yFocus"},
                         DIV({"class": "cookieHeaderCellBox",
-                            title: Locale.$STR("cookies.header.rawValue.tooltip")}, 
+                            title: Locale.$STR("cookies.header.rawValue.tooltip")},
                             Locale.$STR("cookies.header.rawValue"))
                     ),
                     TD({id: "colDomain", role: "columnheader",
                         "class": "cookieHeaderCell alphaValue a11yFocus"},
                         DIV({"class": "cookieHeaderCellBox",
-                            title: Locale.$STR("cookies.header.domain.tooltip")}, 
+                            title: Locale.$STR("cookies.header.domain.tooltip")},
                         Locale.$STR("cookies.header.domain"))
                     ),
                     TD({id: "colRawSize", role: "columnheader",
                         "class": "cookieHeaderCell a11yFocus"},
                         DIV({"class": "cookieHeaderCellBox",
-                            title: Locale.$STR("cookies.header.rawSize.tooltip")}, 
+                            title: Locale.$STR("cookies.header.rawSize.tooltip")},
                         Locale.$STR("cookies.header.rawSize"))
                     ),
                     TD({id: "colSize", role: "columnheader",
                         "class": "cookieHeaderCell a11yFocus"},
                         DIV({"class": "cookieHeaderCellBox",
-                            title: Locale.$STR("cookies.header.size.tooltip")}, 
+                            title: Locale.$STR("cookies.header.size.tooltip")},
                         Locale.$STR("cookies.header.size"))
                     ),
                     TD({id: "colPath", role: "columnheader",
                         "class": "cookieHeaderCell alphaValue a11yFocus"},
                         DIV({"class": "cookieHeaderCellBox",
-                            title: Locale.$STR("cookies.header.path.tooltip")}, 
+                            title: Locale.$STR("cookies.header.path.tooltip")},
                         Locale.$STR("cookies.header.path"))
                     ),
                     TD({id: "colExpires", role: "columnheader",
                         "class": "cookieHeaderCell a11yFocus"},
                         DIV({"class": "cookieHeaderCellBox",
-                            title: Locale.$STR("cookies.header.expires.tooltip")}, 
+                            title: Locale.$STR("cookies.header.expires.tooltip")},
                         Locale.$STR("cookies.header.expires"))
                     ),
                     TD({id: "colMaxAge", role: "columnheader",
                         "class": "cookieHeaderCell a11yFocus"},
                         DIV({"class": "cookieHeaderCellBox",
-                            title: Locale.$STR("cookies.header.maxAge.tooltip")}, 
+                            title: Locale.$STR("cookies.header.maxAge.tooltip")},
                         Locale.$STR("cookies.header.maxAge"))
                     ),
                     TD({id: "colHttpOnly", role: "columnheader",
                         "class": "cookieHeaderCell alphaValue a11yFocus"},
                         DIV({"class": "cookieHeaderCellBox",
-                            title: Locale.$STR("cookies.header.httponly.tooltip")}, 
+                            title: Locale.$STR("cookies.header.httponly.tooltip")},
                         Locale.$STR("cookies.header.httponly"))
                     ),
                     TD({id: "colSecurity", role: "columnheader",
                         "class": "cookieHeaderCell alphaValue a11yFocus"},
                         DIV({"class": "cookieHeaderCellBox",
-                            title: Locale.$STR("cookies.header.security.tooltip")}, 
+                            title: Locale.$STR("cookies.header.security.tooltip")},
                         Locale.$STR("cookies.header.security"))
                     )
                 )
@@ -1279,7 +1280,7 @@ CookieReps.CookieTable = domplate(CookieReps.Rep,
         items.push("-");
         items.push({
             label: Locale.$STR("net.header.Reset Header"),
-            nol10n: true, 
+            nol10n: true,
             command: Obj.bindFixed(this.onResetColumns, this, context)
         });
 
@@ -1407,7 +1408,7 @@ function checkList(panel)
         return;
 
     if (!panel || !this.panelNode)
-        return; 
+        return;
 
     var row = this.panelNode.getElementsByClassName("cookieRow")[0];
     while (row)
@@ -1443,5 +1444,4 @@ Firebug.registerRep(
 return CookieReps;
 
 // ********************************************************************************************* //
-}});
-
+});
diff --git a/content/firebug/cookies/legacy.js b/content/firebug/cookies/legacy.js
index 1eecdc1..092de8c 100644
--- a/content/firebug/cookies/legacy.js
+++ b/content/firebug/cookies/legacy.js
@@ -1,12 +1,13 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/lib/xpcom",
     "firebug/lib/locale",
     "firebug/chrome/window",
 ],
-function(Obj, Xpcom, Locale, Win) {
+function(Module, Obj, Xpcom, Locale, Win) {
 
 // ********************************************************************************************* //
 // Constants
@@ -21,11 +22,11 @@ var app = Xpcom.CCSV("@mozilla.org/toolkit/app-startup;1", "nsIAppStartup");
 // ********************************************************************************************* //
 // Module
 
-var CookieLegacy = Obj.extend(Firebug.Module,
+var CookieLegacy = Obj.extend(Module,
 {
     initialize: function(prefDomain, prefNames)
     {
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
 
         setTimeout(Obj.bind(this.onAlert, this), 1000);
     },
diff --git a/content/firebug/css/autoCompleter.js b/content/firebug/css/autoCompleter.js
new file mode 100644
index 0000000..467fc57
--- /dev/null
+++ b/content/firebug/css/autoCompleter.js
@@ -0,0 +1,197 @@
+/* See license.txt for terms of usage */
+
+define([
+    "firebug/firebug",
+    "firebug/lib/css",
+    "firebug/lib/fonts",
+    "firebug/lib/string",
+    "firebug/lib/array",
+    "firebug/css/cssModule",
+],
+function(Firebug, Css, Fonts, Str, Arr, CSSModule) {
+
+// ********************************************************************************************* //
+// CSS Auto-completer
+
+var CSSAutoCompleter =
+{
+    getPropertyRange: function(propName, value, offset)
+    {
+        if (propName == "font" || propName == "font-family")
+            return CSSModule.parseCSSFontFamilyValue(value, offset, propName);
+        else
+            return CSSModule.parseCSSValue(value, offset);
+    },
+
+    autoCompletePropertyName: function(nodeType, expr, cycle, out)
+    {
+        var ret = Css.getCSSPropertyNames(nodeType);
+        if (!cycle && expr)
+        {
+            // Make some good default suggestions.
+            var list = ["color", "clear", "display", "float", "overflow"];
+            for (var i = 0; i < list.length; ++i)
+            {
+                if (Str.hasPrefix(list[i], expr) && ret.indexOf(list[i]) !== -1)
+                {
+                    out.suggestion = list[i];
+                    break;
+                }
+            }
+        }
+        return ret;
+    },
+
+    autoCompletePropertyValue: function(nodeType, propName, preExpr, expr, postExpr, range, cycle, context, out)
+    {
+        if (expr.charAt(0) === "!")
+            return ["!important"];
+
+        var keywords;
+        if (range.type === "url")
+        {
+            // We can't complete urls yet.
+            return [];
+        }
+        else if (range.type === "fontFamily")
+        {
+            keywords = Css.cssKeywords["fontFamily"].slice();
+            if (context)
+            {
+                // Add the fonts used in this context (they might be inaccessible
+                // for this element, but probably aren't).
+                var fonts = Fonts.getFontsUsedInContext(context), ar = [];
+                for (var i = 0; i < fonts.length; i++)
+                    ar.push(fonts[i].CSSFamilyName);
+                keywords = Arr.sortUnique(keywords.concat(ar));
+            }
+
+            var q = expr.charAt(0), isQuoted = (q === '"' || q === "'");
+            if (!isQuoted)
+            {
+                // Default to ' quotes, unless " occurs somewhere.
+                q = (/"/.test(preExpr + postExpr) ? '"' : "'");
+            }
+
+            // Don't complete '.
+            if (expr.length <= 1 && isQuoted)
+                return [];
+
+            // When completing, quote fonts if the input is quoted; when
+            // cycling, quote them instead in the way the user seems to
+            // expect to have them quoted.
+            var reSimple = /^[a-z][a-z0-9-]*$/i;
+            var isComplex = !reSimple.test(expr.replace(/^['"]?|['"]?$/g, ""));
+            var quote = function(str)
+            {
+                if (!cycle || isComplex !== isQuoted)
+                    return (isQuoted ? q + str + q : str);
+                else
+                    return (reSimple.test(str) ? str : q + str + q);
+            };
+
+            keywords = keywords.slice();
+            for (var i = 0; i < keywords.length; ++i)
+            {
+                // Treat values starting with capital letters as font names
+                // that can be quoted.
+                var k = keywords[i];
+                if (k.charAt(0).toLowerCase() !== k.charAt(0))
+                    keywords[i] = quote(k);
+            }
+        }
+        else
+        {
+            var lowerProp = propName.toLowerCase(), avoid;
+            if (["background", "border", "font"].indexOf(lowerProp) !== -1)
+            {
+                if (cycle)
+                {
+                    // Cycle only within the same category, if possible.
+                    var cat = Css.getCSSShorthandCategory(nodeType, lowerProp, expr);
+                    if (cat)
+                        return (cat in Css.cssKeywords ? Css.cssKeywords[cat] : [cat]);
+                }
+                else
+                {
+                    // Avoid repeated properties. We assume the values to be solely
+                    // space-separated tokens, within a comma-separated part (like
+                    // for CSS3 multiple backgrounds). This is absolutely wrong, but
+                    // good enough in practice because non-tokens for which it fails
+                    // likely aren't in any category.
+                    // "background-position" and "background-repeat" values can occur
+                    // twice, so they are special-cased.
+                    avoid = [];
+                    var preTokens = preExpr.split(",").reverse()[0].split(" ");
+                    var postTokens = postExpr.split(",")[0].split(" ");
+                    var tokens = preTokens.concat(postTokens);
+                    for (var i = 0; i < tokens.length; ++i)
+                    {
+                        var cat = Css.getCSSShorthandCategory(nodeType, lowerProp, tokens[i]);
+                        if (cat && cat !== "position" && cat !== "bgRepeat")
+                            avoid.push(cat);
+                    }
+                }
+            }
+            keywords = Css.getCSSKeywordsByProperty(nodeType, propName, avoid);
+        }
+
+        // Add the magic inherit property, if it's sufficiently alone.
+        // XXX Firefox 19 also has "initial"
+        if (!preExpr)
+            keywords = keywords.concat(["inherit"]);
+
+        if (!cycle)
+        {
+            // Make some good default suggestions.
+            var list = ["white", "black", "solid", "outset", "repeat"];
+            for (var i = 0; i < list.length; ++i)
+            {
+                if (Str.hasPrefix(list[i], expr) && keywords.indexOf(list[i]) !== -1)
+                {
+                    out.suggestion = list[i];
+                    break;
+                }
+            }
+        }
+
+        return this.stripCompletedParens(keywords, postExpr);
+    },
+
+    getValuePropSeparator: function(propName, range)
+    {
+        // For non-multi-valued properties, fail (pre-completions don't make sense,
+        // and it's less risky).
+        if (!Css.multiValuedProperties.hasOwnProperty(propName))
+            return null;
+
+        if (range.type === "fontFamily")
+            return ",";
+        return " ";
+    },
+
+    stripCompletedParens: function(list, postExpr)
+    {
+        // Transform completions so that they don't add additional parentheses
+        // when ones already exist.
+        var c = postExpr.charAt(0), rem = 0;
+        if (c === "(")
+            rem = 2;
+        else if (c === ")")
+            rem = 1;
+        else
+            return list;
+        return list.map(function(cl)
+        {
+            return (cl.slice(-2) === "()" ? cl.slice(0, -rem) : cl);
+        });
+    },
+};
+
+// ********************************************************************************************* //
+// Registration
+
+return CSSAutoCompleter;
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/css/computedPanel.js b/content/firebug/css/computedPanel.js
index 91dbca6..f163628 100644
--- a/content/firebug/css/computedPanel.js
+++ b/content/firebug/css/computedPanel.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/panel",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/domplate",
@@ -20,52 +21,35 @@ define([
     "firebug/css/cssReps",
     "firebug/css/loadHandler",
 ],
-function(Obj, Firebug, Domplate, Locale, Events, Css, Dom, Xml, Url, Arr, SourceLink, Menu,
+function(Panel, Obj, Firebug, Domplate, Locale, Events, Css, Dom, Xml, Url, Arr, SourceLink, Menu,
     Options, Str, Persist, CSSModule, CSSInfoTip, LoadHandler) {
 
-with (Domplate) {
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
 
-const Cu = Components.utils;
+var Cu = Components.utils;
 
-const statusClasses = ["cssUnmatched", "cssParentMatch", "cssOverridden", "cssBestMatch"];
+var statusClasses = ["cssUnmatched", "cssParentMatch", "cssOverridden", "cssBestMatch"];
+
+var {domplate, FOR, TAG, DIV, H1, SPAN, TABLE, TBODY, TR, TD} = Domplate;
+
+//********************************************************************************************* //
+//Module Implementation
 
-// xxxHonza: shell we move this mess to lib?
 try
 {
-    // Firefox <= 22
-    // xxxHonza: broken by: https://bugzilla.mozilla.org/show_bug.cgi?id=855914
-    var scope = {};
-    Cu.import("resource:///modules/devtools/CssLogic.jsm", scope);
-    var CssLogic = scope.CssLogic;
+    // Firefox 24
+    // waiting for: https://bugzilla.mozilla.org/show_bug.cgi?id=867595
+    var scope = {}
+    Cu.import("resource://gre/modules/devtools/Loader.jsm", scope);
+    var {CssLogic} = scope.devtools.require("devtools/styleinspector/css-logic");
 }
-catch (err)
+catch (e)
 {
-    try
-    {
-        // Firefox 23
-        var scope = {}
-        Cu.import("resource:///modules/devtools/gDevTools.jsm", scope);
-        var {CssLogic} = scope.devtools.require("devtools/styleinspector/css-logic");
-    }
-    catch (err)
-    {
-        try
-        {
-            // Firefox 24
-            // waiting for: https://bugzilla.mozilla.org/show_bug.cgi?id=867595
-            var scope = {}
-            Cu.import("resource://gre/modules/devtools/Loader.jsm", scope);
-            var {CssLogic} = scope.devtools.require("devtools/styleinspector/css-logic");
-        }
-        catch (e)
-        {
-            if (FBTrace.DBG_ERRORS)
-                FBTrace.sysout("cssComputedPanel: EXCEPTION CssLogic is not available! " + e, e);
-        }
-    }
+    if (FBTrace.DBG_ERRORS)
+        FBTrace.sysout("cssComputedPanel: EXCEPTION CssLogic is not available! " + e, e);
 }
 
 // ********************************************************************************************* //
@@ -73,13 +57,13 @@ catch (err)
 
 function CSSComputedPanel() {}
 
-CSSComputedPanel.prototype = Obj.extend(Firebug.Panel,
+CSSComputedPanel.prototype = Obj.extend(Panel,
 {
     template: domplate(
     {
         computedStylesTag:
             DIV({"class": "a11yCSSView", role: "list", "aria-label":
-                Locale.$STR("aria.labels.computed styles")}),
+                Locale.$STR("a11y.labels.computed styles")}),
 
         groupedStylesTag:
             FOR("group", "$groups",
@@ -125,7 +109,7 @@ CSSComputedPanel.prototype = Obj.extend(Firebug.Panel,
                             TD({"class": "selectorName", role: "presentation"},
                                 "$selector.selector.text"),
                             TD({"class": "propValue", role: "presentation"},
-                                SPAN({"class": "stylePropValue"}, "$selector.value|formatValue")),
+                                SPAN({"class": "stylePropValue"}, "$selector|getAuthoredValue|formatValue")),
                             TD({"class": "styleSourceLink", role: "presentation"},
                                 TAG(FirebugReps.SourceLink.tag, {object: "$selector|getSourceLink"})
                             )
@@ -155,8 +139,8 @@ CSSComputedPanel.prototype = Obj.extend(Firebug.Panel,
             var line = selector.ruleLine;
             var selectorDef = selector.selector;
             // Dev tools API starting from FF 26.0 renamed the "_cssRule" property to "cssRule"
-            // (see issue 6609)  
-            // TODO: This check can be removed as soon as FF 26.0 is the minimum supported version 
+            // (see issue 6609)
+            // TODO: This check can be removed as soon as FF 26.0 is the minimum supported version
             var rule = selectorDef.cssRule ?
                 selectorDef.cssRule.domRule : selectorDef._cssRule._domRule;
 
@@ -167,6 +151,16 @@ CSSComputedPanel.prototype = Obj.extend(Firebug.Panel,
             return sourceLink;
         },
 
+        getAuthoredValue: function(selector)
+        {
+            if (Options.get("colorDisplay") !== "authored")
+                return selector.value;
+
+            var style = selector.selector.cssRule.domRule.style;
+            return style.getAuthoredPropertyValue ?
+                style.getAuthoredPropertyValue(selector.property) : selector.value;
+        },
+
         formatValue: function(value)
         {
             value = formatColor(value);
@@ -424,7 +418,7 @@ CSSComputedPanel.prototype = Obj.extend(Firebug.Panel,
 
         this.onClick = Obj.bind(this.onClick, this);
 
-        Firebug.Panel.initialize.apply(this, arguments);
+        Panel.initialize.apply(this, arguments);
     },
 
     destroy: function(state)
@@ -437,21 +431,21 @@ CSSComputedPanel.prototype = Obj.extend(Firebug.Panel,
 
         Firebug.CSSModule.removeListener(this);
 
-        Firebug.Panel.destroyNode.apply(this, arguments);
+        Panel.destroyNode.apply(this, arguments);
     },
 
     initializeNode: function(oldPanelNode)
     {
         Events.addEventListener(this.panelNode, "click", this.onClick, false);
 
-        Firebug.Panel.initializeNode.apply(this, arguments);
+        Panel.initializeNode.apply(this, arguments);
     },
 
     destroyNode: function()
     {
         Events.removeEventListener(this.panelNode, "click", this.onClick, false);
 
-        Firebug.Panel.destroyNode.apply(this, arguments);
+        Panel.destroyNode.apply(this, arguments);
     },
 
     show: function(state)
@@ -639,7 +633,12 @@ CSSComputedPanel.prototype = Obj.extend(Firebug.Panel,
             var propInfo = Firebug.getRepObject(target);
 
             var prop = propInfo.property;
-            var value = formatColor(propInfo.value);
+
+            var style = propInfo.selector ? propInfo.selector.cssRule.domRule.style : null;
+            var value = (Options.get("colorDisplay") === "authored" && style &&
+                    style.getAuthoredPropertyValue) ?
+                style.getAuthoredPropertyValue(propInfo.property) : formatColor(propInfo.value);
+
             var cssValue;
 
             if (prop == "font" || prop == "font-family")
@@ -707,7 +706,7 @@ CSSComputedPanel.prototype = Obj.extend(Firebug.Panel,
     onCSSInsertRule: function(styleSheet, cssText, ruleIndex)
     {
         // Force update, this causes updateSelection to be called.
-        // See {@link Firebug.Panel.select}
+        // See {@link Panel.select}
         this.selection = null;
     },
 
@@ -908,4 +907,4 @@ Firebug.registerPanel(CSSComputedPanel);
 return CSSComputedPanel;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/css/cssModule.js b/content/firebug/css/cssModule.js
index 68fcee4..8c1b4d3 100644
--- a/content/firebug/css/cssModule.js
+++ b/content/firebug/css/cssModule.js
@@ -1,19 +1,16 @@
 /* See license.txt for terms of usage */
 
 define([
-    "firebug/lib/object",
     "firebug/firebug",
-    "firebug/lib/xpcom",
-    "firebug/lib/events",
-    "firebug/lib/url",
     "firebug/lib/css",
-    "firebug/chrome/window",
-    "firebug/lib/xml",
+    "firebug/lib/events",
+    "firebug/lib/object",
     "firebug/lib/options",
-    "firebug/lib/array",
+    "firebug/lib/xpcom",
+    "firebug/chrome/module",
     "firebug/editor/editorSelector"
 ],
-function(Obj, Firebug, Xpcom, Events, Url, Css, Win, Xml, Options, Arr, EditorSelector) {
+function(Firebug, Css, Events, Obj, Options, Xpcom, Module, EditorSelector) {
 
 // ********************************************************************************************* //
 // Constants
@@ -28,7 +25,7 @@ const reRepeat = /no-repeat|repeat-x|repeat-y|repeat/;
 // ********************************************************************************************* //
 // CSS Module
 
-Firebug.CSSModule = Obj.extend(Firebug.Module, Firebug.EditorSelector,
+Firebug.CSSModule = Obj.extend(Module, Firebug.EditorSelector,
 {
     dispatchName: "cssModule",
 
@@ -389,6 +386,17 @@ Firebug.CSSModule = Obj.extend(Firebug.Module, Firebug.EditorSelector,
         return [
             "-",
             {
+                label: "computed.option.label.Colors_As_Authored",
+                tooltiptext: "computed.option.tip.Colors_As_Authored",
+                type: "radio",
+                name: "colorDisplay",
+                id: "colorDisplayAuthored",
+                command: function() {
+                    return Options.set("colorDisplay", "authored");
+                },
+                checked: Options.get("colorDisplay") == "authored"
+            },
+            {
                 label: "computed.option.label.Colors_As_Hex",
                 tooltiptext: "computed.option.tip.Colors_As_Hex",
                 type: "radio",
diff --git a/content/firebug/css/cssPanel.js b/content/firebug/css/cssPanel.js
index fec7930..9949c6b 100644
--- a/content/firebug/css/cssPanel.js
+++ b/content/firebug/css/cssPanel.js
@@ -1,6 +1,8 @@
 /* See license.txt for terms of usage */
+/*global define:1, Components:1*/
 
 define([
+    "firebug/chrome/panel",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/domplate",
@@ -15,34 +17,36 @@ define([
     "firebug/lib/search",
     "firebug/lib/string",
     "firebug/lib/array",
-    "firebug/lib/fonts",
     "firebug/lib/xml",
     "firebug/lib/persist",
     "firebug/lib/system",
     "firebug/chrome/menu",
     "firebug/lib/options",
+    "firebug/css/autoCompleter",
     "firebug/css/cssModule",
     "firebug/css/cssReps",
     "firebug/css/selectorEditor",
     "firebug/lib/trace",
     "firebug/css/cssPanelUpdater",
     "firebug/lib/wrapper",
+    "firebug/editor/baseEditor",
     "firebug/editor/editor",
-    "firebug/editor/editorSelector",
+    "firebug/editor/inlineEditor",
     "firebug/chrome/searchBox",
     "firebug/css/cssPanelMutationObserver",
 ],
-function(Obj, Firebug, Domplate, FirebugReps, Locale, Events, Url, SourceLink, Css, Dom, Win,
-    Search, Str, Arr, Fonts, Xml, Persist, System, Menu, Options, CSSModule, CSSInfoTip,
-    SelectorEditor, FBTrace, CSSPanelUpdater, Wrapper) {
-
-with (Domplate) {
+function(Panel, Obj, Firebug, Domplate, FirebugReps, Locale, Events, Url, SourceLink, Css, Dom,
+    Win, Search, Str, Arr, Xml, Persist, System, Menu, Options, CSSAutoCompleter, CSSModule,
+    CSSInfoTip, SelectorEditor, FBTrace, CSSPanelUpdater, Wrapper, BaseEditor, Editor,
+    InlineEditor, SearchBox) {
 
 // ********************************************************************************************* //
 // Constants
 
-const Cc = Components.classes;
-const Ci = Components.interfaces;
+var {domplate, FOR, TAG, DIV, SPAN, A, TEXTAREA} = Domplate;
+
+var Cc = Components.classes;
+var Ci = Components.interfaces;
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -348,12 +352,6 @@ var CSSStyleRuleTag = domplate(CSSDomplateBase,
 Firebug.CSSStyleRuleTag = CSSStyleRuleTag;
 
 // ********************************************************************************************* //
-
-const reSplitCSS = /(url\("?[^"\)]+?"?\))|(rgba?\([^)]*\)?)|(hsla?\([^)]*\)?)|(#[\dA-Fa-f]+)|(-?\d+(\.\d+)?(%|[a-z]{1,4})?)|"([^"]*)"?|'([^']*)'?|([^,\s\/!\(\)]+)|(!(.*)?)/;
-const reURL = /url\("?([^"\)]+)?"?\)/;
-const reRepeat = /no-repeat|repeat-x|repeat-y|repeat/;
-
-// ********************************************************************************************* //
 // CSSStyleSheetPanel (CSS Panel)
 
 /**
@@ -362,7 +360,7 @@ const reRepeat = /no-repeat|repeat-x|repeat-y|repeat/;
  * See more: https://getfirebug.com/wiki/index.php/CSS_Panel
  */
 Firebug.CSSStyleSheetPanel = function() {};
-Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
+Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Panel,
 /** @lends Firebug.CSSStyleSheetPanel */
 {
     name: "stylesheet",
@@ -396,7 +394,7 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
         this.onMouseUp = Obj.bind(this.onMouseUp, this);
         this.onClick = Obj.bind(this.onClick, this);
 
-        Firebug.Panel.initialize.apply(this, arguments);
+        Panel.initialize.apply(this, arguments);
 
         // Create an updater for asynchronous update (watching embedded iframe loads).
         var callback = this.updateDefaultLocation.bind(this);
@@ -414,7 +412,7 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
         if (this.updater)
             this.updater.destroy();
 
-        Firebug.Panel.destroy.apply(this, arguments);
+        Panel.destroy.apply(this, arguments);
     },
 
     initializeNode: function(oldPanelNode)
@@ -423,7 +421,7 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
         Events.addEventListener(this.panelNode, "mouseup", this.onMouseUp, false);
         Events.addEventListener(this.panelNode, "click", this.onClick, false);
 
-        Firebug.Panel.initializeNode.apply(this, arguments);
+        Panel.initializeNode.apply(this, arguments);
     },
 
     destroyNode: function()
@@ -432,7 +430,7 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
         Events.removeEventListener(this.panelNode, "mouseup", this.onMouseUp, false);
         Events.removeEventListener(this.panelNode, "click", this.onClick, false);
 
-        Firebug.Panel.destroyNode.apply(this, arguments);
+        Panel.destroyNode.apply(this, arguments);
     },
 
     show: function(state)
@@ -578,7 +576,7 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
             : this.location;
 
         this.stylesheetEditor.styleSheet = this.location;
-        Firebug.Editor.startEditing(this.panelNode, css, this.stylesheetEditor);
+        Editor.startEditing(this.panelNode, css, this.stylesheetEditor);
 
         //this.stylesheetEditor.scrollToLine(topmost.line, topmost.offset);
         this.stylesheetEditor.input.scrollTop = this.panelNode.scrollTop;
@@ -623,7 +621,7 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
         }
         else
         {
-            Firebug.Editor.stopEditing();
+            Editor.stopEditing();
         }
     },
 
@@ -864,7 +862,7 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
         var m;
         var props = [];
 
-        if (Firebug.expandShorthandProps)
+        if (Options.get("expandShorthandProps"))
         {
             var count = style.length-1;
             var index = style.length;
@@ -872,8 +870,9 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
             while (index--)
             {
                 var propName = style.item(count - index);
-                this.addProperty(propName, style.getPropertyValue(propName),
-                    !!style.getPropertyPriority(propName), false, inheritMode, props);
+                var value = getPropertyValue(style, propName);
+                this.addProperty(propName, value, !!style.getPropertyPriority(propName), false,
+                    inheritMode, props);
             }
         }
         else
@@ -888,9 +887,14 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
                 if(!m)
                     continue;
 
-                //var name = m[1], value = m[2], important = !!m[3];
                 if (m[2])
-                    this.addProperty(m[1], m[2], !!m[3], false, inheritMode, props);
+                {
+                    var name = m[1];
+                    var value = getPropertyValue(style, name);
+                    var important = !!m[3];
+
+                    this.addProperty(name, value, important, false, inheritMode, props);
+                }
             }
         }
 
@@ -1043,7 +1047,7 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
             styleRuleBox = styleRuleBox.getElementsByClassName("insertInto")[0];
         }
 
-        Firebug.Editor.insertRowForObject(styleRuleBox);
+        Editor.insertRowForObject(styleRuleBox);
     },
 
     addRelatedRule: function()
@@ -1071,7 +1075,7 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
             ruleBox = this.template.newRuleTag.append({}, container);
 
         var before = ruleBox.getElementsByClassName("insertBefore")[0];
-        Firebug.Editor.insertRow(before, "before");
+        Editor.insertRow(before, "before");
 
         // Auto-fill the selector field with something reasonable, like
         // ".some-class" or "#table td".
@@ -1110,19 +1114,19 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
 
         this.ruleEditor.setValue(autofill);
         this.ruleEditor.input.select();
-        Firebug.Editor.update(true);
+        Editor.update(true);
     },
 
     editMediaQuery: function(target)
     {
         var row = Dom.getAncestorByClass(target, "cssRule");
         var mediaQueryBox = Dom.getChildByClass(row, "cssMediaQuery");
-        Firebug.Editor.startEditing(mediaQueryBox);
+        Editor.startEditing(mediaQueryBox);
     },
 
     insertPropertyRow: function(row)
     {
-        Firebug.Editor.insertRowForObject(row);
+        Editor.insertRowForObject(row);
     },
 
     insertRule: function(row)
@@ -1137,18 +1141,18 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
                 this.template.tag.replace({rules: []}, this.panelNode);
 
             location = Dom.getChildByClass(this.panelNode, "cssSheet");
-            Firebug.Editor.insertRowForObject(location);
+            Editor.insertRowForObject(location);
         }
         else
         {
-            Firebug.Editor.insertRow(location, "before");
+            Editor.insertRow(location, "before");
         }
     },
 
     editPropertyRow: function(row)
     {
         var propValueBox = Dom.getChildByClass(row, "cssPropValue");
-        Firebug.Editor.startEditing(propValueBox);
+        Editor.startEditing(propValueBox);
     },
 
     deletePropertyRow: function(row)
@@ -1452,7 +1456,7 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
 
     getOptionsMenuItems: function()
     {
-        items = [
+        var items = [
              Menu.optionMenu("Expand_Shorthand_Properties", "expandShorthandProps",
              "css.option.tip.Expand_Shorthand_Properties")
         ];
@@ -1477,7 +1481,7 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
 
         if (target.nodeName == "TEXTAREA")
         {
-            items = Firebug.BaseEditor.getContextMenuItems();
+            items = BaseEditor.getContextMenuItems();
             items.push(
                 "-",
                 {
@@ -1566,7 +1570,10 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
             }
         }
 
-        if (!Url.isSystemStyleSheet(this.selection))
+        // Make sure this item always get appended for the Style panel (name == "css");
+        // it acts as a placeholder and gets replaced by other menu items.
+        // This is a bit of a hack.
+        if (this.name == "css" || !Url.isSystemStyleSheet(this.selection))
         {
             items.push(
                 "-",
@@ -1687,8 +1694,11 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
             var propNameNode = prop.getElementsByClassName("cssPropName").item(0);
             var propName = propNameNode.textContent.toLowerCase();
             var priority = styleRule.style.getPropertyPriority(propName);
-            var text = styleRule.style.getPropertyValue(propName) +
-                (priority ? " !" + priority : "");
+            var value = (Options.get("colorDisplay") === "authored" &&
+                    styleRule.style.getAuthoredPropertyValue) ?
+                styleRule.style.getAuthoredPropertyValue(propName) :
+                    styleRule.style.getPropertyValue(propName);
+            var text = value + (priority ? " !" + priority : "");
 
             if (text != "")
             {
@@ -1899,7 +1909,7 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
 
     searchOtherDocs: function(text, reverse)
     {
-        var scanRE = Firebug.Search.getTestingRegex(text);
+        var scanRE = SearchBox.getTestingRegex(text);
         function scanDoc(styleSheet) {
             // we don't care about reverse here as we are just looking for existence,
             // if we do have a result we will handle the reverse logic on display
@@ -1938,14 +1948,14 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
         if (this.currentSearch && text == this.currentSearch.text)
         {
             row = this.currentSearch.findNext(wrapSearch, false, reverse,
-                Firebug.Search.isCaseSensitive(text));
+                SearchBox.isCaseSensitive(text));
         }
         else
         {
             if (this.editing)
             {
                 this.currentSearch = new Search.TextSearch(this.stylesheetEditor.box);
-                row = this.currentSearch.find(text, reverse, Firebug.Search.isCaseSensitive(text));
+                row = this.currentSearch.find(text, reverse, SearchBox.isCaseSensitive(text));
 
                 if (row)
                 {
@@ -1965,12 +1975,12 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
             }
             else
             {
-                function findRow(node) {
+                var findRow = function(node) {
                     return node.nodeType == Node.ELEMENT_NODE ? node : node.parentNode;
-                }
+                };
 
                 this.currentSearch = new Search.TextSearch(this.panelNode, findRow);
-                row = this.currentSearch.find(text, reverse, Firebug.Search.isCaseSensitive(text));
+                row = this.currentSearch.find(text, reverse, SearchBox.isCaseSensitive(text));
             }
         }
 
@@ -2000,11 +2010,11 @@ Firebug.CSSStyleSheetPanel.prototype = Obj.extend(Firebug.Panel,
     getSearchOptionsMenuItems: function()
     {
         return [
-            Firebug.Search.searchOptionMenu("search.Case_Sensitive", "searchCaseSensitive",
+            SearchBox.searchOptionMenu("search.Case_Sensitive", "searchCaseSensitive",
                 "search.tip.Case_Sensitive"),
-            Firebug.Search.searchOptionMenu("search.Multiple_Files", "searchGlobal",
+            SearchBox.searchOptionMenu("search.Multiple_Files", "searchGlobal",
                 "search.tip.Multiple_Files"),
-            Firebug.Search.searchOptionMenu("search.Use_Regular_Expression",
+            SearchBox.searchOptionMenu("search.Use_Regular_Expression",
                 "searchUseRegularExpression", "search.tip.Use_Regular_Expression")
         ];
     },
@@ -2095,7 +2105,7 @@ function CSSEditor(doc)
     this.initializeInline(doc);
 }
 
-CSSEditor.prototype = domplate(Firebug.InlineEditor.prototype,
+CSSEditor.prototype = domplate(InlineEditor.prototype,
 {
     insertNewRow: function(target, insertWhere)
     {
@@ -2394,11 +2404,7 @@ CSSEditor.prototype = domplate(Firebug.InlineEditor.prototype,
 
         var propRow = Dom.getAncestorByClass(this.target, "cssProp");
         var propName = Dom.getChildByClass(propRow, "cssPropName").textContent.toLowerCase();
-
-        if (propName == "font" || propName == "font-family")
-            return CSSModule.parseCSSFontFamilyValue(value, offset, propName);
-        else
-            return CSSModule.parseCSSValue(value, offset);
+        return CSSAutoCompleter.getPropertyRange(propName, value, offset);
     },
 
     getAutoCompleteList: function(preExpr, expr, postExpr, range, cycle, context, out)
@@ -2414,23 +2420,7 @@ CSSEditor.prototype = domplate(Firebug.InlineEditor.prototype,
         else if (Css.hasClass(this.target, "cssPropName"))
         {
             var nodeType = Xml.getElementSimpleType(Firebug.getRepObject(this.target));
-            var ret = Css.getCSSPropertyNames(nodeType);
-
-            if (!cycle && expr)
-            {
-                // Make some good default suggestions.
-                var list = ["color", "clear", "display", "float", "overflow"];
-                for (var i = 0; i < list.length; ++i)
-                {
-                    if (Str.hasPrefix(list[i], expr) && ret.indexOf(list[i]) !== -1)
-                    {
-                        out.suggestion = list[i];
-                        break;
-                    }
-                }
-            }
-
-            return ret;
+            return CSSAutoCompleter.autoCompletePropertyName(nodeType, expr, cycle, out);
         }
         else if (Dom.getAncestorByClass(this.target, "cssDocumentRule") &&
                 !Css.hasClass(this.target, "cssPropValue"))
@@ -2449,122 +2439,12 @@ CSSEditor.prototype = domplate(Firebug.InlineEditor.prototype,
         }
         else
         {
-            if (expr.charAt(0) === "!")
-                return ["!important"];
-
             var row = Dom.getAncestorByClass(this.target, "cssProp");
             var propName = Dom.getChildByClass(row, "cssPropName").textContent;
             var nodeType = Xml.getElementSimpleType(Firebug.getRepObject(this.target));
 
-            var keywords;
-            if (range.type === "url")
-            {
-                // We can't complete urls yet.
-                return [];
-            }
-            else if (range.type === "fontFamily")
-            {
-                keywords = Css.cssKeywords["fontFamily"].slice();
-                if (this.panel && this.panel.context)
-                {
-                    // Add the fonts used in this context (they might be inaccessible
-                    // for this element, but probably aren't).
-                    var fonts = Fonts.getFontsUsedInContext(this.panel.context), ar = [];
-                    for (var i = 0; i < fonts.length; i++)
-                        ar.push(fonts[i].CSSFamilyName);
-                    keywords = Arr.sortUnique(keywords.concat(ar));
-                }
-
-                var q = expr.charAt(0), isQuoted = (q === '"' || q === "'");
-                if (!isQuoted)
-                {
-                    // Default to ' quotes, unless " occurs somewhere.
-                    q = (/"/.test(preExpr + postExpr) ? '"' : "'");
-                }
-
-                // Don't complete '.
-                if (expr.length <= 1 && isQuoted)
-                    return [];
-
-                // When completing, quote fonts if the input is quoted; when
-                // cycling, quote them instead in the way the user seems to
-                // expect to have them quoted.
-                var reSimple = /^[a-z][a-z0-9-]*$/i;
-                var isComplex = !reSimple.test(expr.replace(/^['"]?|['"]?$/g, ""));
-                var quote = function(str)
-                {
-                    if (!cycle || isComplex !== isQuoted)
-                        return (isQuoted ? q + str + q : str);
-                    else
-                        return (reSimple.test(str) ? str : q + str + q);
-                };
-
-                keywords = keywords.slice();
-                for (var i = 0; i < keywords.length; ++i)
-                {
-                    // Treat values starting with capital letters as font names
-                    // that can be quoted.
-                    var k = keywords[i];
-                    if (k.charAt(0).toLowerCase() !== k.charAt(0))
-                        keywords[i] = quote(k);
-                }
-            }
-            else
-            {
-                var lowerProp = propName.toLowerCase(), avoid;
-                if (["background", "border", "font"].indexOf(lowerProp) !== -1)
-                {
-                    if (cycle)
-                    {
-                        // Cycle only within the same category, if possible.
-                        var cat = Css.getCSSShorthandCategory(nodeType, lowerProp, expr);
-                        if (cat)
-                            return (cat in Css.cssKeywords ? Css.cssKeywords[cat] : [cat]);
-                    }
-                    else
-                    {
-                        // Avoid repeated properties. We assume the values to be solely
-                        // space-separated tokens, within a comma-separated part (like
-                        // for CSS3 multiple backgrounds). This is absolutely wrong, but
-                        // good enough in practice because non-tokens for which it fails
-                        // likely aren't in any category.
-                        // "background-position" and "background-repeat" values can occur
-                        // twice, so they are special-cased.
-                        avoid = [];
-                        var preTokens = preExpr.split(",").reverse()[0].split(" ");
-                        var postTokens = postExpr.split(",")[0].split(" ");
-                        var tokens = preTokens.concat(postTokens);
-                        for (var i = 0; i < tokens.length; ++i)
-                        {
-                            var cat = Css.getCSSShorthandCategory(nodeType, lowerProp, tokens[i]);
-                            if (cat && cat !== "position" && cat !== "bgRepeat")
-                                avoid.push(cat);
-                        }
-                    }
-                }
-                keywords = Css.getCSSKeywordsByProperty(nodeType, propName, avoid);
-            }
-
-            // Add the magic inherit property, if it's sufficiently alone.
-            // XXX Firefox 19 also has "initial"
-            if (!preExpr)
-                keywords = keywords.concat(["inherit"]);
-
-            if (!cycle)
-            {
-                // Make some good default suggestions.
-                var list = ["white", "black", "solid", "outset", "repeat"];
-                for (var i = 0; i < list.length; ++i)
-                {
-                    if (Str.hasPrefix(list[i], expr) && keywords.indexOf(list[i]) !== -1)
-                    {
-                        out.suggestion = list[i];
-                        break;
-                    }
-                }
-            }
-
-            return SelectorEditor.stripCompletedParens(keywords, postExpr);
+            return CSSAutoCompleter.autoCompletePropertyValue(nodeType, propName,
+                preExpr, expr, postExpr, range, cycle, context, out);
         }
     },
 
@@ -2573,16 +2453,9 @@ CSSEditor.prototype = domplate(Firebug.InlineEditor.prototype,
         if (!Css.hasClass(this.target, "cssPropValue"))
             return null;
 
-        // For non-multi-valued properties, fail (pre-completions don't make sense,
-        // and it's less risky).
         var row = Dom.getAncestorByClass(this.target, "cssProp");
         var propName = Dom.getChildByClass(row, "cssPropName").textContent;
-        if (!Css.multiValuedProperties.hasOwnProperty(propName))
-            return null;
-
-        if (range.type === "fontFamily")
-            return ",";
-        return " ";
+        return CSSAutoCompleter.getValuePropSeparator(propName, range);
     },
 
     autoCompleteAdjustSelection: function(value, offset)
@@ -2675,7 +2548,7 @@ CSSEditor.prototype = domplate(Firebug.InlineEditor.prototype,
                 }
             }
 
-            return Firebug.InlineEditor.prototype.doIncrementValue
+            return InlineEditor.prototype.doIncrementValue
                 .call(this, value, amt, offset, offsetEnd, info);
         }
 
@@ -2797,6 +2670,28 @@ CSSRuleEditor.prototype = domplate(SelectorEditor.prototype,
             return CSSStyleRuleTag.tag.insertAfter({rule: emptyRule}, target);
     },
 
+    beginEditing: function()
+    {
+        if (this.panel.name === "stylesheet" && this.panel.location)
+        {
+            this.doc = Css.getDocumentForStyleSheet(this.panel.location);
+        }
+        else if (this.panel.name === "css" && this.panel.selection)
+        {
+            this.doc = this.panel.selection.ownerDocument;
+        }
+        else
+        {
+            this.doc = this.panel.context.window.document;
+        }
+    },
+
+    endEditing: function()
+    {
+        this.doc = null;
+        return true;
+    },
+
     saveEdit: function(target, value, previousValue)
     {
         var context = this.panel.context;
@@ -2823,10 +2718,9 @@ CSSRuleEditor.prototype = domplate(SelectorEditor.prototype,
                 return;
 
             var cssRules = styleSheet.cssRules;
-            for (ruleIndex=0; ruleIndex<cssRules.length && searchRule!=cssRules[ruleIndex];
-                ruleIndex++)
-            {
-            }
+            ruleIndex = 0;
+            while (ruleIndex < cssRules.length && searchRule != cssRules[ruleIndex])
+                ruleIndex++;
 
             if (rule)
                 oldRule = searchRule;
@@ -2851,7 +2745,7 @@ CSSRuleEditor.prototype = domplate(SelectorEditor.prototype,
                 if (this.panel.name !== "css")
                     return;
 
-                var doc = this.panel.selection.ownerDocument.defaultView.document;
+                var doc = this.panel.selection.ownerDocument;
                 styleSheet = CSSModule.getDefaultStyleSheet(doc);
             }
 
@@ -2985,7 +2879,7 @@ function StyleSheetEditor(doc)
     this.input = this.box.firstChild;
 }
 
-StyleSheetEditor.prototype = domplate(Firebug.BaseEditor,
+StyleSheetEditor.prototype = domplate(BaseEditor,
 {
     multiLine: true,
 
@@ -3063,7 +2957,7 @@ StyleSheetEditor.prototype = domplate(Firebug.BaseEditor,
 
     onInput: function()
     {
-        Firebug.Editor.update();
+        Editor.update();
     },
 
     scrollToLine: function(line, offset)
@@ -3143,6 +3037,12 @@ function parsePriority(value)
     return {value: propValue, priority: priority};
 }
 
+function getPropertyValue(style, propName)
+{
+    return (Options.get("colorDisplay") === "authored" && style.getAuthoredPropertyValue) ?
+        style.getAuthoredPropertyValue(propName) : style.getPropertyValue(propName);
+}
+
 function formatColor(color)
 {
     switch (Options.get("colorDisplay"))
@@ -3189,15 +3089,14 @@ function getOriginalStyleSheetCSS(sheet, context)
 
 function getStyleSheetCSS(sheet, context)
 {
-    function beautify(css, indent)
+    function beautify(css, indentSize)
     {
-        var indent='\n'+Array(indent+1).join(' ');
-        var i=css.indexOf('{');
-        var match=css.substr(i+1).match(/(?:[^;\(]*(?:\([^\)]*?\))?[^;\(]*)*;?/g);
+        var indent = "\n" + Array(indentSize + 1).join(" ");
+        var i = css.indexOf("{");
+        var match = css.substr(i + 1).match(/(?:[^;\(]*(?:\([^\)]*?\))?[^;\(]*)*;?/g);
         match.pop();
         match.pop();
-        return css.substring(0, i+1) + indent
-                + match.sort().join(indent) + '\n}';
+        return css.substring(0, i + 1) + indent + match.sort().join(indent) + "\n}";
     }
 
     var cssRules = sheet.cssRules, css=[];
@@ -3210,7 +3109,7 @@ function getStyleSheetCSS(sheet, context)
             css.push(rule.cssText);
     }
 
-    return Css.rgbToHex(css.join('\n\n')) + '\n';
+    return Css.rgbToHex(css.join("\n\n")) + "\n";
 }
 
 function scrollSelectionIntoView(panel)
@@ -3237,4 +3136,4 @@ Firebug.registerPanel(Firebug.CSSStyleSheetPanel);
 return Firebug.CSSStyleSheetPanel;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/css/cssPanelMutationObserver.js b/content/firebug/css/cssPanelMutationObserver.js
index 9b895a4..b0a0b7c 100644
--- a/content/firebug/css/cssPanelMutationObserver.js
+++ b/content/firebug/css/cssPanelMutationObserver.js
@@ -2,10 +2,11 @@
 
 define([
     "firebug/firebug",
+    "firebug/chrome/module",
     "firebug/lib/trace",
     "firebug/lib/object",
 ],
-function(Firebug, FBTrace, Obj) {
+function(Firebug, Module, FBTrace, Obj) {
 
 "use strict"
 
@@ -30,7 +31,7 @@ var Ci = Components.interfaces;
  *
  * See issue 6582 for more details.
  */
-var CSSPanelMutationObserver = Obj.extend(Firebug.Module,
+var CSSPanelMutationObserver = Obj.extend(Module,
 /** @lends CSSPanelMutationObserver */
 {
     dispatchName: "CSSPanelMutationObserver",
@@ -40,7 +41,7 @@ var CSSPanelMutationObserver = Obj.extend(Firebug.Module,
 
     initialize: function()
     {
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
 
         // Register UI listeners, so we can get events about when the CSS panel
         // is visible and hidden.
@@ -49,7 +50,7 @@ var CSSPanelMutationObserver = Obj.extend(Firebug.Module,
 
     shutdown: function()
     {
-        Firebug.Module.shutdown.apply(this, arguments);
+        Module.shutdown.apply(this, arguments);
         Firebug.unregisterUIListener(this);
     },
 
diff --git a/content/firebug/css/cssPanelUpdater.js b/content/firebug/css/cssPanelUpdater.js
index 509693a..980061b 100644
--- a/content/firebug/css/cssPanelUpdater.js
+++ b/content/firebug/css/cssPanelUpdater.js
@@ -1,12 +1,13 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/trace",
     "firebug/lib/object",
     "firebug/lib/array",
     "firebug/chrome/window",
 ],
-function(FBTrace, Obj, Arr, Win) {
+function(Module, FBTrace, Obj, Arr, Win) {
 
 // ********************************************************************************************* //
 // Constants
@@ -151,7 +152,7 @@ CSSPanelUpdater.prototype =
 /**
  * @module Helper Module object for observing {@Firebug.TabWatcher} events.
  */
-var CSSPanelUpdaterModule = Obj.extend(Firebug.Module,
+var CSSPanelUpdaterModule = Obj.extend(Module,
 /** @lends CSSPanelUpdater */
 {
     dispatchName: "CSSPanelUpdaterModule",
diff --git a/content/firebug/css/cssReps.js b/content/firebug/css/cssReps.js
index 31400ec..88a6d30 100644
--- a/content/firebug/css/cssReps.js
+++ b/content/firebug/css/cssReps.js
@@ -13,11 +13,11 @@ define([
 ],
 function(Obj, InfoTip, Domplate, SourceLink, Locale, Dom, Css, Str, Fonts) {
 
-with (Domplate) {
-
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, FOR, DIV, TR, P, IMG, STYLE} = Domplate;
+
 const maxWidth = 100;
 const maxHeight = 80;
 
@@ -38,7 +38,7 @@ var CSSInfoTip = Obj.extend(InfoTip,
 
         imgTag:
             DIV({"class": "infoTipImageBox infoTipLoading"},
-                IMG({"class": "infoTipImage", src: "$urlValue", repeat: "$repeat",
+                IMG({"class": "infoTipImage", src: "$urlValue", "data-repeat": "$repeat",
                     onload: "$onLoadImage", onerror: "$onErrorImage"}),
                 DIV({"class": "infoTipBgImage", collapsed: true}),
                 DIV({"class": "infoTipCaption"})
@@ -65,8 +65,9 @@ var CSSInfoTip = Obj.extend(InfoTip,
             var caption = bgImg.nextSibling;
             var innerBox = img.parentNode;
 
-            var w = img.naturalWidth, h = img.naturalHeight;
-            var repeat = img.getAttribute("repeat");
+            var w = img.naturalWidth;
+            var h = img.naturalHeight;
+            var repeat = img.dataset.repeat;
 
             if (repeat == "repeat-x" || (w == 1 && h > 1))
             {
@@ -220,4 +221,4 @@ function getFontFaceCSS(font)
 return CSSInfoTip;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/css/selectorEditor.js b/content/firebug/css/selectorEditor.js
index 27fc5c1..7a0930e 100644
--- a/content/firebug/css/selectorEditor.js
+++ b/content/firebug/css/selectorEditor.js
@@ -2,14 +2,17 @@
 
 define([
     "firebug/firebug",
-    "firebug/lib/domplate",
-    "firebug/lib/locale",
+    "firebug/lib/array",
     "firebug/lib/css",
+    "firebug/lib/domplate",
     "firebug/lib/string",
-    "firebug/lib/array",
+    "firebug/chrome/window",
+    "firebug/editor/inlineEditor",
+    "firebug/css/autoCompleter",
 ],
-function(Firebug, Domplate, Locale, Css, Str, Arr) {
-with (Domplate) {
+function(Firebug, Arr, Css, Domplate, Str, Win, InlineEditor, CSSAutoCompleter) {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
@@ -21,8 +24,11 @@ const reSelectorChar = /[-_0-9a-zA-Z]/;
 
 function SelectorEditor() {}
 
-SelectorEditor.prototype = domplate(Firebug.InlineEditor.prototype,
+SelectorEditor.prototype = Domplate.domplate(InlineEditor.prototype,
 {
+    // 'null' means every document in the context.
+    doc: null,
+
     getAutoCompleteRange: function(value, offset)
     {
         // Find the word part of an identifier.
@@ -61,6 +67,9 @@ SelectorEditor.prototype = domplate(Firebug.InlineEditor.prototype,
                 return [];
         }
 
+        var preSelector = preExpr.split(",").reverse()[0].trimLeft();
+        var hasCombinator = (preSelector && " >+~".indexOf(preSelector.slice(-1)) !== -1);
+
         var includeTagNames = true;
         var includeIds = true;
         var includeClasses = true;
@@ -86,8 +95,8 @@ SelectorEditor.prototype = domplate(Firebug.InlineEditor.prototype,
             includeTagNames = false;
 
         var ret = [];
-
-        if (includeTagNames || includeIds || includeClasses)
+        var hasAnyElements = false;
+        var traverseDom = function(doc)
         {
             // Traverse the DOM to get the used ids/classes/tag names that
             // are relevant as continuations.
@@ -95,23 +104,13 @@ SelectorEditor.prototype = domplate(Firebug.InlineEditor.prototype,
             // actually used hides annoying things like 'b'/'i' when they
             // are not used, and works in other contexts than HTML.)
             // This isn't actually that bad, performance-wise.
-            var doc = context.window.document, els;
-            if (preExpr && " >+~".indexOf(preExpr.slice(-1)) === -1)
-            {
-                try
-                {
-                    var preSelector = preExpr.split(",").reverse()[0];
-                    els = doc.querySelectorAll(preSelector);
-                }
-                catch (exc)
-                {
-                    if (FBTrace.DBG_CSS)
-                        FBTrace.sysout("Invalid previous selector part \"" + preSelector + "\"", exc);
-                }
-            }
-            if (!els)
+            var els = null;
+            if (preSelector)
+                els = doc.querySelectorAll(preSelector + (hasCombinator ? "*" : ""));
+            else
                 els = doc.getElementsByTagName("*");
             els = [].slice.call(els);
+            hasAnyElements = hasAnyElements || (els.length > 0);
 
             if (includeTagNames)
             {
@@ -131,7 +130,6 @@ SelectorEditor.prototype = domplate(Firebug.InlineEditor.prototype,
                     if (e.id)
                         ids.push(e.id);
                 });
-                ids = Arr.sortUnique(ids);
                 ret.push.apply(ret, ids.map(function(cl)
                 {
                     return "#" + cl;
@@ -150,15 +148,35 @@ SelectorEditor.prototype = domplate(Firebug.InlineEditor.prototype,
                         classes.push.apply(classes, e.classList);
                     }
                 });
-                classes = Arr.sortUnique(classes);
                 ret.push.apply(ret, classes.map(function(cl)
                 {
                     return "." + cl;
                 }));
             }
+        };
+
+        try
+        {
+            if (this.doc)
+            {
+                traverseDom(this.doc);
+            }
+            else
+            {
+                Win.iterateWindows(context.window, function(win)
+                {
+                    traverseDom(win.document);
+                });
+            }
+        }
+        catch (exc)
+        {
+            if (FBTrace.DBG_CSS)
+                FBTrace.sysout("Invalid previous selector part \"" + preSelector + "\"", exc);
+            return [];
         }
 
-        if (includePseudoClasses)
+        if (includePseudoClasses && hasAnyElements)
         {
             // Add the pseudo-class-looking :before, :after.
             ret.push(
@@ -166,10 +184,10 @@ SelectorEditor.prototype = domplate(Firebug.InlineEditor.prototype,
                 ":before"
             );
 
-            ret.push.apply(ret, SelectorEditor.stripCompletedParens(Css.pseudoClasses, postExpr));
+            ret.push.apply(ret, CSSAutoCompleter.stripCompletedParens(Css.pseudoClasses, postExpr));
         }
 
-        if (includePseudoElements)
+        if (includePseudoElements && hasAnyElements)
         {
             ret.push.apply(ret, Css.pseudoElements);
         }
@@ -207,7 +225,7 @@ SelectorEditor.prototype = domplate(Firebug.InlineEditor.prototype,
         if (ret.indexOf(":hover") !== -1)
             out.suggestion = ":hover";
 
-        return ret.sort();
+        return Arr.sortUnique(ret);
     },
 
     getAutoCompletePropSeparator: function(range, expr, prefixOf)
@@ -226,27 +244,10 @@ SelectorEditor.prototype = domplate(Firebug.InlineEditor.prototype,
 });
 
 
-// Transform completions so that they don't add additional parentheses when
-// ones already exist.
-SelectorEditor.stripCompletedParens = function(list, postExpr)
-{
-    var c = postExpr.charAt(0), rem = 0;
-    if (c === "(")
-        rem = 2;
-    else if (c === ")")
-        rem = 1;
-    else
-        return list;
-    return list.map(function(cl)
-    {
-        return (cl.slice(-2) === "()" ? cl.slice(0, -rem) : cl);
-    });
-};
-
 // ********************************************************************************************* //
 // Registration
 
 return SelectorEditor;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/css/selectorModule.js b/content/firebug/css/selectorModule.js
index 0cc44c5..e869ce5 100644
--- a/content/firebug/css/selectorModule.js
+++ b/content/firebug/css/selectorModule.js
@@ -2,17 +2,18 @@
 
 define([
     "firebug/firebug",
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/lib/dom",
     "firebug/lib/locale",
     "firebug/chrome/menu"
 ],
-function(Firebug, Obj, Dom, Locale, Menu) {
+function(Firebug, Module, Obj, Dom, Locale, Menu) {
 
 // ********************************************************************************************* //
 // Module implementation
 
-var CSSSelectorsModule = Obj.extend(Firebug.Module,
+var CSSSelectorsModule = Obj.extend(Module,
 {
     dispatchName: "CSSSelectorsModule",
 
diff --git a/content/firebug/css/selectorPanel.js b/content/firebug/css/selectorPanel.js
index b7089e9..8ca7bbd 100644
--- a/content/firebug/css/selectorPanel.js
+++ b/content/firebug/css/selectorPanel.js
@@ -1,6 +1,8 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/panel",
+    "firebug/chrome/rep",
     "firebug/lib/trace",
     "firebug/lib/object",
     "firebug/lib/domplate",
@@ -11,19 +13,23 @@ define([
     "firebug/lib/events",
     "firebug/lib/persist",
     "firebug/css/selectorModule",
-    "firebug/css/selectorEditor"
+    "firebug/css/selectorEditor",
+    "firebug/editor/editor",
 ],
-function(FBTrace, Obj, Domplate, Locale, Win, Dom, Css, Events, Persist, CSSSelectorsModule,
-    SelectorEditor) {
+function(Panel, Rep, FBTrace, Obj, Domplate, Locale, Win, Dom, Css, Events, Persist,
+    CSSSelectorsModule, SelectorEditor, Editor) {
 
-with (Domplate) {
+// ********************************************************************************************* //
+// Constants
+
+var {domplate, FOR, TAG, DIV, SPAN, TD, TR, TABLE, TBODY, H1, P, A, BR, INPUT} = Domplate;
 
 // ********************************************************************************************* //
 // CSS Computed panel (HTML side panel)
 
 function CSSSelectorsPanel() {}
 
-CSSSelectorsPanel.prototype = Obj.extend(Firebug.Panel,
+CSSSelectorsPanel.prototype = Obj.extend(Panel,
 {
     template: domplate(
     {
@@ -77,7 +83,7 @@ CSSSelectorsPanel.prototype = Obj.extend(Firebug.Panel,
         {
             var target = event.currentTarget;
             var panel = Firebug.getElementPanel(target);
-            Firebug.Editor.startEditing(target, "");
+            Editor.startEditing(target, "");
         }
     }),
 
@@ -175,7 +181,7 @@ CSSSelectorsPanel.prototype = Obj.extend(Firebug.Panel,
         this.onClick = Obj.bind(this.onClick, this);
         this.onMutationObserve = this.onMutationObserve.bind(this);
 
-        Firebug.Panel.initialize.apply(this, arguments);
+        Panel.initialize.apply(this, arguments);
     },
 
     destroy: function(state)
@@ -186,19 +192,19 @@ CSSSelectorsPanel.prototype = Obj.extend(Firebug.Panel,
         state.groups = this.groups;
         Persist.persistObjects(this, state);
 
-        Firebug.Panel.destroyNode.apply(this, arguments);
+        Panel.destroyNode.apply(this, arguments);
     },
 
     initializeNode: function(oldPanelNode)
     {
-        Firebug.Panel.initializeNode.apply(this, arguments);
+        Panel.initializeNode.apply(this, arguments);
 
         Events.addEventListener(this.panelNode, "click", this.onClick, false);
     },
 
     destroyNode: function()
     {
-        Firebug.Panel.destroyNode.apply(this, arguments);
+        Panel.destroyNode.apply(this, arguments);
 
         Events.removeEventListener(this.panelNode, "click", this.onClick, false);
     },
@@ -388,7 +394,7 @@ function CSSSelectorsPanelEditor(doc)
     this.box = this.tag.replace({}, doc, this);
     this.input = this.box;
 
-    Firebug.InlineEditor.prototype.initialize.call(this);
+    SelectorEditor.prototype.initialize.call(this);
     this.tabNavigation = false;
     this.fixedWidth = true;
 }
@@ -398,7 +404,7 @@ CSSSelectorsPanelEditor.prototype = domplate(SelectorEditor.prototype,
     tag:
         INPUT({"class": "fixedWidthEditor selectorsPanelEditor a11yFocusNoTab",
             type: "text",
-            title: Locale.$STR("Selector"),
+            title: Locale.$STR("css.selector.tip.Selector"),
             oninput: "$onInput",
             onkeypress: "$onKeyPress"}
         ),
@@ -433,7 +439,7 @@ CSSSelectorsPanelEditor.prototype = domplate(SelectorEditor.prototype,
 
 // ********************************************************************************************* //
 
-var WarningTemplate = domplate(Firebug.Rep,
+var WarningTemplate = domplate(Rep,
 {
     noSelectionTag:
         DIV({"class": "selectorWarning noSelection"},
@@ -461,4 +467,4 @@ Firebug.registerPanel(CSSSelectorsPanel);
 return CSSSelectorsPanel;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/css/stylePanel.js b/content/firebug/css/stylePanel.js
index 94a9a61..3cfb267 100644
--- a/content/firebug/css/stylePanel.js
+++ b/content/firebug/css/stylePanel.js
@@ -27,11 +27,11 @@ function(Obj, Firebug, Firefox, Domplate, FirebugReps, Xpcom, Locale, Events, Ur
     SourceLink, Dom, Css, Xpath, Str, Fonts, Options, CSSModule, CSSStyleSheetPanel, Menu,
     LoadHandler) {
 
-with (Domplate) {
-
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, FOR, TAG, DIV, SPAN, TR, H1, P, UL, A} = Domplate;
+
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 const nsIDOMCSSStyleRule = Ci.nsIDOMCSSStyleRule;
@@ -972,4 +972,4 @@ Firebug.registerPanel(CSSStylePanel);
 return CSSStylePanel;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/debugger/debuggerLib.js b/content/firebug/debugger/debuggerLib.js
index 29dca0e..e8b5be2 100644
--- a/content/firebug/debugger/debuggerLib.js
+++ b/content/firebug/debugger/debuggerLib.js
@@ -13,8 +13,6 @@ function(FBTrace, Wrapper, Xpcom) {
 // ********************************************************************************************* //
 // Constants
 
-var Cc = Components.classes;
-var Ci = Components.interfaces;
 var Cu = Components.utils;
 
 var comparator = Xpcom.CCSV("@mozilla.org/xpcom/version-comparator;1", "nsIVersionComparator");
@@ -38,24 +36,13 @@ var DebuggerLib = {};
  *
  * @return {object} the unwrapped object, or the same primitive
  */
-DebuggerLib.unwrapDebuggeeValue = function(obj, global, dglobal)
+DebuggerLib.unwrapDebuggeeValue = function(obj)
 {
     // If not a debuggee object, return it immediately.
     if (typeof obj !== "object" || obj === null)
         return obj;
 
-    if (obj.unsafeDereference)
-        return Wrapper.unwrapObject(obj.unsafeDereference());
-
-    // Define a new property to get the debuggee value.
-    dglobal.defineProperty("_firebugUnwrappedDebuggerObject", {
-        value: obj,
-        writable: true,
-        configurable: true
-    });
-
-    // Get the debuggee value using the property through the unwrapped global object.
-    return global._firebugUnwrappedDebuggerObject;
+    return Wrapper.unwrapObject(obj.unsafeDereference());
 };
 
 /**
diff --git a/content/firebug/dom/domBasePanel.js b/content/firebug/dom/domBasePanel.js
index 3b3afbc..132f4cc 100644
--- a/content/firebug/dom/domBasePanel.js
+++ b/content/firebug/dom/domBasePanel.js
@@ -24,6 +24,7 @@ define([
     "firebug/dom/domMemberProvider",
     "firebug/dom/domEditor",
     "firebug/dom/domReps",
+    "firebug/chrome/panel",
     "firebug/chrome/panelActivation",
     "firebug/debugger/debuggerLib",
     "firebug/editor/editor",
@@ -34,7 +35,7 @@ define([
 ],
 function(Obj, Firebug, FirebugReps, Locale, Events, Wrapper, SourceLink, StackFrame,
     Dom, Css, Search, Str, Arr, Persist, ClosureInspector, ToggleBranch, System, Menu,
-    DOMMemberProvider, DOMEditor, DOMReps, PanelActivation, DebuggerLib) {
+    DOMMemberProvider, DOMEditor, DOMReps, Panel, PanelActivation, DebuggerLib) {
 
 "use strict";
 
@@ -53,7 +54,7 @@ Firebug.DOMBasePanel = function()
 }
 
 Firebug.DOMBasePanel.ToolboxPlate = DOMReps.ToolboxPlate;
-Firebug.DOMBasePanel.prototype = Obj.extend(Firebug.Panel,
+Firebug.DOMBasePanel.prototype = Obj.extend(Panel,
 /** lends Firebug.DOMBasePanel */
 {
     tag: DOMReps.DirTablePlate.tableTag,
@@ -70,17 +71,17 @@ Firebug.DOMBasePanel.prototype = Obj.extend(Firebug.Panel,
         this.pathIndex = -1;
         this.toggles = new ToggleBranch.ToggleBranch();
 
-        Firebug.Panel.initialize.apply(this, arguments);
+        Panel.initialize.apply(this, arguments);
     },
 
     initializeNode: function(node)
     {
-        Firebug.Panel.initializeNode.apply(this, arguments);
+        Panel.initializeNode.apply(this, arguments);
     },
 
     destroyNode: function()
     {
-        Firebug.Panel.destroyNode.apply(this, arguments);
+        Panel.destroyNode.apply(this, arguments);
     },
 
     destroy: function(state)
@@ -102,7 +103,7 @@ Firebug.DOMBasePanel.prototype = Obj.extend(Firebug.Panel,
         if (FBTrace.DBG_DOM)
             FBTrace.sysout("dom.destroy; state:", state);
 
-        Firebug.Panel.destroy.apply(this, arguments);
+        Panel.destroy.apply(this, arguments);
     },
 
     show: function(state)
@@ -848,7 +849,7 @@ Firebug.DOMBasePanel.prototype = Obj.extend(Firebug.Panel,
 
                 var type = typeof propValue;
                 if (type === "undefined" || type === "number" || type === "boolean")
-                    editValue = "" + propValue;
+                    editValue = String(propValue);
                 else if (type === "string")
                     editValue = "\"" + Str.escapeJS(propValue) + "\"";
                 else if (propValue === null)
@@ -859,7 +860,11 @@ Firebug.DOMBasePanel.prototype = Obj.extend(Firebug.Panel,
                     editValue = "this." + getRowName(row); // XXX "this." doesn't actually work
             }
 
-            Firebug.Editor.startEditing(row, editValue);
+            var selectionData = null;
+            if (type === "string")
+                selectionData = {start: 1, end: editValue.length-1};
+
+            Firebug.Editor.startEditing(row, editValue, null, selectionData);
         }
     },
 
@@ -1027,7 +1032,7 @@ function getRowOwnerObject(row)
 
 function getParentRow(row)
 {
-    var level = "" + (parseInt(row.getAttribute("level"), 10) - 1);
+    var level = String(parseInt(row.getAttribute("level"), 10) - 1);
     if (level === "-1")
         return;
     for (row = row.previousSibling; row; row = row.previousSibling)
diff --git a/content/firebug/dom/domBreakpointGroup.js b/content/firebug/dom/domBreakpointGroup.js
index 24cdb70..9debe35 100644
--- a/content/firebug/dom/domBreakpointGroup.js
+++ b/content/firebug/dom/domBreakpointGroup.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/rep",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/domplate",
@@ -13,13 +14,13 @@ define([
     "firebug/lib/array",
     "firebug/lib/persist",
 ],
-function(Obj, Firebug, Domplate, Locale, Events, Wrapper, Dom, Css, Str, Arr, Persist) {
-
-with (Domplate) {
+function(Rep, Obj, Firebug, Domplate, Locale, Events, Wrapper, Dom, Css, Str, Arr, Persist) {
 
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, TAG, DIV, SPAN, TR, P, A, INPUT} = Domplate;
+
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 
@@ -185,7 +186,7 @@ Breakpoint.prototype =
 
 // ********************************************************************************************* //
 
-var BreakpointRep = domplate(Firebug.Rep,
+var BreakpointRep = domplate(Rep,
 {
     inspectable: false,
 
@@ -306,5 +307,4 @@ Firebug.registerRep(BreakpointRep);
 return DOMBreakpointGroup;
 
 // ********************************************************************************************* //
-}});
-
+});
diff --git a/content/firebug/dom/domEditor.js b/content/firebug/dom/domEditor.js
index 0e88353..c756986 100644
--- a/content/firebug/dom/domEditor.js
+++ b/content/firebug/dom/domEditor.js
@@ -9,7 +9,13 @@ define([
     "firebug/console/autoCompleter",    // Firebug.JSEditor
 ],
 function(Firebug, Domplate, Events, Dom, Css) {
-with (Domplate) {
+
+"use strict";
+
+// ********************************************************************************************* //
+// Constants
+
+var {domplate, DIV, INPUT} = Domplate;
 
 // ********************************************************************************************* //
 // DOM Inline Editor
@@ -65,4 +71,4 @@ DOMEditor.prototype = domplate(Firebug.JSEditor.prototype,
 return DOMEditor;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/dom/domMemberProvider.js b/content/firebug/dom/domMemberProvider.js
index 6ebe621..48b1b11 100644
--- a/content/firebug/dom/domMemberProvider.js
+++ b/content/firebug/dom/domMemberProvider.js
@@ -176,7 +176,8 @@ DOMMemberProvider.prototype =
                     {
                         add("dom", domConstants);
                     }
-                    else if (Dom.isInlineEventHandler(name))
+                    else if (val === null && object instanceof EventTarget &&
+                        Dom.isInlineEventHandler(name))
                     {
                         add("user", domHandlers);
                     }
@@ -326,7 +327,7 @@ DOMMemberProvider.prototype =
 
         // Special case for "arguments", which is not enumerable by for...in statement
         // and so, Obj.hasProperties always returns false.
-        hasChildren = hasChildren || (!!value && isArguments(value));
+        hasChildren = hasChildren || (!!value && isArguments(value) && value.length > 0);
 
         if (valueType === "function" && !hasChildren)
         {
@@ -388,8 +389,8 @@ DOMMemberProvider.prototype =
         var o = this.getObjectView(object);
         if (o && !Dom.isDOMMember(object, name) && (XPCNativeWrapper.unwrap(object) !== object))
         {
-            var getter = o.__lookupGetter__(name);
-            var setter = o.__lookupSetter__(name);
+            var getter = (o.__lookupGetter__) ? o.__lookupGetter__(name) : null;
+            var setter = (o.__lookupSetter__) ? o.__lookupSetter__(name) : null;
 
             // both, getter and setter
             if (getter && setter)
@@ -504,15 +505,7 @@ DOMMemberProvider.prototype =
 
 function isArguments(obj)
 {
-    try
-    {
-        return isFinite(obj.length) && obj.length > 0 && typeof obj.callee === "function";
-    }
-    catch (exc)
-    {
-    }
-
-    return false;
+    return Object.prototype.toString.call(obj) === "[object Arguments]";
 }
 
 function isClassFunction(fn)
diff --git a/content/firebug/dom/domModule.js b/content/firebug/dom/domModule.js
index 8723990..dc888a7 100644
--- a/content/firebug/dom/domModule.js
+++ b/content/firebug/dom/domModule.js
@@ -1,11 +1,12 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/dom/domBreakpointGroup",
 ],
-function(Obj, Firebug, DOMBreakpointGroup) {
+function(Module, Obj, Firebug, DOMBreakpointGroup) {
 
 // ********************************************************************************************* //
 // Constants
@@ -16,13 +17,13 @@ const Ci = Components.interfaces;
 // ********************************************************************************************* //
 // DOM Module
 
-Firebug.DOMModule = Obj.extend(Firebug.Module,
+Firebug.DOMModule = Obj.extend(Module,
 {
     dispatchName: "domModule",
 
     initialize: function(prefDomain, prefNames)
     {
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
 
         if (Firebug.Debugger)
             Firebug.connection.addListener(this.DebuggerListener);
@@ -30,7 +31,7 @@ Firebug.DOMModule = Obj.extend(Firebug.Module,
 
     shutdown: function()
     {
-        Firebug.Module.shutdown.apply(this, arguments);
+        Module.shutdown.apply(this, arguments);
 
         if (Firebug.Debugger)
             Firebug.connection.removeListener(this.DebuggerListener);
diff --git a/content/firebug/dom/domReps.js b/content/firebug/dom/domReps.js
index 1e1de73..b7bac7a 100644
--- a/content/firebug/dom/domReps.js
+++ b/content/firebug/dom/domReps.js
@@ -4,6 +4,7 @@
 
 define([
     "firebug/firebug",
+    "firebug/chrome/rep",
     "firebug/lib/domplate",
     "firebug/chrome/reps",
     "firebug/lib/locale",
@@ -16,8 +17,8 @@ define([
     "firebug/dom/domModule",
     "firebug/dom/domMemberProvider",
 ],
-function(Firebug, D, FirebugReps, Locale, Events, Options, Dom, Css, Str, ToggleBranch,
-    DOMModule, DOMMemberProvider) {
+function(Firebug, Rep, Domplate, FirebugReps, Locale, Events, Options, Dom, Css, Str,
+    ToggleBranch, DOMModule, DOMMemberProvider) {
 
 "use strict";
 
@@ -27,12 +28,14 @@ function(Firebug, D, FirebugReps, Locale, Events, Options, Dom, Css, Str, Toggle
 const insertSliceSize = 18;
 const insertInterval = 40;
 
+var {domplate, TABLE, TBODY, TR, TD, DIV, SPAN, TAG, FOR} = Domplate;
+
 // ********************************************************************************************* //
 
 var WatchRowTag =
-    D.TR({"class": "watchNewRow", level: 0},
-        D.TD({"class": "watchEditCell", colspan: 3},
-            D.DIV({"class": "watchEditBox a11yFocusNoTab", role: "button", tabindex: "0",
+    TR({"class": "watchNewRow", level: 0},
+        TD({"class": "watchEditCell", colspan: 3},
+            DIV({"class": "watchEditBox a11yFocusNoTab", role: "button", tabindex: "0",
                 "aria-label": Locale.$STR("a11y.labels.press enter to add new watch expression")},
                     Locale.$STR("NewWatch")
             )
@@ -40,16 +43,16 @@ var WatchRowTag =
     );
 
 var SizerRow =
-    D.TR({role: "presentation"},
-        D.TD(),
-        D.TD({width: "30%"}),
-        D.TD({width: "70%"})
+    TR({role: "presentation"},
+        TD(),
+        TD({width: "30%"}),
+        TD({width: "70%"})
     );
 
-var DirTablePlate = D.domplate(Firebug.Rep,
+var DirTablePlate = domplate(Rep,
 {
     memberRowTag:
-        D.TR({"class": "memberRow $member.open $member.type\\Row", _domObject: "$member",
+        TR({"class": "memberRow $member.open $member.type\\Row", _domObject: "$member",
             $hasChildren: "$member.hasChildren",
             $cropped: "$member.value|isCropped",
             role: "presentation",
@@ -57,57 +60,57 @@ var DirTablePlate = D.domplate(Firebug.Rep,
             breakable: "$member.breakable",
             breakpoint: "$member.breakpoint",
             disabledBreakpoint: "$member.disabledBreakpoint"},
-            D.TD({"class": "memberHeaderCell"},
-                D.DIV({"class": "sourceLine memberRowHeader", onclick: "$onClickRowHeader"},
+            TD({"class": "memberHeaderCell"},
+                DIV({"class": "sourceLine memberRowHeader", onclick: "$onClickRowHeader"},
                     " "
                )
             ),
-            D.TD({"class": "memberLabelCell", style: "padding-left: $member.indent\\px",
+            TD({"class": "memberLabelCell", style: "padding-left: $member.indent\\px",
                 role: "presentation"},
-                D.DIV({"class": "memberLabel $member.type\\Label", title: "$member.title"},
-                    D.SPAN({"class": "memberLabelPrefix"}, "$member.prefix"),
-                    D.SPAN({title: "$member|getMemberNameTooltip"}, "$member.name")
+                DIV({"class": "memberLabel $member.type\\Label", title: "$member.title"},
+                    SPAN({"class": "memberLabelPrefix"}, "$member.prefix"),
+                    SPAN({title: "$member|getMemberNameTooltip"}, "$member.name")
                 )
             ),
-            D.TD({"class": "memberValueCell", $readOnly: "$member.readOnly",
+            TD({"class": "memberValueCell", $readOnly: "$member.readOnly",
                 role: "presentation"},
-                D.TAG("$member.tag", {object: "$member.value"})
+                TAG("$member.tag", {object: "$member.value"})
             )
         ),
 
     tag:
-        D.TABLE({"class": "domTable", cellpadding: 0, cellspacing: 0, onclick: "$onClick",
+        TABLE({"class": "domTable", cellpadding: 0, cellspacing: 0, onclick: "$onClick",
             _repObject: "$object", role: "tree",
-            "aria-label": Locale.$STR("aria.labels.dom properties")},
-            D.TBODY({role: "presentation"},
+            "aria-label": Locale.$STR("a11y.labels.dom properties")},
+            TBODY({role: "presentation"},
                 SizerRow,
-                D.FOR("member", "$object|memberIterator",
-                    D.TAG("$memberRowTag", {member: "$member"})
+                FOR("member", "$object|memberIterator",
+                    TAG("$memberRowTag", {member: "$member"})
                 )
             )
         ),
 
     watchTag:
-        D.TABLE({"class": "domTable", cellpadding: 0, cellspacing: 0,
+        TABLE({"class": "domTable", cellpadding: 0, cellspacing: 0,
                _toggles: "$toggles", _domPanel: "$domPanel", onclick: "$onClick", role: "tree"},
-            D.TBODY({role: "presentation"},
+            TBODY({role: "presentation"},
                 SizerRow,
                 WatchRowTag
             )
         ),
 
     tableTag:
-        D.TABLE({"class": "domTable", cellpadding: 0, cellspacing: 0,
+        TABLE({"class": "domTable", cellpadding: 0, cellspacing: 0,
             _toggles: "$toggles", _domPanel: "$domPanel", onclick: "$onClick",
             role: "tree", "aria-label": Locale.$STR("a11y.labels.dom_properties")},
-            D.TBODY({role: "presentation"},
+            TBODY({role: "presentation"},
                 SizerRow
             )
         ),
 
     rowTag:
-        D.FOR("member", "$members",
-            D.TAG("$memberRowTag", {member: "$member"})
+        FOR("member", "$members",
+            TAG("$memberRowTag", {member: "$member"})
         ),
 
     memberIterator: function(object)
@@ -121,7 +124,7 @@ var DirTablePlate = D.domplate(Firebug.Rep,
             name: Locale.$STR("firebug.dom.noChildren2"),
             type: "string",
             rowClass: "memberRow-string",
-            tag: Firebug.Rep.tag,
+            tag: Rep.tag,
             prefix: ""
         }];
     },
@@ -331,11 +334,11 @@ var DirTablePlate = D.domplate(Firebug.Rep,
     }
 });
 
-var ToolboxPlate = D.domplate(
+var ToolboxPlate = domplate(
 {
     tag:
-        D.DIV({"class": "watchToolbox", _domPanel: "$domPanel", onclick: "$onClick"},
-            D.SPAN({"class": "watchDeleteButton closeButton"})
+        DIV({"class": "watchToolbox", _domPanel: "$domPanel", onclick: "$onClick"},
+            SPAN({"class": "watchDeleteButton closeButton"})
         ),
 
     onClick: function(event)
diff --git a/content/firebug/editor/baseEditor.js b/content/firebug/editor/baseEditor.js
new file mode 100644
index 0000000..63ce3b5
--- /dev/null
+++ b/content/firebug/editor/baseEditor.js
@@ -0,0 +1,103 @@
+/* See license.txt for terms of usage */
+/*jshint unused:false*/
+/*global define:1*/
+
+define([
+    "firebug/firebug",
+    "firebug/lib/object",
+    "firebug/chrome/measureBox",
+],
+function(Firebug, Obj, MeasureBox) {
+
+// ********************************************************************************************* //
+// BaseEditor
+
+var BaseEditor = Obj.extend(MeasureBox,
+{
+    getInitialValue: function(target, value)
+    {
+        return value;
+    },
+
+    isEmptyValid: function(target)
+    {
+        return false;
+    },
+
+    getValue: function()
+    {
+    },
+
+    setValue: function(value)
+    {
+    },
+
+    show: function(target, panel, value, selectionData)
+    {
+    },
+
+    hide: function()
+    {
+    },
+
+    layout: function(forceAll)
+    {
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Support for context menus within inline editors.
+
+    getContextMenuItems: function(target)
+    {
+        var items = [];
+        items.push({label: "Cut", command: Obj.bind(this.onCommand, this, "cmd_cut")});
+        items.push({label: "Copy", command: Obj.bind(this.onCommand, this, "cmd_copy")});
+        items.push({label: "Paste", command: Obj.bind(this.onCommand, this, "cmd_paste")});
+        return items;
+    },
+
+    onCommand: function(command, cmdId)
+    {
+        var browserWindow = Firebug.chrome.window;
+
+        // Use the right browser window to get the current command controller (issue 4177).
+        var controller = browserWindow.document.commandDispatcher.getControllerForCommand(cmdId);
+        var enabled = controller.isCommandEnabled(cmdId);
+        if (controller && enabled)
+            controller.doCommand(cmdId);
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Editor Module listeners will get "onBeginEditing" just before this call
+
+    beginEditing: function(target, value)
+    {
+    },
+
+    // Editor Module listeners will get "onSaveEdit" just after this call
+    saveEdit: function(target, value, previousValue)
+    {
+    },
+
+    endEditing: function(target, value, cancel)
+    {
+        // Remove empty groups by default
+        return true;
+    },
+
+    cancelEditing: function(target, value)
+    {
+    },
+
+    insertNewRow: function(target, insertWhere)
+    {
+    },
+});
+
+
+Firebug.BaseEditor = BaseEditor;
+
+return BaseEditor;
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/editor/codemirror/html-hint-data.js b/content/firebug/editor/codemirror/html-hint-data.js
new file mode 100644
index 0000000..e3c6dbd
--- /dev/null
+++ b/content/firebug/editor/codemirror/html-hint-data.js
@@ -0,0 +1,364 @@
+/* See license.txt for terms of usage */
+
+define([
+],
+function() {
+
+"use strict";
+
+// ********************************************************************************************* //
+// Raw data about HTML taken from CodeMirror, available under MIT license:
+// https://github.com/marijnh/CodeMirror/blob/022bc2862faa2997/addon/hint/html-hint.js
+
+// START CodeMirror code
+
+var langs = "ab aa af ak sq am ar an hy as av ae ay az bm ba eu be bn bh bi bs br bg my ca ch ce ny zh cv kw co cr hr cs da dv nl dz en eo et ee fo fj fi fr ff gl ka de el gn gu ht ha he hz hi ho hu ia id ie ga ig ik io is it iu ja jv kl kn kr ks kk km ki rw ky kv kg ko ku kj la lb lg li ln lo lt lu lv gv mk mg ms ml mt mi mr mh mn na nv nb nd ne ng nn no ii nr oc oj cu om or os pa pi fa pl ps pt qu rm rn ro ru sa sc sd se sm sg sr gd sn si sk sl so st es su sw ss sv ta te tg th ti bo tk [...]
+var targets = ["_blank", "_self", "_top", "_parent"];
+var charsets = ["ascii", "utf-8", "utf-16", "latin1", "latin1"];
+var methods = ["get", "post", "put", "delete"];
+var encs = ["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"];
+var media = ["all", "screen", "print", "embossed", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "speech",
+"3d-glasses", "resolution [>][<][=] [X]", "device-aspect-ratio: X/Y", "orientation:portrait",
+"orientation:landscape", "device-height: [X]", "device-width: [X]"];
+var s = { attrs: {} }; // Simple tag, reused for a whole lot of tags
+
+var data = {
+    a: {
+        attrs: {
+            href: null, ping: null, type: null,
+            media: media,
+            target: targets,
+            hreflang: langs
+        }
+    },
+    abbr: s,
+    acronym: s,
+    address: s,
+    applet: s,
+    area: {
+        attrs: {
+            alt: null, coords: null, href: null, target: null, ping: null,
+            media: media, hreflang: langs, type: null,
+            shape: ["default", "rect", "circle", "poly"]
+        }
+    },
+    article: s,
+    aside: s,
+    audio: {
+        attrs: {
+            src: null, mediagroup: null,
+            crossorigin: ["anonymous", "use-credentials"],
+            preload: ["none", "metadata", "auto"],
+            autoplay: ["", "autoplay"],
+            loop: ["", "loop"],
+            controls: ["", "controls"]
+        }
+    },
+    b: s,
+    base: { attrs: { href: null, target: targets } },
+    basefont: s,
+    bdi: s,
+    bdo: s,
+    big: s,
+    blockquote: { attrs: { cite: null } },
+    body: s,
+    br: s,
+    button: {
+        attrs: {
+            form: null, formaction: null, name: null, value: null,
+            autofocus: ["", "autofocus"],
+            disabled: ["", "autofocus"],
+            formenctype: encs,
+            formmethod: methods,
+            formnovalidate: ["", "novalidate"],
+            formtarget: targets,
+            type: ["submit", "reset", "button"]
+        }
+    },
+    canvas: { attrs: { width: null, height: null } },
+    caption: s,
+    center: s,
+    cite: s,
+    code: s,
+    col: { attrs: { span: null } },
+    colgroup: { attrs: { span: null } },
+    command: {
+        attrs: {
+            type: ["command", "checkbox", "radio"],
+            label: null, icon: null, radiogroup: null, command: null, title: null,
+            disabled: ["", "disabled"],
+            checked: ["", "checked"]
+        }
+    },
+    data: { attrs: { value: null } },
+    datagrid: { attrs: { disabled: ["", "disabled"], multiple: ["", "multiple"] } },
+    datalist: { attrs: { data: null } },
+    dd: s,
+    del: { attrs: { cite: null, datetime: null } },
+    details: { attrs: { open: ["", "open"] } },
+    dfn: s,
+    dir: s,
+    div: s,
+    dl: s,
+    dt: s,
+    em: s,
+    embed: { attrs: { src: null, type: null, width: null, height: null } },
+    eventsource: { attrs: { src: null } },
+    fieldset: { attrs: { disabled: ["", "disabled"], form: null, name: null } },
+    figcaption: s,
+    figure: s,
+    font: s,
+    footer: s,
+    form: {
+        attrs: {
+            action: null, name: null,
+            "accept-charset": charsets,
+            autocomplete: ["on", "off"],
+            enctype: encs,
+            method: methods,
+            novalidate: ["", "novalidate"],
+            target: targets
+        }
+    },
+    frame: s,
+    frameset: s,
+    h1: s, h2: s, h3: s, h4: s, h5: s, h6: s,
+    head: {
+        attrs: {},
+        children: ["title", "base", "link", "style", "meta", "script", "noscript", "command"]
+    },
+    header: s,
+    hgroup: s,
+    hr: s,
+    html: {
+        attrs: { manifest: null },
+        children: ["head", "body"]
+    },
+    i: s,
+    iframe: {
+        attrs: {
+            src: null, srcdoc: null, name: null, width: null, height: null,
+            sandbox: ["allow-top-navigation", "allow-same-origin", "allow-forms", "allow-scripts"],
+            seamless: ["", "seamless"]
+        }
+    },
+    img: {
+        attrs: {
+            alt: null, src: null, ismap: null, usemap: null, width: null, height: null,
+            crossorigin: ["anonymous", "use-credentials"]
+        }
+    },
+    input: {
+        attrs: {
+            alt: null, dirname: null, form: null, formaction: null,
+            height: null, list: null, max: null, maxlength: null, min: null,
+            name: null, pattern: null, placeholder: null, size: null, src: null,
+            step: null, value: null, width: null,
+            accept: ["audio/*", "video/*", "image/*"],
+            autocomplete: ["on", "off"],
+            autofocus: ["", "autofocus"],
+            checked: ["", "checked"],
+            disabled: ["", "disabled"],
+            formenctype: encs,
+            formmethod: methods,
+            formnovalidate: ["", "novalidate"],
+            formtarget: targets,
+            multiple: ["", "multiple"],
+            readonly: ["", "readonly"],
+            required: ["", "required"],
+            type: ["hidden", "text", "search", "tel", "url", "email", "password", "datetime", "date", "month",
+            "week", "time", "datetime-local", "number", "range", "color", "checkbox", "radio",
+            "file", "submit", "image", "reset", "button"]
+        }
+    },
+    ins: { attrs: { cite: null, datetime: null } },
+    kbd: s,
+    keygen: {
+        attrs: {
+            challenge: null, form: null, name: null,
+            autofocus: ["", "autofocus"],
+            disabled: ["", "disabled"],
+            keytype: ["RSA"]
+        }
+    },
+    label: { attrs: { "for": null, form: null } },
+    legend: s,
+    li: { attrs: { value: null } },
+    link: {
+        attrs: {
+            href: null, type: null,
+            hreflang: langs,
+            media: media,
+            sizes: ["all", "16x16", "16x16 32x32", "16x16 32x32 64x64"]
+        }
+    },
+    map: { attrs: { name: null } },
+    mark: s,
+    menu: { attrs: { label: null, type: ["list", "context", "toolbar"] } },
+    meta: {
+        attrs: {
+            content: null,
+            charset: charsets,
+            name: ["viewport", "application-name", "author", "description", "generator", "keywords"],
+            "http-equiv": ["content-language", "content-type", "default-style", "refresh"]
+        }
+    },
+    meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } },
+    nav: s,
+    noframes: s,
+    noscript: s,
+    object: {
+        attrs: {
+            data: null, type: null, name: null, usemap: null, form: null, width: null, height: null,
+            typemustmatch: ["", "typemustmatch"]
+        }
+    },
+    ol: { attrs: { reversed: ["", "reversed"], start: null, type: ["1", "a", "A", "i", "I"] } },
+    optgroup: { attrs: { disabled: ["", "disabled"], label: null } },
+    option: { attrs: { disabled: ["", "disabled"], label: null, selected: ["", "selected"], value: null } },
+    output: { attrs: { "for": null, form: null, name: null } },
+    p: s,
+    param: { attrs: { name: null, value: null } },
+    pre: s,
+    progress: { attrs: { value: null, max: null } },
+    q: { attrs: { cite: null } },
+    rp: s,
+    rt: s,
+    ruby: s,
+    s: s,
+    samp: s,
+    script: {
+        attrs: {
+            type: ["text/javascript"],
+            src: null,
+            async: ["", "async"],
+            defer: ["", "defer"],
+            charset: charsets
+        }
+    },
+    section: s,
+    select: {
+        attrs: {
+            form: null, name: null, size: null,
+            autofocus: ["", "autofocus"],
+            disabled: ["", "disabled"],
+            multiple: ["", "multiple"]
+        }
+    },
+    small: s,
+    source: { attrs: { src: null, type: null, media: null } },
+    span: s,
+    strike: s,
+    strong: s,
+    style: {
+        attrs: {
+            type: ["text/css"],
+            media: media,
+            scoped: null
+        }
+    },
+    sub: s,
+    summary: s,
+    sup: s,
+    table: s,
+    tbody: s,
+    td: { attrs: { colspan: null, rowspan: null, headers: null } },
+    textarea: {
+        attrs: {
+            dirname: null, form: null, maxlength: null, name: null, placeholder: null,
+            rows: null, cols: null,
+            autofocus: ["", "autofocus"],
+            disabled: ["", "disabled"],
+            readonly: ["", "readonly"],
+            required: ["", "required"],
+            wrap: ["soft", "hard"]
+        }
+    },
+    tfoot: s,
+    th: { attrs: { colspan: null, rowspan: null, headers: null, scope: ["row", "col", "rowgroup", "colgroup"] } },
+    thead: s,
+    time: { attrs: { datetime: null } },
+    title: s,
+    tr: s,
+    track: {
+        attrs: {
+            src: null, label: null, "default": null,
+            kind: ["subtitles", "captions", "descriptions", "chapters", "metadata"],
+            srclang: langs
+        }
+    },
+    tt: s,
+    u: s,
+    ul: s,
+    "var": s,
+    video: {
+        attrs: {
+            src: null, poster: null, width: null, height: null,
+            crossorigin: ["anonymous", "use-credentials"],
+            preload: ["auto", "metadata", "none"],
+            autoplay: ["", "autoplay"],
+            mediagroup: ["movie"],
+            muted: ["", "muted"],
+            controls: ["", "controls"]
+        }
+    },
+    wbr: s
+};
+
+var globalAttrs = {
+    accesskey: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"],
+    "class": null,
+    contenteditable: ["true", "false"],
+    contextmenu: null,
+    dir: ["ltr", "rtl", "auto"],
+    draggable: ["true", "false", "auto"],
+    dropzone: ["copy", "move", "link", "string:", "file:"],
+    hidden: ["hidden"],
+    id: null,
+    inert: ["inert"],
+    itemid: null,
+    itemprop: null,
+    itemref: null,
+    itemscope: ["itemscope"],
+    itemtype: null,
+    lang: ["en", "es"],
+    spellcheck: ["true", "false"],
+    style: null,
+    tabindex: ["1", "2", "3", "4", "5", "6", "7", "8", "9"],
+    title: null,
+    translate: ["yes", "no"],
+    onclick: null,
+    rel: ["stylesheet", "alternate", "author", "bookmark", "help", "license", "next", "nofollow", "noreferrer", "prefetch", "prev", "search", "tag"]
+};
+
+// END CodeMirror code
+// ********************************************************************************************* //
+
+// Add some event handlers.
+[
+    "onload", "onabort", "onblur", "onchange", "onclick", "ondblclick",
+    "onerror", "onfocus", "onkeydown", "onkeypress", "onkeyup",
+    "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup",
+    "onreset", "onselect", "onsubmit", "onunload"
+].forEach(function(attr)
+{
+    globalAttrs[attr] = null;
+});
+
+// Tweak values a little.
+data.link.attrs.crossorigin = ["anonymous", "use-credentials"];
+data.meta.attrs["http-equiv"] = ["Content-Language", "Content-Type", "Default-Style", "Refresh"];
+globalAttrs.lang = langs;
+globalAttrs.tabindex = null;
+charsets.pop();
+delete data.iframe.attrs.seamless;
+
+// ********************************************************************************************* //
+
+return {
+    specificAttributes: data,
+    globalAttributes: globalAttrs,
+};
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/editor/editor.js b/content/firebug/editor/editor.js
index 1e87f79..bd7d527 100644
--- a/content/firebug/editor/editor.js
+++ b/content/firebug/editor/editor.js
@@ -1,19 +1,16 @@
 /* See license.txt for terms of usage */
 
 define([
-    "firebug/lib/object",
     "firebug/firebug",
-    "firebug/lib/domplate",
-    "firebug/lib/locale",
+    "firebug/lib/trace",
+    "firebug/lib/object",
     "firebug/lib/events",
-    "firebug/lib/css",
     "firebug/lib/dom",
     "firebug/lib/string",
     "firebug/lib/array",
-    "firebug/chrome/menu",
-    "firebug/trace/debug",
+    "firebug/chrome/module",
 ],
-function(Obj, Firebug, Domplate, Locale, Events, Css, Dom, Str, Arr, Menu, Debug) {
+function(Firebug, FBTrace, Obj, Events, Dom, Str, Arr, Module) {
 
 // ********************************************************************************************* //
 // Constants
@@ -23,6 +20,8 @@ const hugeChangeAmount = 100;
 const largeChangeAmount = 10;
 const smallChangeAmount = 0.1;
 
+var TraceError = FBTrace.to("DBG_ERRORS");
+
 // ********************************************************************************************* //
 // Globals
 
@@ -34,18 +33,15 @@ var currentEditor = null;
 
 var defaultEditor = null;
 
-var originalClassName = null;
-
 var originalValue = null;
 var defaultValue = null;
 var previousValue = null;
 
 var invalidEditor = false;
-var ignoreNextInput = false;
 
 // ********************************************************************************************* //
 
-Firebug.Editor = Obj.extend(Firebug.Module,
+Firebug.Editor = Obj.extend(Module,
 {
     supportsStopEvent: true,
 
@@ -60,9 +56,13 @@ Firebug.Editor = Obj.extend(Firebug.Module,
 
     startEditing: function(target, value, editor, selectionData)
     {
-        this.stopEditing();
+        // If target and currentTarget have the same group, make sure not to
+        // remove that group when editing stops.
+        var nextGroup = Dom.getAncestorByClass(target, "editGroup");
+        var sameGroup = (nextGroup === currentGroup);
+        this.stopEditing(false, sameGroup);
 
-        if (Css.hasClass(target, "insertBefore") || Css.hasClass(target, "insertAfter"))
+        if (target.classList.contains("insertBefore") || target.classList.contains("insertAfter"))
             return;
 
         var panel = Firebug.getElementPanel(target);
@@ -83,7 +83,7 @@ Firebug.Editor = Obj.extend(Firebug.Module,
         invalidEditor = false;
         currentTarget = target;
         currentPanel = panel;
-        currentGroup = Dom.getAncestorByClass(target, "editGroup");
+        currentGroup = nextGroup;
 
         currentPanel.editing = true;
 
@@ -92,10 +92,10 @@ Firebug.Editor = Obj.extend(Firebug.Module,
         if (!currentEditor)
             currentEditor = getDefaultEditor(currentPanel);
 
-        Css.setClass(panel.panelNode, "editing");
-        Css.setClass(target, "editing");
+        panel.panelNode.classList.add("editing");
+        target.classList.add("editing");
         if (currentGroup)
-            Css.setClass(currentGroup, "editing");
+            currentGroup.classList.add("editing");
 
         originalValue = previousValue = value = currentEditor.getInitialValue(target, value);
 
@@ -114,13 +114,14 @@ Firebug.Editor = Obj.extend(Firebug.Module,
         if (!currentTarget)
             return;
 
+        var value = currentEditor.getValue();
         Events.dispatch(currentPanel.fbListeners, "onInlineEditorClose", [currentPanel,
-            currentTarget, !originalValue]);
+            currentTarget, !value]);
 
         this.stopEditing();
     },
 
-    stopEditing: function(cancel)
+    stopEditing: function(cancel, noRemoveEmpty)
     {
         if (!currentTarget)
             return;
@@ -140,10 +141,10 @@ Firebug.Editor = Obj.extend(Firebug.Module,
 
         this.detachListeners(currentEditor, currentPanel.context);
 
-        Css.removeClass(currentPanel.panelNode, "editing");
-        Css.removeClass(currentTarget, "editing");
+        currentPanel.panelNode.classList.remove("editing");
+        currentTarget.classList.remove("editing");
         if (currentGroup)
-            Css.removeClass(currentGroup, "editing");
+            currentGroup.classList.remove("editing");
 
         var value = currentEditor.getValue();
         if (value == defaultValue)
@@ -160,8 +161,7 @@ Firebug.Editor = Obj.extend(Firebug.Module,
         }
         catch (exc)
         {
-            if (FBTrace.DBG_ERRORS)
-                FBTrace.sysout("editor.endEditing FAILS " + exc, exc);
+            TraceError.sysout("editor.endEditing FAILS " + exc, exc);
         }
 
         try
@@ -179,7 +179,7 @@ Firebug.Editor = Obj.extend(Firebug.Module,
                 if (removeGroup && !originalValue && currentGroup)
                     currentGroup.parentNode.removeChild(currentGroup);
             }
-            else if (!value)
+            else if (!value && !noRemoveEmpty)
             {
                 this.saveEditAndNotifyListeners(currentTarget, "", previousValue);
 
@@ -193,7 +193,7 @@ Firebug.Editor = Obj.extend(Firebug.Module,
         }
         catch (exc)
         {
-            Debug.ERROR(exc);
+            TraceError.sysout("Editor.stopEditing FAILS", exc);
         }
 
         try
@@ -271,8 +271,7 @@ Firebug.Editor = Obj.extend(Firebug.Module,
         }
         catch (exc)
         {
-            if (FBTrace.DBG_ERRORS)
-                FBTrace.sysout("editor.save FAILS "+exc, exc);
+            TraceError.sysout("Editor.save FAILS "+exc, exc);
         }
     },
 
@@ -291,9 +290,9 @@ Firebug.Editor = Obj.extend(Firebug.Module,
                 [currentPanel, currentTarget, true]);
             this.stopEditing();
         }
-        else if (Css.hasClass(element, "insertBefore"))
+        else if (element.classList.contains("insertBefore"))
             this.insertRow(element, "before");
-        else if (Css.hasClass(element, "insertAfter"))
+        else if (element.classList.contains("insertAfter"))
             this.insertRow(element, "after");
         else
             this.startEditing(element);
@@ -304,11 +303,14 @@ Firebug.Editor = Obj.extend(Firebug.Module,
         if (!currentTarget)
             return;
 
+        // If the value is empty, then jumping to a dependent editor doesn't
+        // make sense, so we instead skip out of the group.
         var value = currentEditor.getValue();
+        var skipEmptyGroup = (!value && currentGroup && !currentEditor.isEmptyValid(currentTarget));
         var nextEditable = currentTarget;
         do
         {
-            nextEditable = !value && currentGroup
+            nextEditable = skipEmptyGroup
                 ? getNextOutsider(nextEditable, currentGroup)
                 : Dom.getNextByClass(nextEditable, "editable");
         }
@@ -322,13 +324,10 @@ Firebug.Editor = Obj.extend(Firebug.Module,
         if (!currentTarget)
             return;
 
-        var value = currentEditor.getValue();
         var prevEditable = currentTarget;
         do
         {
-            prevEditable = !value && currentGroup
-                ? getPreviousOutsider(prevEditable, currentGroup)
-                : Dom.getPreviousByClass(prevEditable, "editable");
+            prevEditable = Dom.getPreviousByClass(prevEditable, "editable");
         }
         while (prevEditable && !prevEditable.offsetHeight);
 
@@ -351,7 +350,7 @@ Firebug.Editor = Obj.extend(Firebug.Module,
         if (!currentGroup)
             return;
 
-        var editable = Css.hasClass(currentGroup, "editable")
+        var editable = currentGroup.classList.contains("editable")
             ? currentGroup
             : Dom.getNextByClass(currentGroup, "editable");
 
@@ -481,7 +480,7 @@ Firebug.Editor = Obj.extend(Firebug.Module,
         this.onResize = Obj.bindFixed(this.onResize, this);
         this.onBlur = Obj.bind(this.onBlur, this);
 
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
     },
 
     disable: function()
@@ -501,600 +500,6 @@ Firebug.Editor = Obj.extend(Firebug.Module,
 });
 
 // ********************************************************************************************* //
-// BaseEditor
-
-Firebug.BaseEditor = Obj.extend(Firebug.MeasureBox,
-{
-    getInitialValue: function(target, value)
-    {
-        return value;
-    },
-
-    getValue: function()
-    {
-    },
-
-    setValue: function(value)
-    {
-    },
-
-    show: function(target, panel, value, selectionData)
-    {
-    },
-
-    hide: function()
-    {
-    },
-
-    layout: function(forceAll)
-    {
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // Support for context menus within inline editors.
-
-    getContextMenuItems: function(target)
-    {
-        var items = [];
-        items.push({label: "Cut", command: Obj.bind(this.onCommand, this, "cmd_cut")});
-        items.push({label: "Copy", command: Obj.bind(this.onCommand, this, "cmd_copy")});
-        items.push({label: "Paste", command: Obj.bind(this.onCommand, this, "cmd_paste")});
-        return items;
-    },
-
-    onCommand: function(command, cmdId)
-    {
-        var browserWindow = Firebug.chrome.window;
-
-        // Use the right browser window to get the current command controller (issue 4177).
-        var controller = browserWindow.document.commandDispatcher.getControllerForCommand(cmdId);
-        var enabled = controller.isCommandEnabled(cmdId);
-        if (controller && enabled)
-            controller.doCommand(cmdId);
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // Editor Module listeners will get "onBeginEditing" just before this call
-
-    beginEditing: function(target, value)
-    {
-    },
-
-    // Editor Module listeners will get "onSaveEdit" just after this call
-    saveEdit: function(target, value, previousValue)
-    {
-    },
-
-    endEditing: function(target, value, cancel)
-    {
-        // Remove empty groups by default
-        return true;
-    },
-
-    cancelEditing: function(target, value)
-    {
-    },
-
-    insertNewRow: function(target, insertWhere)
-    {
-    },
-});
-
-// ********************************************************************************************* //
-// InlineEditor
-
-Firebug.InlineEditor = function(doc)
-{
-    this.initializeInline(doc);
-};
-
-with (Domplate) {
-Firebug.InlineEditor.prototype = domplate(Firebug.BaseEditor,
-{
-    enterOnBlur: true,
-
-    tag:
-        DIV({"class": "inlineEditor"},
-            INPUT({"class": "textEditorInner", type: "text",
-                oninput: "$onInput", onkeypress: "$onKeyPress", onoverflow: "$onOverflow",
-                oncontextmenu: "$onContextMenu"}
-            )
-        ),
-
-    inputTag :
-        INPUT({"class": "textEditorInner", type: "text",
-            oninput: "$onInput", onkeypress: "$onKeyPress", onoverflow: "$onOverflow"}
-        ),
-
-    expanderTag:
-        SPAN({"class": "inlineExpander", style: "-moz-user-focus:ignore;opacity:0.5"}),
-
-    initialize: function()
-    {
-        this.fixedWidth = false;
-        this.completeAsYouType = true;
-        this.tabNavigation = true;
-        this.multiLine = false;
-        this.tabCompletion = false;
-        this.arrowCompletion = true;
-        this.noWrap = true;
-        this.numeric = false;
-    },
-
-    destroy: function()
-    {
-        this.destroyInput();
-    },
-
-    initializeInline: function(doc)
-    {
-        this.box = this.tag.replace({}, doc, this);
-        this.input = this.box.firstChild;
-        this.expander = this.expanderTag.replace({}, doc, this);
-        this.initialize();
-    },
-
-    destroyInput: function()
-    {
-        // XXXjoe Need to remove input/keypress handlers to avoid leaks
-    },
-
-    getValue: function()
-    {
-        return this.input.value;
-    },
-
-    setValue: function(value)
-    {
-        // It's only a one-line editor, so new lines shouldn't be allowed
-        return this.input.value = Str.stripNewLines(value);
-    },
-
-    setSelection: function(selectionData)
-    {
-        this.input.setSelectionRange(selectionData.start, selectionData.end);
-        // Ci.nsISelectionController SELECTION_NORMAL SELECTION_ANCHOR_REGION SCROLL_SYNCHRONOUS
-        this.input.QueryInterface(Components.interfaces.nsIDOMNSEditableElement)
-            .editor.selectionController.scrollSelectionIntoView(1, 0, 2);
-    },
-
-    show: function(target, panel, value, selectionData)
-    {
-        if (FBTrace.DBG_EDITOR)
-        {
-            FBTrace.sysout("Firebug.InlineEditor.show",
-                {target: target, panel: panel, value: value, selectionData: selectionData});
-        }
-
-        Events.dispatch(panel.fbListeners, "onInlineEditorShow", [panel, this]);
-        this.target = target;
-        this.panel = panel;
-
-        this.targetOffset = Dom.getClientOffset(target);
-
-        this.originalClassName = this.box.className;
-
-        var classNames = target.className.split(" ");
-        for (var i = 0; i < classNames.length; ++i)
-            Css.setClass(this.box, "editor-" + classNames[i]);
-
-        // remove error information
-        this.box.removeAttribute('saveSuccess');
-
-        // Make the editor match the target's font style
-        Css.copyTextStyles(target, this.box);
-
-        this.setValue(value);
-
-        this.getAutoCompleter().reset();
-
-        panel.panelNode.appendChild(this.box);
-        this.input.select();
-        if (selectionData) // transfer selection to input element
-            this.setSelection(selectionData);
-
-        // Insert the "expander" to cover the target element with white space
-        if (!this.fixedWidth)
-        {
-            this.startMeasuring(target);
-
-            Css.copyBoxStyles(target, this.expander);
-            target.parentNode.replaceChild(this.expander, target);
-            Dom.collapse(target, true);
-            this.expander.parentNode.insertBefore(target, this.expander);
-            this.textSize = this.measureInputText(value);
-        }
-
-        this.updateLayout(true);
-
-        Dom.scrollIntoCenterView(this.box, null, true);
-    },
-
-    hide: function()
-    {
-        if (FBTrace.DBG_EDITOR)
-            FBTrace.sysout("Firebug.InlineEditor.hide");
-
-        this.box.className = this.originalClassName;
-
-        if (!this.fixedWidth)
-        {
-            this.stopMeasuring();
-
-            Dom.collapse(this.target, false);
-
-            if (this.expander.parentNode)
-                this.expander.parentNode.removeChild(this.expander);
-        }
-
-        if (this.box.parentNode)
-        {
-            try { this.input.setSelectionRange(0, 0); } catch (exc) {}
-            this.box.parentNode.removeChild(this.box);
-        }
-
-        delete this.target;
-        delete this.panel;
-    },
-
-    layout: function(forceAll)
-    {
-        if (!this.fixedWidth)
-            this.textSize = this.measureInputText(this.input.value);
-
-        if (forceAll)
-            this.targetOffset = Dom.getClientOffset(this.expander);
-
-        this.updateLayout(false, forceAll);
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    beginEditing: function(target, value)
-    {
-    },
-
-    saveEdit: function(target, value, previousValue)
-    {
-    },
-
-    endEditing: function(target, value, cancel)
-    {
-        if (FBTrace.DBG_EDITOR)
-        {
-            FBTrace.sysout("Firebug.InlineEditor.endEditing",
-                {target: target, value: value, cancel: cancel});
-        }
-
-        // Remove empty groups by default
-        return true;
-    },
-
-    insertNewRow: function(target, insertWhere)
-    {
-    },
-
-    advanceToNext: function(target, charCode)
-    {
-        return false;
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    getAutoCompleteRange: function(value, offset)
-    {
-    },
-
-    getAutoCompleteList: function(preExpr, expr, postExpr)
-    {
-        return [];
-    },
-
-    getAutoCompletePropSeparator: function(range, expr, prefixOf)
-    {
-        return null;
-    },
-
-    autoCompleteAdjustSelection: function(value, offset)
-    {
-        return null;
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    getAutoCompleter: function()
-    {
-        if (!this.autoCompleter)
-        {
-            this.autoCompleter = new Firebug.AutoCompleter(false,
-                Obj.bind(this.getAutoCompleteRange, this),
-                Obj.bind(this.getAutoCompleteList, this),
-                Obj.bind(this.getAutoCompletePropSeparator, this),
-                Obj.bind(this.autoCompleteAdjustSelection, this));
-        }
-
-        return this.autoCompleter;
-    },
-
-    completeValue: function(amt)
-    {
-        if (this.getAutoCompleter().complete(currentPanel.context, this.input, amt, true))
-            Firebug.Editor.update(true);
-        else
-            this.incrementValue(amt);
-    },
-
-    incrementValue: function(amt)
-    {
-        var value = this.input.value;
-        var offset = this.input.selectionStart;
-        var offsetEnd = this.input.selectionEnd;
-
-        var newValue = this.doIncrementValue(value, amt, offset, offsetEnd);
-        if (!newValue)
-            return false;
-
-        this.input.value = newValue.value;
-        this.input.setSelectionRange(newValue.start, newValue.end);
-
-        Firebug.Editor.update(true);
-        return true;
-    },
-
-    incrementExpr: function(expr, amt, info)
-    {
-        var num = parseFloat(expr);
-        if (isNaN(num))
-            return null;
-
-        var m = /\d+(\.\d+)?/.exec(expr);
-        var digitPost = expr.substr(m.index+m[0].length);
-        var newValue = Math.round((num-amt)*1000)/1000; // avoid rounding errors
-
-        if (info && "minValue" in info)
-            newValue = Math.max(newValue, info.minValue);
-        if (info && "maxValue" in info)
-            newValue = Math.min(newValue, info.maxValue);
-
-        newValue = newValue.toString();
-
-        // Preserve trailing zeroes of small increments.
-        if (Math.abs(amt) < 1)
-        {
-            if (newValue.indexOf(".") === -1)
-                newValue += ".";
-            var dec = newValue.length - newValue.lastIndexOf(".") - 1;
-            var incDec = Math.abs(amt).toString().length - 2;
-            while (dec < incDec)
-            {
-                newValue += "0";
-                ++dec;
-            }
-        }
-
-        return newValue + digitPost;
-    },
-
-    doIncrementValue: function(value, amt, offset, offsetEnd, info)
-    {
-        // Try to find a number around the cursor to increment.
-        var start, end;
-        if (/^-?[0-9.]/.test(value.substring(offset, offsetEnd)) &&
-            !(info && /\d/.test(value.charAt(offset-1) + value.charAt(offsetEnd))))
-        {
-            // We have a number selected, possibly with a suffix, and we are not in
-            // the disallowed case of just part of a known number being selected.
-            // Use that number.
-            start = offset;
-            end = offsetEnd;
-        }
-        else
-        {
-            // Parse periods as belonging to the number only if we are in a known number
-            // context. (This makes incrementing the 1 in 'image1.gif' work.)
-            var pattern = "[" + (info ? "0-9." : "0-9") + "]*";
-
-            var before = new RegExp(pattern + "$").exec(value.substr(0, offset))[0].length;
-            var after = new RegExp("^" + pattern).exec(value.substr(offset))[0].length;
-            start = offset - before;
-            end = offset + after;
-
-            // Expand the number to contain an initial minus sign if it seems
-            // free-standing.
-            if (value.charAt(start-1) === "-" &&
-                (start-1 === 0 || /[ (:,='"]/.test(value.charAt(start-2))))
-            {
-                --start;
-            }
-        }
-
-        if (start !== end)
-        {
-            // Include percentages as part of the incremented number (they are
-            // common enough).
-            if (value.charAt(end) === "%")
-                ++end;
-
-            var first = value.substr(0, start);
-            var mid = value.substring(start, end);
-            var last = value.substr(end);
-            mid = this.incrementExpr(mid, amt, info);
-            if (mid !== null)
-            {
-                return {
-                    value: first + mid + last,
-                    start: start,
-                    end: start + mid.length
-                };
-            }
-        }
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    onKeyPress: function(event)
-    {
-        if (event.keyCode == KeyEvent.DOM_VK_ESCAPE && !this.completeAsYouType)
-        {
-            var reverted = this.getAutoCompleter().revert(this.input);
-            if (reverted)
-                Events.cancelEvent(event);
-        }
-        else if (event.keyCode == KeyEvent.DOM_VK_RIGHT && this.completeAsYouType)
-        {
-            if (this.getAutoCompleter().acceptCompletion(this.input))
-                Events.cancelEvent(event);
-        }
-        else if (event.charCode && this.advanceToNext(this.target, event.charCode))
-        {
-            Firebug.Editor.tabNextEditor();
-            Events.cancelEvent(event);
-        }
-        else if (this.numeric && event.charCode &&
-            !(event.ctrlKey || event.metaKey || event.altKey) &&
-            !(KeyEvent.DOM_VK_0 <= event.charCode && event.charCode <= KeyEvent.DOM_VK_9) &&
-            event.charCode !== KeyEvent.DOM_VK_INSERT && event.charCode !== KeyEvent.DOM_VK_DELETE)
-        {
-            Events.cancelEvent(event);
-        }
-        else if (event.keyCode == KeyEvent.DOM_VK_BACK_SPACE ||
-            event.keyCode == KeyEvent.DOM_VK_DELETE)
-        {
-            // If the user deletes text, don't autocomplete after the upcoming input event
-            this.ignoreNextInput = true;
-        }
-    },
-
-    onOverflow: function()
-    {
-        this.updateLayout(false, false, 3);
-    },
-
-    onInput: function()
-    {
-        if (this.ignoreNextInput)
-        {
-            this.ignoreNextInput = false;
-            this.getAutoCompleter().reset();
-        }
-        else if (this.completeAsYouType)
-            this.getAutoCompleter().complete(currentPanel.context, this.input, 0, false);
-        else
-            this.getAutoCompleter().reset();
-
-        Firebug.Editor.update();
-    },
-
-    onContextMenu: function(event)
-    {
-        Events.cancelEvent(event);
-
-        var popup = Firebug.chrome.$("fbInlineEditorPopup");
-        Dom.eraseNode(popup);
-
-        var target = event.target;
-        var items = this.getContextMenuItems(target);
-        if (items)
-            Menu.createMenuItems(popup, items);
-
-        if (!popup.firstChild)
-            return false;
-
-        popup.openPopupAtScreen(event.screenX, event.screenY, true);
-        return true;
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    updateLayout: function(initial, forceAll, extraWidth)
-    {
-        if (this.fixedWidth)
-        {
-            this.box.style.left = this.targetOffset.x + "px";
-            this.box.style.top = this.targetOffset.y + "px";
-
-            var w = this.target.offsetWidth;
-            var h = this.target.offsetHeight;
-            this.input.style.width = w + "px";
-            this.input.style.height = (h-3) + "px";
-        }
-        else
-        {
-            this.expander.textContent = this.input.value;
-
-            var clR = this.expander.getClientRects(),
-                wasWrapped = this.wrapped, inputWidth = Infinity;
-
-            if(clR.length == 1)
-            {
-                this.wrapped = false;
-            }
-            else if (clR.length == 2)
-            {
-                var w1 = clR[0].width;
-                var w2 = clR[1].width;
-
-                if (w2 > w1){
-                    this.wrapped = true;
-                    inputWidth = w2;
-                } else
-                    this.wrapped = false;
-            }
-            else if (clR.length == 3)
-            {
-                this.wrapped = true;
-                if (clR[2].width > 50)
-                    inputWidth = clR[1].width;
-            }
-            else if(clR.length > 3)
-            {
-                this.wrapped = true;
-            }
-
-            if(this.wrapped)
-            {
-                var fixupL = clR[1].left - clR[0].left;
-                    fixupT = clR[1].top - clR[0].top;
-            }
-            else
-            {
-                var fixupL = 0, fixupT = 0;
-                var approxTextWidth = this.textSize.width;
-                // Make the input one character wider than the text value so that
-                // typing does not ever cause the textbox to scroll
-                var charWidth = this.measureInputText('m').width;
-
-                // Sometimes we need to make the editor a little wider, specifically when
-                // an overflow happens, otherwise it will scroll off some text on the left
-                if (extraWidth)
-                    charWidth *= extraWidth;
-
-                var inputWidth = approxTextWidth + charWidth;
-            }
-
-
-            var container = currentPanel.panelNode;
-            var maxWidth = container.clientWidth - this.targetOffset.x - fixupL +
-                container.scrollLeft-6;
-
-            if(inputWidth > maxWidth)
-                inputWidth = maxWidth;
-
-            if (forceAll || initial || this.wrapped != wasWrapped)
-            {
-                this.box.style.left = (this.targetOffset.x + fixupL) + "px";
-                this.box.style.top = (this.targetOffset.y + fixupT) + "px";
-            }
-            this.input.style.width = inputWidth + "px";
-        }
-
-        if (forceAll)
-            Dom.scrollIntoCenterView(this.box, null, true);
-    }
-});
-};
-
-// ********************************************************************************************* //
 // Autocompletion
 
 Firebug.AutoCompleter = function(caseSensitive, getRange, evaluator, getNewPropSeparator,
@@ -1141,7 +546,7 @@ Firebug.AutoCompleter = function(caseSensitive, getRange, evaluator, getNewPropS
         lastIndex = null;
     };
 
-    this.acceptCompletion = function(textBox)
+    this.acceptCompletion = function(textBox, adjustData)
     {
         if (!adjustSelectionOnAccept)
             return false;
@@ -1152,10 +557,11 @@ Firebug.AutoCompleter = function(caseSensitive, getRange, evaluator, getNewPropS
         if (!candidates || value !== lastValue || offset !== lastOffset || offset >= offsetEnd)
             return false;
 
-        var ind = adjustSelectionOnAccept(value, offsetEnd);
+        var ind = adjustSelectionOnAccept(value, offsetEnd, adjustData);
         if (ind === null)
             return false;
 
+        Firebug.Editor.update();
         textBox.setSelectionRange(ind, ind);
         return true;
     };
@@ -1461,7 +867,7 @@ function getOutsider(element, group, stepper)
 function isGroupInsert(next, group)
 {
     return (!group || Dom.isAncestor(next, group))
-        && (Css.hasClass(next, "insertBefore") || Css.hasClass(next, "insertAfter"));
+        && (next.classList.contains("insertBefore") || next.classList.contains("insertAfter"));
 }
 
 function getNextOutsider(element, group)
@@ -1469,25 +875,6 @@ function getNextOutsider(element, group)
     return getOutsider(element, group, Obj.bind(Dom.getNextByClass, Dom, "editable"));
 }
 
-function getPreviousOutsider(element, group)
-{
-    return getOutsider(element, group, Obj.bind(Dom.getPreviousByClass, Dom, "editable"));
-}
-
-function getInlineParent(element)
-{
-    var lastInline = element;
-    for (; element; element = element.parentNode)
-    {
-        var s = element.ownerDocument.defaultView.getComputedStyle(element, "");
-        if (s.display != "inline")
-            return lastInline;
-        else
-            lastInline = element;
-    }
-    return null;
-}
-
 function insertTab()
 {
     Dom.insertTextIntoElement(currentEditor.input, Firebug.Editor.tabCharacter);
diff --git a/content/firebug/editor/inlineEditor.js b/content/firebug/editor/inlineEditor.js
new file mode 100644
index 0000000..fc3c66a
--- /dev/null
+++ b/content/firebug/editor/inlineEditor.js
@@ -0,0 +1,540 @@
+/* See license.txt for terms of usage */
+/*jshint unused:false*/
+/*global Components:1, define:1, KeyEvent:1*/
+
+define([
+    "firebug/firebug",
+    "firebug/lib/trace",
+    "firebug/lib/domplate",
+    "firebug/lib/events",
+    "firebug/lib/css",
+    "firebug/lib/dom",
+    "firebug/lib/string",
+    "firebug/chrome/menu",
+    "firebug/editor/baseEditor",
+    "firebug/editor/editor",
+],
+function(Firebug, FBTrace, Domplate, Events, Css, Dom, Str, Menu, BaseEditor, Editor) {
+
+// ********************************************************************************************* //
+// Constants
+
+var {domplate, DIV, SPAN, INPUT} = Domplate;
+
+var Ci = Components.interfaces;
+
+var Trace = FBTrace.to("DBG_EDITOR");
+
+// ********************************************************************************************* //
+// InlineEditor
+
+function InlineEditor(doc)
+{
+    this.initializeInline(doc);
+}
+
+InlineEditor.prototype = domplate(BaseEditor,
+{
+    enterOnBlur: true,
+
+    tag:
+        DIV({"class": "inlineEditor"},
+            INPUT({"class": "textEditorInner", type: "text",
+                oninput: "$onInput", onkeypress: "$onKeyPress", onoverflow: "$onOverflow",
+                oncontextmenu: "$onContextMenu"}
+            )
+        ),
+
+    inputTag :
+        INPUT({"class": "textEditorInner", type: "text",
+            oninput: "$onInput", onkeypress: "$onKeyPress", onoverflow: "$onOverflow"}
+        ),
+
+    expanderTag:
+        SPAN({"class": "inlineExpander", style: "-moz-user-focus:ignore;opacity:0.5"}),
+
+    initialize: function()
+    {
+        this.fixedWidth = false;
+        this.completeAsYouType = true;
+        this.tabNavigation = true;
+        this.multiLine = false;
+        this.tabCompletion = false;
+        this.arrowCompletion = true;
+        this.noWrap = true;
+        this.numeric = false;
+    },
+
+    destroy: function()
+    {
+        this.destroyInput();
+    },
+
+    initializeInline: function(doc)
+    {
+        this.box = this.tag.replace({}, doc, this);
+        this.input = this.box.firstChild;
+        this.expander = this.expanderTag.replace({}, doc, this);
+        this.initialize();
+    },
+
+    destroyInput: function()
+    {
+        // XXXjoe Need to remove input/keypress handlers to avoid leaks
+    },
+
+    getValue: function()
+    {
+        return this.input.value;
+    },
+
+    setValue: function(value)
+    {
+        // It's only a one-line editor, so new lines shouldn't be allowed
+        return this.input.value = Str.stripNewLines(value);
+    },
+
+    setSelection: function(selectionData)
+    {
+        this.input.setSelectionRange(selectionData.start, selectionData.end);
+        // Ci.nsISelectionController SELECTION_NORMAL SELECTION_ANCHOR_REGION SCROLL_SYNCHRONOUS
+        this.input.QueryInterface(Ci.nsIDOMNSEditableElement)
+            .editor.selectionController.scrollSelectionIntoView(1, 0, 2);
+    },
+
+    show: function(target, panel, value, selectionData)
+    {
+        Trace.sysout("InlineEditor.show",
+            {target: target, panel: panel, value: value, selectionData: selectionData});
+
+        Events.dispatch(panel.fbListeners, "onInlineEditorShow", [panel, this]);
+        this.target = target;
+        this.panel = panel;
+
+        this.targetOffset = Dom.getClientOffset(target);
+
+        this.originalClassName = this.box.className;
+
+        var classNames = target.className.split(" ");
+        for (var i = 0; i < classNames.length; ++i)
+            Css.setClass(this.box, "editor-" + classNames[i]);
+
+        // remove error information
+        this.box.removeAttribute('saveSuccess');
+
+        // Make the editor match the target's font style
+        Css.copyTextStyles(target, this.box);
+
+        this.setValue(value);
+
+        this.getAutoCompleter().reset();
+
+        panel.panelNode.appendChild(this.box);
+        this.input.select();
+        if (selectionData) // transfer selection to input element
+            this.setSelection(selectionData);
+
+        // Insert the "expander" to cover the target element with white space
+        if (!this.fixedWidth)
+        {
+            this.startMeasuring(target);
+
+            Css.copyBoxStyles(target, this.expander);
+            target.parentNode.replaceChild(this.expander, target);
+            Dom.collapse(target, true);
+            this.expander.parentNode.insertBefore(target, this.expander);
+            this.textSize = this.measureInputText(value);
+        }
+
+        this.updateLayout(true);
+
+        Dom.scrollIntoCenterView(this.box, null, true);
+    },
+
+    hide: function()
+    {
+        Trace.sysout("InlineEditor.hide");
+
+        this.box.className = this.originalClassName;
+
+        if (!this.fixedWidth)
+        {
+            this.stopMeasuring();
+
+            Dom.collapse(this.target, false);
+
+            if (this.expander.parentNode)
+                this.expander.parentNode.removeChild(this.expander);
+        }
+
+        if (this.box.parentNode)
+        {
+            try { this.input.setSelectionRange(0, 0); } catch (exc) {}
+            this.box.parentNode.removeChild(this.box);
+        }
+
+        this.target = null;
+        this.panel = null;
+    },
+
+    layout: function(forceAll)
+    {
+        if (!this.fixedWidth)
+            this.textSize = this.measureInputText(this.input.value);
+
+        if (forceAll)
+            this.targetOffset = Dom.getClientOffset(this.expander);
+
+        this.updateLayout(false, forceAll);
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+    beginEditing: function(target, value)
+    {
+    },
+
+    saveEdit: function(target, value, previousValue)
+    {
+    },
+
+    endEditing: function(target, value, cancel)
+    {
+        Trace.sysout("InlineEditor.endEditing",
+            {target: target, value: value, cancel: cancel});
+
+        // Remove empty groups by default
+        return true;
+    },
+
+    insertNewRow: function(target, insertWhere)
+    {
+    },
+
+    advanceToNext: function(target, charCode)
+    {
+        return false;
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+    getAutoCompleteRange: function(value, offset)
+    {
+    },
+
+    getAutoCompleteList: function(preExpr, expr, postExpr)
+    {
+        return [];
+    },
+
+    getAutoCompletePropSeparator: function(range, expr, prefixOf)
+    {
+        return null;
+    },
+
+    autoCompleteAdjustSelection: function(value, offset)
+    {
+        return null;
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+    getAutoCompleter: function()
+    {
+        if (!this.autoCompleter)
+        {
+            this.autoCompleter = new Firebug.AutoCompleter(false,
+                this.getAutoCompleteRange.bind(this),
+                this.getAutoCompleteList.bind(this),
+                this.getAutoCompletePropSeparator.bind(this),
+                this.autoCompleteAdjustSelection.bind(this));
+        }
+
+        return this.autoCompleter;
+    },
+
+    completeValue: function(amt)
+    {
+        if (this.getAutoCompleter().complete(this.panel.context, this.input, amt, true))
+            Editor.update(true);
+        else
+            this.incrementValue(amt);
+    },
+
+    incrementValue: function(amt)
+    {
+        var value = this.input.value;
+        var offset = this.input.selectionStart;
+        var offsetEnd = this.input.selectionEnd;
+
+        var newValue = this.doIncrementValue(value, amt, offset, offsetEnd);
+        if (!newValue)
+            return false;
+
+        this.input.value = newValue.value;
+        this.input.setSelectionRange(newValue.start, newValue.end);
+
+        Editor.update(true);
+        return true;
+    },
+
+    incrementExpr: function(expr, amt, info)
+    {
+        var num = parseFloat(expr);
+        if (isNaN(num))
+            return null;
+
+        var m = /\d+(\.\d+)?/.exec(expr);
+        var digitPost = expr.substr(m.index+m[0].length);
+        var newValue = Math.round((num-amt)*1000)/1000; // avoid rounding errors
+
+        if (info && "minValue" in info)
+            newValue = Math.max(newValue, info.minValue);
+        if (info && "maxValue" in info)
+            newValue = Math.min(newValue, info.maxValue);
+
+        newValue = newValue.toString();
+
+        // Preserve trailing zeroes of small increments.
+        if (Math.abs(amt) < 1)
+        {
+            if (newValue.indexOf(".") === -1)
+                newValue += ".";
+            var dec = newValue.length - newValue.lastIndexOf(".") - 1;
+            var incDec = Math.abs(amt).toString().length - 2;
+            while (dec < incDec)
+            {
+                newValue += "0";
+                ++dec;
+            }
+        }
+
+        return newValue + digitPost;
+    },
+
+    doIncrementValue: function(value, amt, offset, offsetEnd, info)
+    {
+        // Try to find a number around the cursor to increment.
+        var start, end;
+        if (/^-?[0-9.]/.test(value.substring(offset, offsetEnd)) &&
+            !(info && /\d/.test(value.charAt(offset-1) + value.charAt(offsetEnd))))
+        {
+            // We have a number selected, possibly with a suffix, and we are not in
+            // the disallowed case of just part of a known number being selected.
+            // Use that number.
+            start = offset;
+            end = offsetEnd;
+        }
+        else
+        {
+            // Parse periods as belonging to the number only if we are in a known number
+            // context. (This makes incrementing the 1 in 'image1.gif' work.)
+            var pattern = "[" + (info ? "0-9." : "0-9") + "]*";
+
+            var before = new RegExp(pattern + "$").exec(value.substr(0, offset))[0].length;
+            var after = new RegExp("^" + pattern).exec(value.substr(offset))[0].length;
+            start = offset - before;
+            end = offset + after;
+
+            // Expand the number to contain an initial minus sign if it seems
+            // free-standing.
+            if (value.charAt(start-1) === "-" &&
+                (start-1 === 0 || /[ (:,='"]/.test(value.charAt(start-2))))
+            {
+                --start;
+            }
+        }
+
+        if (start !== end)
+        {
+            // Include percentages as part of the incremented number (they are
+            // common enough).
+            if (value.charAt(end) === "%")
+                ++end;
+
+            var first = value.substr(0, start);
+            var mid = value.substring(start, end);
+            var last = value.substr(end);
+            mid = this.incrementExpr(mid, amt, info);
+            if (mid !== null)
+            {
+                return {
+                    value: first + mid + last,
+                    start: start,
+                    end: start + mid.length
+                };
+            }
+        }
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+    onKeyPress: function(event)
+    {
+        if (event.keyCode == KeyEvent.DOM_VK_ESCAPE && !this.completeAsYouType)
+        {
+            var reverted = this.getAutoCompleter().revert(this.input);
+            if (reverted)
+                Events.cancelEvent(event);
+        }
+        else if (event.keyCode == KeyEvent.DOM_VK_RIGHT && this.completeAsYouType)
+        {
+            if (this.getAutoCompleter().acceptCompletion(this.input))
+                Events.cancelEvent(event);
+        }
+        else if (event.charCode && this.advanceToNext(this.target, event.charCode))
+        {
+            Editor.tabNextEditor();
+            Events.cancelEvent(event);
+        }
+        else if (this.numeric && event.charCode &&
+            !(event.ctrlKey || event.metaKey || event.altKey) &&
+            !(KeyEvent.DOM_VK_0 <= event.charCode && event.charCode <= KeyEvent.DOM_VK_9) &&
+            event.charCode !== KeyEvent.DOM_VK_INSERT && event.charCode !== KeyEvent.DOM_VK_DELETE)
+        {
+            Events.cancelEvent(event);
+        }
+        else if (event.keyCode == KeyEvent.DOM_VK_BACK_SPACE ||
+            event.keyCode == KeyEvent.DOM_VK_DELETE)
+        {
+            // If the user deletes text, don't autocomplete after the upcoming input event
+            this.ignoreNextInput = true;
+        }
+    },
+
+    onOverflow: function()
+    {
+        this.updateLayout(false, false, 3);
+    },
+
+    onInput: function()
+    {
+        if (this.ignoreNextInput)
+        {
+            this.ignoreNextInput = false;
+            this.getAutoCompleter().reset();
+        }
+        else if (this.completeAsYouType)
+            this.getAutoCompleter().complete(this.panel.context, this.input, 0, false);
+        else
+            this.getAutoCompleter().reset();
+
+        Editor.update();
+    },
+
+    onContextMenu: function(event)
+    {
+        Events.cancelEvent(event);
+
+        var popup = Firebug.chrome.$("fbInlineEditorPopup");
+        Dom.eraseNode(popup);
+
+        var target = event.target;
+        var items = this.getContextMenuItems(target);
+        if (items)
+            Menu.createMenuItems(popup, items);
+
+        if (!popup.firstChild)
+            return false;
+
+        popup.openPopupAtScreen(event.screenX, event.screenY, true);
+        return true;
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+    updateLayout: function(initial, forceAll, extraWidth)
+    {
+        if (this.fixedWidth)
+        {
+            this.box.style.left = this.targetOffset.x + "px";
+            this.box.style.top = this.targetOffset.y + "px";
+
+            var w = this.target.offsetWidth;
+            var h = this.target.offsetHeight;
+            this.input.style.width = w + "px";
+            this.input.style.height = (h-3) + "px";
+        }
+        else
+        {
+            this.expander.textContent = this.input.value;
+
+            var clR = this.expander.getClientRects(),
+                wasWrapped = this.wrapped, inputWidth = Infinity;
+
+            if (clR.length <= 1)
+            {
+                this.wrapped = false;
+            }
+            else if (clR.length == 2)
+            {
+                var w1 = clR[0].width;
+                var w2 = clR[1].width;
+
+                if (w2 > w1){
+                    this.wrapped = true;
+                    inputWidth = w2;
+                } else
+                    this.wrapped = false;
+            }
+            else if (clR.length == 3)
+            {
+                this.wrapped = true;
+                if (clR[2].width > 50)
+                    inputWidth = clR[1].width;
+            }
+            else if (clR.length > 3)
+            {
+                this.wrapped = true;
+            }
+
+            var fixupL = 0, fixupT = 0;
+            if (this.wrapped)
+            {
+                fixupL = clR[1].left - clR[0].left;
+                fixupT = clR[1].top - clR[0].top;
+            }
+            else
+            {
+                var approxTextWidth = this.textSize.width;
+                // Make the input one character wider than the text value so that
+                // typing does not ever cause the textbox to scroll
+                var charWidth = this.measureInputText('m').width;
+
+                // Sometimes we need to make the editor a little wider, specifically when
+                // an overflow happens, otherwise it will scroll off some text on the left
+                if (extraWidth)
+                    charWidth *= extraWidth;
+
+                inputWidth = approxTextWidth + charWidth;
+            }
+
+            var container = this.panel.panelNode;
+            var maxWidth = container.clientWidth - this.targetOffset.x - fixupL +
+                container.scrollLeft-6;
+
+            if (inputWidth > maxWidth)
+                inputWidth = maxWidth;
+
+            if (forceAll || initial || this.wrapped != wasWrapped)
+            {
+                this.box.style.left = (this.targetOffset.x + fixupL) + "px";
+                this.box.style.top = (this.targetOffset.y + fixupT) + "px";
+            }
+            this.input.style.width = inputWidth + "px";
+        }
+
+        if (forceAll)
+            Dom.scrollIntoCenterView(this.box, null, true);
+    }
+});
+
+// ********************************************************************************************* //
+// Registration
+
+Firebug.InlineEditor = InlineEditor;
+
+return InlineEditor;
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/firebug.css b/content/firebug/firebug.css
index 285c343..0ab8744 100644
--- a/content/firebug/firebug.css
+++ b/content/firebug/firebug.css
@@ -115,7 +115,7 @@ textbox#fbCommandEditor {
 }
 
 textbox[type="fbSearchBox"] {
-    -moz-binding: url("firefox/bindings.xml#searchBox");
+    -moz-binding: url("firefox/searchBox.xml#searchBox");
 }
 textbox[type="fbSearchBox"] .panelFocusBound {
     -moz-user-focus: normal;
@@ -199,19 +199,6 @@ panelTab > panelTabMenu .menuTarget {
     visibility: collapse;
 }
 
-panelTab[selected="true"] > panelTabMenu .menuTarget,
-panelTab:focus > panelTabMenu .menuTarget {
-    background: url(chrome://firebug-os/skin/optionsMenuTarget.png) no-repeat center;
-    width: 11px;
-    height: 10px;
-    vertical-align: middle;
-    visibility: visible;
-}
-
-panelTab[selected="true"]:hover > panelTabMenu .menuTarget {
-    background-image: url(chrome://firebug-os/skin/optionsMenuTargetHover.png);
-}
-
 panelTab > panelTabMenu .menuPopup:-moz-locale-dir(rtl) {
     direction: rtl;
 }
@@ -321,42 +308,6 @@ panelTab > panelTabMenu .menuPopup:-moz-locale-dir(rtl) {
 }
 
 /*************************************************************************************************/
-/* Quick Info Box */
-
-#fbQuickInfoPanel {
-    border: 1px solid threedshadow;
-    background-color: white;
-    opacity: 0.9;
-    font-family: monospace;
-    font-size: 11px;
-    padding-bottom: 5px;
-    cursor: move;
-}
-
-.fbQuickInfoBoxTitle {
-    font-family: Lucida Grande, sans-serif;
-    font-size: 11px;
-    font-weight: bold;
-    margin-top: 8px;
-    margin-bottom: 0;
-    cursor: move;
-}
-
-.fbQuickInfoName {
-    color: DarkGreen;
-    margin-bottom: 0;
-    -moz-margin-end: 0;
-    cursor: move;
-}
-
-.fbQuickInfoValue {
-    color: DarkBlue;
-    margin-bottom: 0;
-    -moz-margin-start: 0;
-    cursor: move;
-}
-
-/*************************************************************************************************/
 /* Don't let Personas to destroy Firebug's CSS */
 
 #fbContentBox:-moz-lwtheme {
@@ -400,24 +351,3 @@ panelBarTabList {
 .panelBarTabListMenuItem {
     -moz-binding: url("firefox/bindings.xml#panelBarTabListMenuItem");
 }
-
-/*************************************************************************************************/
-/* splitmenu */
-
-menuitem.split-menuitem-item[_moz-menuactive="true"], .split-menu-right-image[_moz-menuactive="true"] {
-    background-color: -moz-menuhover;
-    color: -moz-menuhovertext;
-}
-
-.split-menu-right-image {
-    -moz-appearance: menuitem;
-    -moz-box-pack: end;
-}
-
-menu[type=splitmenu] {
-    -moz-binding: url("firefox/bindings.xml#splitmenu");
-    -moz-box-orient: horizontal;
-    -moz-appearance: none !important;
-    color: menutext;
-    background-color: transparent !important;
-}
diff --git a/content/firebug/firebug.js b/content/firebug/firebug.js
index a4dfff2..a1e61b8 100644
--- a/content/firebug/firebug.js
+++ b/content/firebug/firebug.js
@@ -2,11 +2,17 @@
 
 /**
  * Firebug module can depend only on modules that don't use the 'Firebug' namespace.
+ * So, mainly only on library modules from 'firebug/lib/*'
+ *
  * So, be careful before you create a new dependency.
+ *
+ * xxxHonza: dependency the following modules should be removed:
+ *     "firebug/chrome/firefox"
+ *     "firebug/chrome/chrome"
+ *     "firebug/trace/traceListener"
  */
 define([
     "firebug/lib/lib",
-    "firebug/lib/object",
     "firebug/chrome/firefox",
     "firebug/chrome/chrome",
     "firebug/lib/domplate",
@@ -14,18 +20,13 @@ define([
     "firebug/lib/locale",
     "firebug/lib/events",
     "firebug/lib/wrapper",
-    "firebug/lib/url",
     "firebug/lib/css",
-    "firebug/chrome/window",
-    "firebug/lib/string",
     "firebug/lib/array",
-    "firebug/lib/dom",
     "firebug/lib/http",
     "firebug/trace/traceListener",
-    "firebug/console/commandLineExposed",
 ],
-function(FBL, Obj, Firefox, ChromeFactory, Domplate, Options, Locale, Events,
-    Wrapper, Url, Css, Win, Str, Arr, Dom, Http, TraceListener, CommandLineExposed) {
+function(FBL, Firefox, ChromeFactory, Domplate, Options, Locale, Events, Wrapper, Css, Arr, Http,
+    TraceListener) {
 
 // ********************************************************************************************* //
 // Constants
@@ -83,7 +84,7 @@ if (window.Firebug)
  */
 window.Firebug =
 {
-    version: "1.12",
+    version: "1.13",
 
     dispatchName: "Firebug",
     modules: modules,
@@ -102,9 +103,6 @@ window.Firebug =
     // Custom stylesheets registered by extensions.
     stylesheets: [],
 
-    // xxxHonza: hack, all "Firebug.Options" occurrences should be replaced by "Options"
-    Options: Options,
-
     viewChrome: null,
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -644,6 +642,8 @@ window.Firebug =
 
     registerTracePrefix: function(prefix, type, removePrefix, styleURI)
     {
+        // xxxHonza: we should fire an event to avoid dependency on
+        // TraceModule and TraceListener
         var listener = Firebug.TraceModule.getListenerByPrefix(prefix);
         if (listener && FBTrace.DBG_ERRORS)
         {
@@ -665,12 +665,16 @@ window.Firebug =
 
     registerCommand: function(name, config)
     {
-        return CommandLineExposed.registerCommand(name, config);
+        // xxxHonza: we should fire an event to avoid dependency on CommandLineExposed module.
+        // Fix as soon as issue 6855 is done
+        return Firebug.CommandLineExposed.registerCommand(name, config);
     },
 
     unregisterCommand: function(name)
     {
-        return CommandLineExposed.unregisterCommand(name);
+        // xxxHonza: we should fire an event to avoid dependency on CommandLineExposed module.
+        // Fix as soon as issue 6855 is done
+        return Firebug.CommandLineExposed.unregisterCommand(name);
     },
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -804,7 +808,7 @@ window.Firebug =
 
         if (Firebug.isDetached())
         {
-            //in detached mode, two possibilities exist, the firebug windows is 
+            //in detached mode, two possibilities exist, the firebug windows is
             // the active window of the user or no.
             if ( !Firebug.chrome.hasFocus() || forceOpen)
                 Firebug.chrome.focus();
@@ -1081,6 +1085,17 @@ window.Firebug =
         return tooltip != panelType.prototype.name ? tooltip : this.getPanelTitle(panelType);
     },
 
+    getPanelTab: function(panelName)
+    {
+        var chrome = Firebug.chrome;
+
+        var tab = chrome.$("fbPanelBar2").getTab(panelName);
+        if (!tab)
+            tab = chrome.$("fbPanelBar1").getTab(panelName);
+
+        return tab;
+    },
+
     getMainPanelTypes: function(context)
     {
         var resultTypes = [];
@@ -1460,1315 +1475,6 @@ Firebug.getConsoleByGlobal = function getConsoleByGlobal(global)
 // ********************************************************************************************* //
 
 /**
- * Support for listeners registration. This object is also extended by Firebug.Module,
- * so all modules supports listening automatically. Note that an array of listeners is
- * created for each intance of a module within the initialize method. Thus all derived
- * module classes must ensure that the Firebug.Module.initialize method is called for the
- * super class.
- */
-Firebug.Listener = function()
-{
-    // The array is created when the first listeners is added.
-    // It can't be created here since derived objects would share
-    // the same array.
-    this.fbListeners = null;
-};
-
-Firebug.Listener.prototype =
-{
-    addListener: function(listener)
-    {
-        if (!listener)
-        {
-            if (FBTrace.DBG_ERRORS)
-                FBTrace.sysout("firebug.Listener.addListener; ERROR null listener registered.");
-            return;
-        }
-
-        // Delay the creation until the objects are created so 'this' causes new array
-        // for this object (e.g. module, panel, etc.)
-        if (!this.fbListeners)
-            this.fbListeners = [];
-
-        this.fbListeners.push(listener);
-    },
-
-    removeListener: function(listener)
-    {
-        // if this.fbListeners is null, remove is being called with no add
-        Arr.remove(this.fbListeners, listener);
-    },
-
-    dispatch: function(eventName, args)
-    {
-        if (this.fbListeners && this.fbListeners.length > 0)
-            Events.dispatch(this.fbListeners, eventName, args);
-    },
-
-    dispatch2: function(eventName, args)
-    {
-        if (this.fbListeners && this.fbListeners.length > 0)
-            return Events.dispatch2(this.fbListeners, eventName, args);
-    }
-};
-
-// ********************************************************************************************* //
-
-/**
- * @module Base class for all modules. Every derived module object must be registered using
- * <code>Firebug.registerModule</code> method. There is always one instance of a module object
- * per browser window.
- */
-Firebug.Module = Obj.extend(new Firebug.Listener(),
-/** @lends Firebug.Module */
-{
-    /**
-     * Called by Firebug when Firefox window is opened.
-     */
-    initialize: function()
-    {
-    },
-
-    /**
-     * Called when the UI is ready for context creation.
-     * Used by chromebug; normally FrameProgressListener events trigger UI synchronization,
-     * this event allows sync without progress events.
-     */
-    initializeUI: function(detachArgs)
-    {
-    },
-
-    /**
-     * Called by Firebug when Firefox window is closed.
-     */
-    shutdown: function()
-    {
-    },
-
-    /**
-     * Called when a new context is created but before the page is loaded.
-     */
-    initContext: function(context, persistedState)
-    {
-    },
-
-    /**
-     * Called when a context is destroyed. Module may store info on persistedState
-     * for reloaded pages.
-     */
-    destroyContext: function(context, persistedState)
-    {
-    },
-
-    /**
-     * Called when attaching to a window (top-level or frame).
-     */
-    watchWindow: function(context, win)
-    {
-    },
-
-    /**
-     * Called when unwatching a window (top-level or frame).
-     */
-    unwatchWindow: function(context, win)
-    {
-    },
-
-    // Called when a FF tab is create or activated (user changes FF tab)
-    // Called after context is created or with context == null (to abort?)
-    showContext: function(browser, context)
-    {
-    },
-
-    /**
-     * Called after a context's page gets DOMContentLoaded
-     */
-    loadedContext: function(context)
-    {
-    },
-
-    /*
-     * After "onSelectingPanel", a panel has been selected but is not yet visible
-     * @param browser a tab's browser element
-     * @param panel selectet panel OR null
-     */
-    showPanel: function(browser, panel)
-    {
-    },
-
-    showSidePanel: function(browser, sidePanel)
-    {
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    updateOption: function(name, value)
-    {
-    },
-
-    getObjectByURL: function(context, url)
-    {
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // intermodule dependency
-
-    // caller needs module. win maybe context.window or iframe in context.window.
-    // true means module is ready now, else getting ready
-    isReadyElsePreparing: function(context, win)
-    {
-    },
-});
-
-// ********************************************************************************************* //
-
-Firebug.Extension =
-{
-    acceptContext: function(win,uri)
-    {
-        return false;
-    },
-
-    declineContext: function(win,uri)
-    {
-        return false;
-    }
-};
-
-// ********************************************************************************************* //
-
-/**
- * @panel Base class for all panels. Every derived panel must define a constructor and
- * register with <code>Firebug.registerPanel</code> method. An instance of the panel
- * object is created by the framework for each browser tab where Firebug is activated.
- */
-Firebug.Panel = Obj.extend(new Firebug.Listener(),
-/** @lends Firebug.Panel */
-{
-    searchable: false,    // supports search
-    editable: true,       // clicking on contents in the panel will invoke the inline editor, eg the CSS Style panel or HTML panel.
-    breakable: false,     // if true, supports break-on-next (the pause button functionality)
-    order: 2147483647,    // relative position of the panel (or a side panel)
-    statusSeparator: "<", // the character used to separate items on the panel status (aka breadcrumbs) in the tool bar, eg ">"  in the DOM panel
-    enableA11y: false,    // true if the panel wants to participate in A11y accessibility support.
-    deriveA11yFrom: null, // Name of the panel that uses the same a11y logic.
-    inspectable: false,   // true to support inspecting elements inside this panel
-
-    initialize: function(context, doc)
-    {
-        if (!context.browser)
-        {
-            if (FBTrace.DBG_ERRORS)
-                FBTrace.sysout("attempt to create panel with dud context!");
-            return false;
-        }
-
-        this.context = context;
-        this.document = doc;
-
-        this.panelNode = doc.createElement("div");
-        this.panelNode.ownerPanel = this;
-
-        Css.setClass(this.panelNode, "panelNode panelNode-" + this.name + " contextUID=" +
-            context.uid);
-
-        // Load persistent content if any.
-        var persistedState = Firebug.getPanelState(this);
-        if (persistedState)
-        {
-            this.persistContent = persistedState.persistContent;
-            if (this.persistContent && persistedState.panelNode)
-                this.loadPersistedContent(persistedState);
-        }
-
-        // The default value for 'Persist' is set only the first time.
-        if (typeof(this.persistContent) == "undefined")
-            this.persistContent = Options.get(this.name + ".defaultPersist");
-
-        doc.body.appendChild(this.panelNode);
-
-        // Update panel's tab in case the break-on-next (BON) is active.
-        var shouldBreak = this.shouldBreakOnNext();
-        Firebug.Breakpoint.updatePanelTab(this, shouldBreak);
-
-        if (FBTrace.DBG_INITIALIZE)
-            FBTrace.sysout("firebug.initialize panelNode for " + this.name);
-
-        this.initializeNode(this.panelNode);
-    },
-
-    destroy: function(state) // Panel may store info on state
-    {
-        if (FBTrace.DBG_INITIALIZE)
-            FBTrace.sysout("firebug.destroy panelNode for " + this.name);
-
-        state.persistContent = this.persistContent;
-
-        if (this.panelNode)
-        {
-            if (this.persistContent)
-                this.savePersistedContent(state);
-
-            delete this.panelNode.ownerPanel;
-        }
-
-        this.destroyNode();
-
-        // xxxHonza: not exactly sure why, but it helps when testing memory-leask.
-        // Note the the selection can point to a document (in case of the HTML panel).
-        // Perhaps it breaks a cycle (page -> firebug -> page)?
-        delete this.selection;
-        delete this.panelBrowser;
-    },
-
-    savePersistedContent: function(state)
-    {
-        state.panelNode = this.panelNode;
-    },
-
-    loadPersistedContent: function(persistedState)
-    {
-        // move the nodes from the persistedState to the panel
-        while (persistedState.panelNode.firstChild)
-            this.panelNode.appendChild(persistedState.panelNode.firstChild);
-
-        Dom.scrollToBottom(this.panelNode);
-    },
-
-    // called when a panel in one XUL window is about to disappear to later reappear
-    // another XUL window.
-    detach: function(oldChrome, newChrome)
-    {
-    },
-
-    // this is how a panel in one window reappears in another window; lazy called
-    reattach: function(doc)
-    {
-        this.document = doc;
-
-        if (this.panelNode)
-        {
-            var scrollTop = this.panelNode.scrollTop;
-            this.panelNode = doc.adoptNode(this.panelNode, true);
-            this.panelNode.ownerPanel = this;
-            doc.body.appendChild(this.panelNode);
-            this.panelNode.scrollTop = scrollTop;
-        }
-    },
-
-    // Called at the end of module.initialize; addEventListener-s here
-    initializeNode: function(panelNode)
-    {
-        Events.dispatch(this.fbListeners, "onInitializeNode", [this]);
-    },
-
-    // removeEventListener-s here.
-    destroyNode: function()
-    {
-        Events.dispatch(this.fbListeners, "onDestroyNode", [this]);
-    },
-
-    show: function(state)  // persistedPanelState plus non-persisted hide() values
-    {
-    },
-
-    hide: function(state)  // store info on state for next show.
-    {
-    },
-
-    watchWindow: function(context, win)
-    {
-    },
-
-    unwatchWindow: function(context, win)
-    {
-    },
-
-    loadWindow: function(context, win)
-    {
-    },
-
-    updateOption: function(name, value)
-    {
-    },
-
-    /**
-     * Called after chrome.applyTextSize
-     * @param zoom: ratio of current size to normal size, eg 1.5
-     */
-    onTextSizeChange: function(zoom)
-    {
-
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // Toolbar
-
-    showToolbarButtons: function(buttonsId, show)
-    {
-        try
-        {
-            var buttons = Firebug.chrome.$(buttonsId);
-            Dom.collapse(buttons, !show);
-        }
-        catch (exc)
-        {
-            if (FBTrace.DBG_ERRORS)
-                FBTrace.sysout("firebug.Panel showToolbarButtons FAILS "+exc, exc);
-        }
-    },
-
-    onGetPanelToolbarButtons: function(panel, items)
-    {
-        return [];
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    /**
-     * Returns a number indicating the view's ability to inspect the object.
-     *
-     * Zero means not supported, and higher numbers indicate specificity.
-     */
-    supportsObject: function(object, type)
-    {
-        return 0;
-    },
-
-    hasObject: function(object)  // beyond type testing, is this object selectable?
-    {
-        return false;
-    },
-
-    navigate: function(object)
-    {
-        // Get default location object if none is specified.
-        if (!object)
-            object = this.getDefaultLocation();
-
-        // Make sure the location is *not* undefined.
-        if (!object)
-            object = null;
-
-        // We should be extra careful when dealing with the |location| object (include
-        // converting it to string).
-        // There might be cases where the object is removed from the page (e.g. a stylesheet
-        // that is currently displayed in the CSS panel) and the panel location not updated.
-        //
-        // This might happen because of optimalization where backround panels do not observe
-        // changes on the page (e.g. using Mutation Observer).
-        //
-        // The object is a dead wrapper at such moments, firing an exception anytime
-        // it's properties or methods are accessed.
-        // So, just pass the object back to the panel, which must do proper checking.
-        if (!this.location || (object != this.location))
-        {
-            if (FBTrace.DBG_PANELS)
-                FBTrace.sysout("Panel.navigate; " + this.name);
-
-            this.location = object;
-            this.updateLocation(object);
-
-            Events.dispatch(Firebug.uiListeners, "onPanelNavigate", [object, this]);
-        }
-        else
-        {
-            if (FBTrace.DBG_PANELS)
-                FBTrace.sysout("Panel.navigate; Skipped for panel " + this.name);
-        }
-    },
-
-    /**
-     * The location object has been changed, the panel should update it view
-     * @param object a location, must be one of getLocationList() returns
-     *  if  getDefaultLocation() can return null, then updateLocation must handle it here.
-     */
-    updateLocation: function(object)
-    {
-    },
-
-    select: function(object, forceUpdate)
-    {
-        if (!object)
-            object = this.getDefaultSelection();
-
-        if (FBTrace.DBG_PANELS)
-            FBTrace.sysout("firebug.select "+this.name+" forceUpdate: "+forceUpdate+" "+
-                object+((object==this.selection)?"==":"!=")+this.selection);
-
-        if (forceUpdate || object != this.selection)
-        {
-            this.selection = object;
-            this.updateSelection(object);
-
-            Events.dispatch(Firebug.uiListeners, "onObjectSelected", [object, this]);
-        }
-    },
-
-    /**
-     * Firebug wants to show an object to the user and this panel has the best supportsObject()
-     * result for the object. If the panel displays a container for objects of this type,
-     * it should set this.selectedObject = object
-     */
-    updateSelection: function(object)
-    {
-    },
-
-    /**
-     * Redisplay the panel based on the current location and selection
-     */
-    refresh: function()
-    {
-        if (this.location)
-            this.updateLocation(this.location);
-        else if (this.selection)
-            this.updateSelection(this.selection);
-    },
-
-    markChange: function(skipSelf)
-    {
-        if (this.dependents)
-        {
-            if (skipSelf)
-            {
-                for (var i = 0; i < this.dependents.length; ++i)
-                {
-                    var panelName = this.dependents[i];
-                    if (panelName != this.name)
-                        this.context.invalidatePanels(panelName);
-                }
-            }
-            else
-                this.context.invalidatePanels.apply(this.context, this.dependents);
-        }
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // Inspector
-
-    /**
-     * Called by the framework when the user starts inspecting. Inspecting must be enabled
-     * for the panel (panel.inspectable == true)
-     */
-    startInspecting: function()
-    {
-    },
-
-    /**
-     * Called by the framework when inspecting is in progress and the user moves mouse over
-     * a new page element. Inspecting must be enabled for the panel (panel.inspectable == true).
-     * This method is called in a timeout to avoid performance penalties when the user moves
-     * the mouse over the page elements too fast.
-     * @param {Element} node The page element being inspected
-     * @returns {Boolean} Returns true if the node should be selected within the panel using
-     *      the default panel selection mechanism (i.e. by calling panel.select(node) method).
-     */
-    inspectNode: function(node)
-    {
-        return true;
-    },
-
-    /**
-     * Called by the framework when the user stops inspecting. Inspecting must be enabled
-     * for the panel (panel.inspectable == true)
-     * @param {Element} node The last page element inspected
-     * @param {Boolean} canceled Set to true if inspecing has been canceled
-     *          by pressing the escape key.
-     */
-    stopInspecting: function(node, canceled)
-    {
-    },
-
-    /**
-     * Called by the framework when inspecting is in progress. Allows to inspect
-     * only nodes that are supported by the panel. Derived panels can provide effective
-     * algorithms to provide these nodes.
-     * @param {Element} node Currently inspected page element.
-     */
-    getInspectNode: function(node)
-    {
-        while (node)
-        {
-            if (this.supportsObject(node, typeof node))
-                return node;
-            node = node.parentNode;
-        }
-        return null;
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    /*
-     * Called by search in the case something was found.
-     * This will highlight the given node for a specific timespan. There's only one node
-     * highlighted at a time.
-     * @param {Node} Node to highlight
-     */
-    highlightNode: function(node)
-    {
-        if (this.highlightedNode)
-            Css.cancelClassTimed(this.highlightedNode, "jumpHighlight", this.context);
-
-        this.highlightedNode = node;
-
-        if (node)
-            Css.setClassTimed(node, "jumpHighlight", this.context);
-    },
-
-    /*
-     * Called by the framework when panel search is used.
-     * This is responsible for finding and highlighting search matches.
-     * @param {String} text String to search for
-     * @param {Boolean} reverse Indicates, if search is reversed
-     * @return true, if search matched, otherwise false
-     */
-    search: function(text, reverse)
-    {
-    },
-
-    /**
-     * Retrieves the search options that this modules supports.
-     * This is used by the search UI to present the proper options.
-     */
-    getSearchOptionsMenuItems: function()
-    {
-        return [
-            Firebug.Search.searchOptionMenu("search.Case Sensitive", "searchCaseSensitive",
-                "search.tip.Case_Sensitive")
-        ];
-    },
-
-    /**
-     * Navigates to the next document whose match parameter returns true.
-     */
-    navigateToNextDocument: function(match, reverse)
-    {
-        // This is an approximation of the UI that is displayed by the location
-        // selector. This should be close enough, although it may be better
-        // to simply generate the sorted list within the module, rather than
-        // sorting within the UI.
-        var self = this;
-        function compare(a, b)
-        {
-            var locA = self.getObjectDescription(a);
-            var locB = self.getObjectDescription(b);
-            if (locA.path > locB.path)
-                return 1;
-            if (locA.path < locB.path)
-                return -1;
-            if (locA.name > locB.name)
-                return 1;
-            if (locA.name < locB.name)
-                return -1;
-            return 0;
-        }
-
-        var allLocs = this.getLocationList().sort(compare);
-        for (var curPos = 0; curPos < allLocs.length && allLocs[curPos] != this.location; curPos++);
-
-        function transformIndex(index)
-        {
-            if (reverse)
-            {
-                // For the reverse case we need to implement wrap around.
-                var intermediate = curPos - index - 1;
-                return (intermediate < 0 ? allLocs.length : 0) + intermediate;
-            }
-            else
-            {
-                return (curPos + index + 1) % allLocs.length;
-            }
-        };
-
-        for (var next = 0; next < allLocs.length - 1; next++)
-        {
-            var object = allLocs[transformIndex(next)];
-
-            if (match(object))
-            {
-                this.navigate(object);
-                return object;
-            }
-        }
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    // Called when "Options" clicked. Return array of
-    // {label: 'name', nol10n: true,  type: "checkbox", checked: <value>,
-    //      command:function to set <value>}
-    getOptionsMenuItems: function()
-    {
-        return null;
-    },
-
-    /**
-     * Called by chrome.onContextMenu to build the context menu when this panel has focus.
-     * See also FirebugRep for a similar function also called by onContextMenu
-     * Extensions may monkey patch and chain off this call
-     * @param object: the 'realObject', a model value, eg a DOM property
-     * @param target: the HTML element clicked on.
-     * @return an array of menu items.
-     */
-    getContextMenuItems: function(object, target)
-    {
-        return [];
-    },
-
-    getBreakOnMenuItems: function()
-    {
-        return [];
-    },
-
-    getEditor: function(target, value)
-    {
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    getDefaultSelection: function()
-    {
-        return null;
-    },
-
-    browseObject: function(object)
-    {
-    },
-
-    getPopupObject: function(target)
-    {
-        return Firebug.getRepObject(target);
-    },
-
-    getTooltipObject: function(target)
-    {
-        return Firebug.getRepObject(target);
-    },
-
-    showInfoTip: function(infoTip, x, y)
-    {
-
-    },
-
-    getObjectPath: function(object)
-    {
-        return null;
-    },
-
-    // An array of objects that can be passed to getObjectLocation.
-    // The list of things a panel can show, eg sourceFiles.
-    // Only shown if panel.location defined and supportsObject true
-    getLocationList: function()
-    {
-        return null;
-    },
-
-    getDefaultLocation: function()
-    {
-        return null;
-    },
-
-    getObjectLocation: function(object)
-    {
-        return "";
-    },
-
-    // Text for the location list menu eg script panel source file list
-    // return.path: group/category label, return.name: item label
-    getObjectDescription: function(object)
-    {
-        var url = this.getObjectLocation(object);
-        return Url.splitURLBase(url);
-    },
-
-    /**
-     *  UI signal that a tab needs attention, eg Script panel is currently stopped on a breakpoint
-     *  @param: show boolean, true turns on.
-     */
-    highlight: function(show)
-    {
-        var tab = this.getTab();
-        if (!tab)
-            return;
-
-        if (show)
-            tab.setAttribute("highlight", "true");
-        else
-            tab.removeAttribute("highlight");
-    },
-
-    getTab: function()
-    {
-        var chrome = Firebug.chrome;
-
-        var tab = chrome.$("fbPanelBar2").getTab(this.name);
-        if (!tab)
-            tab = chrome.$("fbPanelBar1").getTab(this.name);
-        return tab;
-    },
-
-    /**
-     * If the panel supports source viewing, then return a SourceLink, else null
-     * @param target an element from the panel under the mouse
-     * @param object the realObject under the mouse
-     */
-    getSourceLink: function(target, object)
-    {
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // Support for Break On Next
-
-    /**
-     * Called by the framework to see if the panel currently supports BON
-     */
-    supportsBreakOnNext: function()
-    {
-        return this.breakable;  // most panels just use this flag
-    },
-
-    /**
-     * Called by the framework when the user clicks on the Break On Next button.
-     * @param {Boolean} armed Set to true if the Break On Next feature is
-     * to be armed for action and set to false if the Break On Next should be disarmed.
-     * If 'armed' is true, then the next call to shouldBreakOnNext should be |true|.
-     */
-    breakOnNext: function(armed)
-    {
-    },
-
-    /**
-     * Called when a panel is selected/displayed. The method should return true
-     * if the Break On Next feature is currently armed for this panel.
-     */
-    shouldBreakOnNext: function()
-    {
-        return false;
-    },
-
-    /**
-     * Returns labels for Break On Next tooltip (one for enabled and one for disabled state).
-     * @param {Boolean} enabled Set to true if the Break On Next feature is
-     * currently activated for this panel.
-     */
-    getBreakOnNextTooltip: function(enabled)
-    {
-        return null;
-    },
-});
-
-// ********************************************************************************************* //
-
-/**
- * @panel This object represents a panel with two states: enabled/disabled. Such support
- * is important for panel that represents performance penalties and it's useful for the
- * user to have the option to disable them.
- *
- * All methods in this object are used on the prototype object (they reprent class methods)
- * and so, |this| points to the panel's prototype and *not* to the panel instance.
- */
-Firebug.ActivablePanel = Obj.extend(Firebug.Panel,
-{
-    activable: true,
-
-    isActivable: function()
-    {
-        return this.activable;
-    },
-
-    isEnabled: function()
-    {
-        if (!this.isActivable())
-            return true;
-
-        if (!this.name)
-            return false;
-
-        return Options.get(this.name+".enableSites");
-    },
-
-    setEnabled: function(enable)
-    {
-        if (!this.name || !this.activable)
-            return;
-
-        Options.set(this.name+".enableSites", enable);
-    },
-
-    /**
-     * Called when an instance of this panel type is enabled or disabled. Again notice that
-     * this is a class method and so, panel instance variables (like e.g. context) are
-     * not accessible from this method.
-     * @param {Object} enable Set to true if this panel type is now enabled.
-     */
-    onActivationChanged: function(enable)
-    {
-        // TODO: Use Firebug.ActivableModule.addObserver to express dependencies on modules.
-    },
-});
-
-// ********************************************************************************************* //
-
-/**
- * @module Should be used by modules (Firebug specific task controllers) that supports
- * activation. An example of such 'activable' module can be the debugger module
- * {@link Firebug.Debugger}, which can be disabled in order to avoid performance
- * penalties (in cases where the user doesn't need a debugger for the moment).
- */
-Firebug.ActivableModule = Obj.extend(Firebug.Module,
-/** @lends Firebug.ActivableModule */
-{
-    /**
-     * Every activable module is disabled by default waiting for on a panel
-     * that wants to have it enabled (and display provided data). The rule is
-     * if there is no panel (view) the module is disabled.
-     */
-    enabled: false,
-
-    /**
-     * List of observers (typically panels). If there is at least one observer registered
-     * The module becomes active.
-     */
-    observers: null,
-
-    /**
-     * List of dependent modules.
-     */
-    dependents: null,
-
-    initialize: function()
-    {
-        Firebug.Module.initialize.apply(this, arguments);
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // Observers (dependencies)
-
-    hasObservers: function()
-    {
-        return this.observers ? this.observers.length > 0 : false;
-    },
-
-    addObserver: function(observer)
-    {
-        if (!this.observers)
-            this.observers = [];
-
-        if (this.observers.indexOf(observer) === -1)
-        {
-            this.observers.push(observer);
-            this.onObserverChange(observer);  // targeted, not dispatched.
-        }
-        // else no-op
-    },
-
-    removeObserver: function(observer)
-    {
-        if (!this.observers)
-            return;
-
-        if (this.observers.indexOf(observer) !== -1)
-        {
-            Arr.remove(this.observers, observer);
-            this.onObserverChange(observer);  // targeted, not dispatched
-        }
-        // else no-op
-    },
-
-    /**
-     * This method is called if an observer (e.g. {@link Firebug.Panel}) is added or removed.
-     * The module should decide about activation/deactivation upon existence of at least one
-     * observer.
-     */
-    onObserverChange: function(observer)
-    {
-        if (FBTrace.DBG_WINDOWS)
-            FBTrace.sysout("firebug.ActivableModule.onObserverChange;");
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // Firebug Activation
-
-    onSuspendingFirebug: function()
-    {
-        // Called before any suspend actions. First caller to return true aborts suspend.
-    },
-
-    onSuspendFirebug: function()
-    {
-        // When the number of activeContexts decreases to zero. Modules should remove
-        // listeners, disable function that takes resources
-    },
-
-    onResumeFirebug: function()
-    {
-        // When the number of activeContexts increases from zero. Modules should undo the
-        // work done in onSuspendFirebug
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // Module enable/disable APIs.
-
-    setDefaultState: function(enable)
-    {
-        //@deprecated
-        Firebug.Console.log("Deprecated: don't use ActivableModule.setDefaultState!",
-            Firebug.currentContext);
-    },
-
-    isEnabled: function()
-    {
-        return this.hasObservers();
-    },
-
-    isAlwaysEnabled: function()
-    {
-        return this.hasObservers();
-    }
-});
-
-// ********************************************************************************************* //
-
-/**
- * MeasureBox
- * To get pixels size.width and size.height:
- * <ul><li>     this.startMeasuring(view); </li>
- *     <li>     var size = this.measureText(lineNoCharsSpacer); </li>
- *     <li>     this.stopMeasuring(); </li>
- * </ul>
- */
-Firebug.MeasureBox =
-{
-    startMeasuring: function(target)
-    {
-        if (!this.measureBox)
-        {
-            this.measureBox = target.ownerDocument.createElement("span");
-            this.measureBox.className = "measureBox";
-        }
-
-        Css.copyTextStyles(target, this.measureBox);
-        target.ownerDocument.body.appendChild(this.measureBox);
-    },
-
-    getMeasuringElement: function()
-    {
-        return this.measureBox;
-    },
-
-    measureText: function(value)
-    {
-        this.measureBox.textContent = value || "m";
-        return {width: this.measureBox.offsetWidth, height: this.measureBox.offsetHeight-1};
-    },
-
-    measureInputText: function(value)
-    {
-        if (!value)
-            value = "m";
-        if (!Firebug.showTextNodesWithWhitespace)
-            value = value.replace(/\t/g, "mmmmmm").replace(/\ /g, "m");
-
-        this.measureBox.textContent = value;
-        return {width: this.measureBox.offsetWidth, height: this.measureBox.offsetHeight-1};
-    },
-
-    getBox: function(target)
-    {
-        var style = this.measureBox.ownerDocument.defaultView.getComputedStyle(this.measureBox, "");
-        var box = Css.getBoxFromStyles(style, this.measureBox);
-        return box;
-    },
-
-    stopMeasuring: function()
-    {
-        this.measureBox.parentNode.removeChild(this.measureBox);
-    }
-};
-
-// ********************************************************************************************* //
-
-with (Domplate) {
-Firebug.Rep = domplate(
-{
-    className: "",
-    inspectable: true,
-
-    supportsObject: function(object, type)
-    {
-        return false;
-    },
-
-    highlightObject: function(object, context)
-    {
-        var realObject = this.getRealObject(object, context);
-        if (realObject)
-            Firebug.Inspector.highlightObject(realObject, context);
-    },
-
-    unhighlightObject: function(object, context)
-    {
-        Firebug.Inspector.highlightObject(null);
-    },
-
-    inspectObject: function(object, context)
-    {
-        Firebug.chrome.select(object);
-    },
-
-    browseObject: function(object, context)
-    {
-    },
-
-    persistObject: function(object, context)
-    {
-    },
-
-    getRealObject: function(object, context)
-    {
-        return object;
-    },
-
-    getTitle: function(object)
-    {
-        if (!object)
-        {
-            if (FBTrace.DBG_ERRORS)
-                FBTrace.sysout("Rep.getTitle; ERROR No object provided");
-            return "null object";
-        }
-
-        try
-        {
-            if (object.constructor && typeof(object.constructor) == 'function')
-            {
-                var ctorName = object.constructor.name;
-                // xxxsz: Objects with 'Object' as constructor name should also be shown.
-                // See issue 6148.
-                if (ctorName)
-                    return ctorName;
-            }
-        }
-        catch (e)
-        {
-            if (FBTrace.DBG_ERRORS)
-                FBTrace.sysout("Rep.getTitle; EXCEPTION " + e, e);
-        }
-
-        var label = Str.safeToString(object); // eg [object XPCWrappedNative [object foo]]
-
-        const re =/\[object ([^\]]*)/;
-        var m = re.exec(label);
-        var n = null;
-        if (m)
-            n = re.exec(m[1]);  // eg XPCWrappedNative [object foo
-
-        if (n)
-            return n[1];  // eg foo
-        else
-            return m ? m[1] : label;
-    },
-
-    showInfoTip: function(infoTip, target, x, y)
-    {
-        return false;
-    },
-
-    getTooltip: function(object)
-    {
-        return null;
-    },
-
-    /**
-     * Called by chrome.onContextMenu to build the context menu when the underlying object
-     * has this rep. See also Panel for a similar function also called by onContextMenu
-     * Extensions may monkey patch and chain off this call
-     *
-     * @param object: the 'realObject', a model value, eg a DOM property
-     * @param target: the HTML element clicked on.
-     * @param context: the context, probably Firebug.currentContext
-     * @return an array of menu items.
-     */
-    getContextMenuItems: function(object, target, context)
-    {
-        return [];
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // Convenience for domplates
-
-    STR: function(name)
-    {
-        return Locale.$STR(name);
-    },
-
-    cropString: function(text)
-    {
-        return Str.cropString(text);
-    },
-
-    cropMultipleLines: function(text, limit)
-    {
-        return Str.cropMultipleLines(text, limit);
-    },
-
-    toLowerCase: function(text)
-    {
-        return text ? text.toLowerCase() : text;
-    },
-
-    plural: function(n)
-    {
-        return n == 1 ? "" : "s";
-    }
-});
-};
-
-// ********************************************************************************************* //
-
-Firebug.Migrator =
-{
-    /*
-     * UI Update from element oldButton to element newButton.
-     * On first call, Arrow points from old to new, button OK required
-     * After OK, the oldButton is removed and not shown again unless preference is erased.
-     */
-    migrateButton: function(oldButton, newButton)
-    {
-        if (Firebug.Migrator.getMigrated(oldButton))
-        {
-            oldButton.parentNode.removeChild(oldButton);
-            return;
-        }
-
-        function showMigration(event)
-        {
-            oldButton.removeEventListener('mouseover', showMigration, false);
-
-            var endPoint = newButton.getBoundingClientRect();
-            var origin = oldButton.getBoundingClientRect();
-
-            // A box surrounding both buttons
-            var left =   Math.min(origin.left,   endPoint.left);
-            var right =  Math.max(origin.right,  endPoint.right);
-            var top =    Math.min(origin.top,    endPoint.top);
-            var bottom = Math.max(origin.bottom, endPoint.bottom);
-
-            var width = right - left;
-            var height =  bottom - top;
-
-            var migrationPanel = Firebug.chrome.$("fbMigrator");
-            var panelWidth = Math.max(width, 150);
-            var panelHeight = Math.max(height, 150);
-            migrationPanel.sizeTo(panelWidth, panelHeight);
-
-            // x, y are offsets from the upper left corner of the oldButton, that
-            // is the reference point of the 'overlap' position of the popup
-            // (Hint, think about all the x values then all the y values.)
-            if (left == origin.left)
-            {
-                var x = 0;
-                var x1 = origin.width;
-            }
-            else
-            {
-                var x = origin.width - width;
-                var x1 = width - origin.width;
-            }
-            if (top == origin.top)
-            {
-                var y = 0;
-                var y1 = origin.height;
-            }
-            else
-            {
-                var y = origin.height - origin;
-                var y1 = height - origin.height;
-            }
-
-            if (left == endPoint.left)
-                var x2 = endPoint.width;
-            else
-                var x2 = width - endPoint.width;
-
-            if (top == endPoint.top)
-                var y2 = endPoint.height;
-            else
-                var y2 = height - endPoint.height;
-
-            migrationPanel.openPopup(oldButton, 'overlap',  x,  y, false, true);
-
-            Firebug.Migrator.drawMigrationLine(x1, y1, x2, y2);
-
-            Firebug.Migrator.removeButtonOnOk(oldButton, migrationPanel);
-        }
-        oldButton.addEventListener('mouseover', showMigration, false);
-    },
-
-    drawMigrationLine: function(x1, y1, x2, y2)
-    {
-        var migrationFrame = Firebug.chrome.$('fbMigrationFrame');
-
-        var line  = migrationFrame.contentDocument.getElementById("migrationPath");
-        line.setAttribute("x1", x1);
-        line.setAttribute("x2", x1);
-        line.setAttribute("y1", y1);
-        line.setAttribute("y2", y1);
-
-        var progress = 0;
-        var steps = 100;
-        var stepStep = 1;
-        var xStep = (x2 - x1)/steps;
-        var yStep = (y2 - y1)/steps;
-        var xCur = x1;
-        var yCur = y1;
-        Firebug.Migrator.animate = setInterval(function growLine()
-        {
-            xCur += stepStep*xStep;
-            yCur += stepStep*yStep;
-            steps -= stepStep;
-            if (steps > 50)
-                stepStep++;
-            else
-                stepStep--;
-            //FBTrace.sysout("animate steps "+steps+" stepStep "+stepStep+" x "+xCur+" y "+yCur);
-            line.setAttribute("x2", xCur);
-            line.setAttribute("y2", yCur);
-            if (steps < 0)
-                clearInterval(animate);
-        }, 50);
-    },
-
-    removeButtonOnOk: function(oldButton, migrationPanel)
-    {
-        var migrationOk = Firebug.chrome.$('fbMigrationOk');
-        migrationOk.addEventListener('click', function migrationComplete(event)
-        {
-            // xxxHonza, XXXjjb: I have seen an exception saying that oldButton.parentNode is null.
-            oldButton.parentNode.removeChild(oldButton);
-            Firebug.Migrator.setMigrated(oldButton);
-            clearInterval(Firebug.Migrator.animate);
-            migrationPanel.hidePopup();
-            migrationOk.removeEventListener('click', migrationComplete, true);
-        }, true);
-    },
-
-    getMigrated: function(elt)
-    {
-        var id = elt.getAttribute('id');
-        return Options.get("migrated_"+id);
-    },
-
-    setMigrated: function(elt)
-    {
-        var id = elt.getAttribute('id');
-        Options.set( "migrated_"+id, true, typeof(true));
-    }
-};
-
-// ********************************************************************************************* //
-
-/**
  * If we are detached and the main Firefox window closes, also close the matching Firebug window.
  */
 function shutdownFirebug()
@@ -2799,8 +1505,8 @@ if (preFirebugKeys)
 // Registration
 
 Firebug.Firefox = Firefox;
-Firebug.Domplate = Domplate;
 Firebug.ChromeFactory = ChromeFactory;
+Firebug.Options = Options;
 
 return Firebug;
 
diff --git a/content/firebug/firebugOverlay.xul b/content/firebug/firebugOverlay.xul
index 0e3a27a..517e8d6 100644
--- a/content/firebug/firebugOverlay.xul
+++ b/content/firebug/firebugOverlay.xul
@@ -21,11 +21,11 @@
         <tooltip id="fbTooltip" class="fbURLMenuItem"
             onpopupshowing="return Firebug.chrome.onTooltipShowing(event);"/>
 
-        <panel id="fbQuickInfoPanel" width="210" noautofocus="true"
-            onmousedown="Firebug.QuickInfoBox.quickInfoBoxHandler(event);"
-            onmouseover="Firebug.QuickInfoBox.quickInfoBoxHandler(event);"
-            onmouseout="Firebug.QuickInfoBox.quickInfoBoxHandler(event);">
-            <vbox></vbox>
+        <panel id="fbQuickInfoPanel" width="210" noautofocus="true">
+            <!-- xxxHonza: type=chrome is allowing filters.svg usage in quickInfoBox.css
+                Could we have filters.svg in the standard skin dir? -->
+            <browser class="fbQuickInfoPanelContent" disablehistory="true"
+                src="about:blank" type="chrome" flex="1" border="0"/>
         </panel>
 
         <menupopup id="fbNavigationHistoryMenu"
@@ -173,9 +173,6 @@
                                         <toolbarbutton id="fbToggleProfiling" label="firebug.Profile"
                                             class="toolbar-text-button fbInternational"
                                             type="checkbox" command="cmd_firebug_toggleProfiling"/>
-                                        <!-- <toolbarbutton id="fbToggleMemoryProfiling" label="firebug.Memory Profile"
-                                            class="toolbar-text-button fbInternational"
-                                            type="checkbox" command="cmd_firebug_toggleMemoryProfiling"/> -->
                                         <toolbarseparator class="fbPanelSpecificButtonsSeparator"/>
                                         <hbox id="fbConsoleFilterButtons" class="noTabStop">
                                             <toolbarbutton
@@ -515,8 +512,10 @@
                     <!-- transparent background, silver text over user inputs -->
                     <html:div class="background">
                         <!-- completion text -->
-                        <html:input id="fbCommandLineCompletion" class="fbCommandLine"
-                            type="text" maxlength="2048" autocomplete="off" tabindex="-1" />
+                        <html:div id="fbCommandLineCompletionHolder">
+                            <textbox id="fbCommandLineCompletion" class="fbCommandLine"
+                                autocomplete="off" tabindex="-1" />
+                        </html:div>
                         <textbox id="fbCommandLine" class="fbCommandLine" flex="1"
                             aria-autocomplete="inline" multiline="false" newlines="pasteintact"/>
                         <!-- font width measurer, contains 60 arbitrary characters -->
diff --git a/skin/classic/panel.css b/content/firebug/firebugui/panel.css
similarity index 85%
copy from skin/classic/panel.css
copy to content/firebug/firebugui/panel.css
index 9f83fcb..64f3e25 100644
--- a/skin/classic/panel.css
+++ b/content/firebug/firebugui/panel.css
@@ -9,6 +9,7 @@
 @import "chrome://firebug/skin/html.css";
 @import "chrome://firebug/skin/css.css";
 @import "chrome://firebug/skin/debugger.css";
+ at import "chrome://firebug-os/skin/debugger.css";
 @import "chrome://firebug/skin/balloonNote.css";
 @import "chrome://firebug/skin/callstack.css";
 @import "chrome://firebug/skin/layout.css";
@@ -16,5 +17,7 @@
 @import "chrome://firebug/skin/selectors.css";
 @import "chrome://firebug/skin/performanceTiming.css";
 @import "chrome://firebug/skin/tableRep.css";
+ at import "chrome://firebug/skin/panel.css";
 @import "chrome://firebug-os/skin/panel.css";
 @import "chrome://firebug/skin/timeInfoTip.css";
+ at import "chrome://firebug/skin/panelNotification.css";
diff --git a/content/firebug/firebugui/panel.html b/content/firebug/firebugui/panel.html
index 4f9d3f5..129afd1 100644
--- a/content/firebug/firebugui/panel.html
+++ b/content/firebug/firebugui/panel.html
@@ -5,7 +5,7 @@
 <head>
     <title>Firebug</title>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-    <link rel="stylesheet" href="chrome://firebug/skin/panel.css" type="text/css"/>
+    <link rel="stylesheet" href="resource://firebugui/panel.css" type="text/css"/>
 </head>
 <body role="application">
 <div class="disabledPanelNode" role="progressbar"></div>
diff --git a/content/firebug/firefox/bindings.xml b/content/firebug/firefox/bindings.xml
index 0fed428..fa7f95b 100644
--- a/content/firebug/firefox/bindings.xml
+++ b/content/firebug/firefox/bindings.xml
@@ -96,8 +96,13 @@
                     tab.setAttribute("aria-disabled", enabled ? "false" : "true");
                 }
 
-                // xxxHonza: Does this belong here?
+                // xxxHonza: This doesn't belong here, the start button should utilize
+                // the onUpdateTab event fired below.
+                // The activation logic (above) should be implemented similarly.
                 Firebug.StartButton.resetTooltip();
+
+                Firebug.dispatch(Firebug.uiListeners, "onUpdateTab",
+                    [Firebug.currentContext, tab, panelType]);
             ]]></body>
         </method>
 
@@ -1456,443 +1461,6 @@
     </implementation>
 </binding>
 
-<!-- Searchbox is located in the main Firebug toolbar and can be used to search
-    for a keyword within the current panel. -->
-<binding id="searchBox">
-    <content sizetopopup="none" align="center">
-        <xul:textbox anonid="searchBox" flex="1" width="0"
-            rows="1" label="search.Firebug_Search" class="fbsearch-textbox"
-            onkeyup="onSearchBoxKeyUp(event, this);" aria-describedby="fbSearchBoxDescription">
-            <xul:box class="fbsearch-icon" onclick="onSearchIconClick(event, this.parentNode)"/>
-        </xul:textbox>
-        <xul:description anonid="fbSearchBoxDescription"  collapsed="true"/>
-        <xul:panel id="fbSearchOptionsPanel" norestorefocus="true" noautofocus="true"
-            ignorekeys="true" role="presentation">
-            <xul:description id="fbSearchBoxIsSensitive" value="search.Case_AutoSensitive"/>
-            <xul:description id="fbSearchBoxIsNotSensitive" value="search.Case_Insensitive"/>
-            <xul:vbox class="searchOptionsMenu innerToolbar" role="menu" anonid="fbSearchOptionsMenu">
-              <xul:box anonid="startPanelFocus" class="panelFocusBound" onfocus="startFocusHandler()" />
-              <xul:vbox anonid="searchOptionsList" role="presentation" />
-              <xul:hbox pack="center" align="center" role="presentation">
-                  <xul:button anonid="searchPrev" class="fbsearch-options-buttons prev a11yFocus"
-                      label="search.Previous" tooltiptext="search.tip.Previous"
-                      oncommand="searchPrev()" role="menuitem" />
-                  <xul:button anonid="searchNext" class="fbsearch-options-buttons next a11yFocus"
-                      label="search.Next" tooltiptext="search.tip.Next"
-                      oncommand="searchNext()" role="menuitem" />
-              </xul:hbox>
-              <xul:box anonid="endPanelFocus" class="panelFocusBound" onfocus="endFocusHandler()" />
-            </xul:vbox>
-        </xul:panel>
-        <xul:box anonid="endTextFocus" class="panelFocusBound" onfocus="endTextFocusHandler()" />
-    </content>
-
-    <implementation>
-        <constructor><![CDATA[
-            var searchBox = document.getAnonymousElementByAttribute(this, "anonid", "searchBox");
-            var optionsPopup = document.getElementById("fbSearchOptionsPanel");
-
-            var self = this;
-
-            this.onFocusSearchBox = function(event)
-            {
-                self.focusHandler(event);
-            };
-
-            this.onFocusOptionsPopup = function(event)
-            {
-                self.panelFocusHandler(event);
-            };
-
-            searchBox.addEventListener("focus", this.onFocusSearchBox, true);
-            optionsPopup.addEventListener("focus", this.onFocusOptionsPopup, true);
-
-            // Dynamically set noautohide to avoid mozilla bug 545265.
-            optionsPopup.addEventListener("popupshowing", function runOnce()
-            {
-                optionsPopup.removeEventListener("popupshowing", runOnce, false);
-                optionsPopup.setAttribute("noautohide", true);
-            }, false);
-        ]]></constructor>
-
-        <destructor><![CDATA[
-            var searchBox = document.getAnonymousElementByAttribute(this, "anonid", "searchBox");
-            var optionsPopup = document.getElementById("fbSearchOptionsPanel");
-
-            searchBox.removeEventListener("focus", this.onFocusSearchBox, true);
-            optionsPopup.removeEventListener("focus", this.onFocusOptionsPopup, true);
-        ]]></destructor>
-
-        <property name="value">
-            <xbl:getter><![CDATA[
-                var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
-                    "searchBox");
-                return searchBox.value;
-            ]]></xbl:getter>
-
-            <xbl:setter><![CDATA[
-                var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
-                    "searchBox");
-                searchBox.setAttribute("active-search", !!val);
-                searchBox.value = val;
-            ]]></xbl:setter>
-        </property>
-
-        <property name="placeholder">
-            <xbl:getter><![CDATA[
-                var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
-                    "searchBox");
-                return searchBox.placeholder;
-            ]]></xbl:getter>
-
-            <xbl:setter><![CDATA[
-                var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
-                    "searchBox");
-                searchBox.placeholder = val;
-            ]]></xbl:setter>
-        </property>
-
-        <property name="status">
-            <xbl:getter><![CDATA[
-                return Firebug.Search.status;
-            ]]></xbl:getter>
-
-            <xbl:setter><![CDATA[
-                var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
-                    "searchBox");
-                Firebug.Search.status = searchBox.value == "" || val || "notfound";
-                searchBox.setAttribute("status", Firebug.Search.status);
-                searchBox.placeholder = "";
-            ]]></xbl:setter>
-        </property>
-
-        <property name="optionsShown">
-            <xbl:getter><![CDATA[
-                var optionsPopup = document.getElementById("fbSearchOptionsPanel");
-                return optionsPopup.state == "open";
-            ]]></xbl:getter>
-        </property>
-
-        <!-- Flag indicating that the child of the panel has or just had focus -->
-        <field name="panelHasFocus" />
-
-        <!-- Timer to close the popup, set on blur. Any kind of focus that directly follows
-        the blur should clear it with clearBlurTimeout(). -->
-        <field name="blurTimeout">null</field>
-
-        <method name="clearBlurTimeout">
-            <body><![CDATA[
-                if (this.blurTimeout !== null) {
-                    clearTimeout(this.blurTimeout);
-                    this.blurTimeout = null;
-                }
-            ]]></body>
-        </method>
-
-        <method name="updateOptions">
-            <parameter name="menuItems" />
-            <body><![CDATA[
-                var searchOptions = document.getAnonymousElementByAttribute(this, "anonid",
-                    "searchOptionsList");
-                FBL.eraseNode(searchOptions);
-
-                if (menuItems)
-                {
-                    for (var i=0; i<menuItems.length; i++)
-                    {
-                        var checkbox = document.createElement("checkbox");
-                        checkbox.className = "fbsearch-options-label a11yFocus";
-                        checkbox.setAttribute("role", "menuitemcheckbox")
-                        FBL.setItemIntoElement(checkbox, menuItems[i]);
-
-                        searchOptions.appendChild(checkbox);
-                    }
-                }
-            ]]></body>
-        </method>
-
-        <method name="showOptions">
-            <body><![CDATA[
-                var searchBox = document.getAnonymousElementByAttribute(this, "anonid", "searchBox");
-                var searchPrev = document.getAnonymousElementByAttribute(this, "anonid", "searchPrev");
-                var searchNext = document.getAnonymousElementByAttribute(this, "anonid", "searchNext");
-
-                FBL.internationalize(searchBox, "label");
-                FBL.internationalize(searchPrev, "label");
-                FBL.internationalize(searchPrev, "tooltiptext");
-                FBL.internationalize(searchNext, "label");
-                FBL.internationalize(searchNext, "tooltiptext");
-
-                var searchMenu = document.getAnonymousElementByAttribute(this, "anonid",
-                    "fbSearchOptionsMenu");
-                var searchDescription = document.getAnonymousElementByAttribute(this, "anonid",
-                    "fbSearchBoxDescription");
-
-                if (searchMenu)
-                    searchMenu.setAttribute("aria-label", FBL.$STR("a11y.labels.search options"));
-
-                if (searchDescription)
-                {
-                    searchDescription.setAttribute("tooltiptext",
-                        FBL.$STR("a11y.labels.Press up or down arrow key for search options"));
-                }
-
-                var optionsPopup = document.getElementById("fbSearchOptionsPanel");
-                var position = (Firebug.getPlacement() == "detached" ? "after_end" : "before_end");
-
-                this.focused = true;
-                optionsPopup.setAttribute("position", position);
-                var popupBoxObject = optionsPopup.popupBoxObject;
-                popupBoxObject.setConsumeRollupEvent(popupBoxObject.ROLLUP_NO_CONSUME);
-                optionsPopup.openPopup(this, position, 0, 0, false, false);
-
-                this.clearBlurTimeout();
-            ]]></body>
-        </method>
-
-        <method name="hideOptions">
-            <body><![CDATA[
-                var optionsPopup = document.getElementById("fbSearchOptionsPanel");
-                optionsPopup.hidePopup();
-
-                this.clearBlurTimeout();
-            ]]></body>
-        </method>
-
-        <method name="searchNext">
-            <body><![CDATA[
-                this.status = Firebug.Search.searchNext(Firebug.currentContext);
-            ]]></body>
-        </method>
-
-        <method name="searchPrev">
-            <body><![CDATA[
-                this.status = Firebug.Search.searchPrev(Firebug.currentContext);
-            ]]></body>
-        </method>
-
-        <method name="focus">
-            <body><![CDATA[
-                var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
-                    "searchBox");
-                searchBox.focus();
-            ]]></body>
-        </method>
-
-        <method name="select">
-            <body><![CDATA[
-                var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
-                    "searchBox");
-                searchBox.select();
-            ]]></body>
-        </method>
-
-        <!-- Focus management handlers. These must be defined as methods and registered
-            using addEventListener or attribute registration as XBL handlers do not
-            appear to allow access to anonymous event targets when capturing. -->
-        <method name="focusHandler">
-            <parameter name="event" />
-            <body><![CDATA[
-                this.panelHasFocus = false;
-                this.clearBlurTimeout();
-
-                if (!FBL.hasClass(event.target, "panelFocusBound") && !this.optionsShown)
-                {
-                    this.showOptions();
-                }
-            ]]></body>
-        </method>
-
-        <method name="panelFocusHandler">
-            <parameter name="event" />
-            <body><![CDATA[
-                this.clearBlurTimeout();
-
-                if (!FBL.hasClass(event.target, "panelFocusBound"))
-                    this.panelHasFocus = true;
-            ]]></body>
-        </method>
-
-        <method name="endTextFocusHandler">
-            <body><![CDATA[
-                this.clearBlurTimeout();
-
-                if (this.panelHasFocus)
-                {
-                    // The user has just tabbed out of the panel
-                    document.commandDispatcher.advanceFocus();
-                    this.panelHasFocus = false;
-                }
-                else if (this.optionsShown)
-                {
-                    // The user has just tabbed out of the search box (and into the panel)
-                    var optionsPopup = document.getElementById("fbSearchOptionsPanel");
-                    document.commandDispatcher.advanceFocusIntoSubtree(optionsPopup);
-                }
-                else
-                {
-                    // The user has just reverse tabbed from the next tab target
-                    this.showOptions();
-
-                    var searchNext = document.getAnonymousElementByAttribute(this, "anonid",
-                        "searchNext");
-                    setTimeout(function() { searchNext.focus(); }, 0);
-                    this.panelHasFocus = true;
-                }
-            ]]></body>
-        </method>
-
-        <method name="startFocusHandler">
-            <body><![CDATA[
-                if (this.panelHasFocus)
-                {
-                    // The user has shift-tabbed out of the panel
-                    var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
-                        "searchBox");
-                    searchBox.focus();
-                    this.panelHasFocus = false;
-                }
-                else
-                {
-                    // The user has just tabbed into the panel
-                    document.commandDispatcher.advanceFocus();
-                    this.panelHasFocus = true;
-                }
-            ]]></body>
-        </method>
-
-        <method name="endFocusHandler">
-            <body><![CDATA[
-                // The user has just tabbed out of the panel
-                this.hideOptions();
-
-                var endTextFocus = document.getAnonymousElementByAttribute(this, "anonid",
-                    "endTextFocus");
-                endTextFocus.focus();
-            ]]></body>
-        </method>
-
-        <method name="onSearchBoxKeyUp">
-            <parameter name="event" />
-            <parameter name="textbox" />
-            <body><![CDATA[
-                textbox.setAttribute("active-search", !!textbox.value);
-
-                if (!Firebug.A11yModel || !Firebug.A11yModel.isEnabled())
-                    return;
-                if (event.keyCode ==  KeyEvent.DOM_VK_UP || event.keyCode ==  KeyEvent.DOM_VK_DOWN)
-                {
-                    var goingDown = (event.keyCode == KeyEvent.DOM_VK_DOWN);
-                    var optionsPopup = document.getElementById("fbSearchOptionsPanel");
-                    var items = optionsPopup.getElementsByClassName("a11yFocus");
-                    if (!optionsPopup || !items)
-                        return;
-                    if (optionsPopup.state == "closed")
-                        this.showOptions();
-
-                    setTimeout(FBL.bindFixed(function()
-                    {
-                        items[goingDown ? 0 : items.length -1].focus();
-                    }));
-                }
-                else if (event.keyCode == KeyEvent.DOM_VK_ESCAPE)
-                {
-                    this.hideOptions();
-                }
-            ]]></body>
-        </method>
-
-        <method name="onSearchIconClick">
-            <parameter name="event" />
-            <parameter name="textbox" />
-            <body><![CDATA[
-                if (textbox.value)
-                {
-                    this.value = "";
-                    Firebug.Search.update(Firebug.currentContext);
-                }
-                else
-                {
-                    this.optionsShown ? this.hideOptions() : this.showOptions();
-                }
-
-                if (!this.focused)
-                    this.focus();
-            ]]></body>
-        </method>
-    </implementation>
-
-    <handlers>
-        <handler event="keypress"><![CDATA[
-            if (event.keyCode == KeyEvent.DOM_VK_UP)
-            {
-                if (!FBL.isControl(event))
-                    this.value = Firebug.Search.cycleHistory(1);
-                else
-                    this.searchPrev();
-            }
-            else if (event.keyCode == KeyEvent.DOM_VK_DOWN)
-            {
-                if (!FBL.isControl(event))
-                    this.value = Firebug.Search.cycleHistory(-1);
-                else
-                    this.searchNext();
-            }
-            else if (event.keyCode == KeyEvent.DOM_VK_ESCAPE)
-            {
-                var optionsPopup = document.getElementById("fbSearchOptionsPanel");
-                var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
-                    "searchBox");
-                if (!optionsPopup || !searchBox)
-                    return;
-                searchBox.focus();
-                if (optionsPopup.state == "open")
-                {
-                    event.stopPropagation(); // prevent cmd popup toggle
-                    optionsPopup.hidePopup();
-                }
-                else
-                {
-                    return;
-                }
-            }
-            else if (event.keyCode ==  KeyEvent.DOM_VK_RETURN)
-            {
-                if (FBL.isShift(event))
-                    this.searchPrev();
-                else if (FBL.isControl(event))
-                    FBL.dispatch([Firebug.A11yModel], "moveToSearchMatch");
-                else
-                    this.searchNext();
-            }
-            else
-            {
-                return;
-            }
-
-            FBL.cancelEvent(event);
-        ]]></handler>
-
-        <handler event="input"><![CDATA[
-            Firebug.Search.update(Firebug.currentContext);
-        ]]></handler>
-
-        <handler event="popupshowing"><![CDATA[
-            this.panelHasFocus = false;
-        ]]></handler>
-
-        <handler event="blur" phase="capturing"><![CDATA[
-            this.clearBlurTimeout();
-            this.blurTimeout = setTimeout(function()
-            {
-                hideOptions();
-                status = "noSearch";
-                focused = false;
-            }, 0);
-        ]]></handler>
-    </handlers>
-</binding>
-
 <binding id="commandEditor" extends="chrome://global/content/bindings/textbox.xml#textarea">
     <handlers>
         <handler event="input"><![CDATA[
@@ -1905,11 +1473,7 @@
             event.preventDefault();
         ]]></handler>
 
-        <handler event="keypress" keycode="VK_RETURN" modifiers="meta" preventdefault="true"><![CDATA[
-            Firebug.CommandLine.enter(Firebug.currentContext);
-        ]]></handler>
-
-        <handler event="keypress" keycode="VK_RETURN" modifiers="control" preventdefault="true"><![CDATA[
+        <handler event="keypress" keycode="VK_RETURN" modifiers="accel" preventdefault="true"><![CDATA[
             Firebug.CommandLine.enter(Firebug.currentContext);
         ]]></handler>
 
@@ -1919,34 +1483,4 @@
     </handlers>
 </binding>
 
-<binding id="splitmenu" extends="chrome://global/content/bindings/menu.xml#menuitem-base">
-    <content align="stretch">
-        <xul:menuitem anonid="item" flex="1"
-            class="menuitem-tooltip split-menuitem-item"
-            xbl:inherits="label,key,image,value,checked" allowevents="true"/>
-        <xul:hbox class="split-menu-right-image" xbl:inherits="_moz-menuactive" >
-            <xul:hbox align="center" class="menu-right" xbl:inherits="_moz-menuactive,disabled">
-                <xul:image/>
-            </xul:hbox>
-        </xul:hbox>
-        <children includes="menupopup"/>
-    </content>
-
-    <implementation implements="nsIDOMXULSelectControlItemElement, nsIDOMXULContainerItemElement, nsIAccessibleProvider">
-        <constructor><![CDATA[
-            if (this.getAttribute("iconic") == "true")
-            {
-                this.item.classList.remove("menuitem-tooltip");
-                this.item.classList.add("menuitem-iconic-tooltip");
-                this.item.classList.add("menuitem-iconic");
-            }
-            // workaround for 3.6 bug
-            this.item.classList.add("split-menuitem-item");
-      ]]></constructor>
-
-      <field name="item" readonly="true">
-          document.getAnonymousElementByAttribute(this, "anonid", "item");
-      </field>
-    </implementation>
-</binding>
 </bindings>
diff --git a/content/firebug/firefox/browserCommands.js b/content/firebug/firefox/browserCommands.js
index 112727f..dbb1f1d 100644
--- a/content/firebug/firefox/browserCommands.js
+++ b/content/firebug/firefox/browserCommands.js
@@ -40,17 +40,8 @@ var BrowserCommands =
     {
         this.overlayCommands(doc);
         this.overlayShortcuts(doc);
-
-        this.removeInspectorShortcutAsync(doc);
     },
 
-    shutdown: function(doc)
-    {
-        this.restoreInspectorShortcut(doc);
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
     overlayCommands: function(doc)
     {
         $command(doc, "cmd_firebug_closeFirebug", "Firebug.closeFirebug(true);");
@@ -104,54 +95,6 @@ var BrowserCommands =
         }
 
         keyset.parentNode.insertBefore(keyset, keyset.nextSibling);
-    },
-
-    /**
-     * Remove the default Inspector shortcut (Ctrl+Shift+C), Firebug's one is used instead.
-     */
-    removeInspectorShortcutAsync: function(doc)
-    {
-        // Don't remove the devtools inspector shortcut if default
-        // devtools settings should be used.
-        var defaultSettings = Options.get("defaultDevToolsSetting");
-        if (defaultSettings)
-            return;
-
-        // Don't remove the devtools inspector shortcut if Firebug's one is customized
-        // and, so different.
-        var inspectorShortcut = Options.get("key.shortcut.toggleInspecting");
-        var inspectorShortcutDefault = Options.getDefault("key.shortcut.toggleInspecting");
-        if (inspectorShortcut != inspectorShortcutDefault)
-            return;
-
-        if (this.removeInspectorShortcut(doc))
-            return;
-
-        // The shortcut is lazy loaded, so we need a timeout loop. Not nice, but it works.
-        var self = this;
-        doc.defaultView.setTimeout(function()
-        {
-            self.removeInspectorShortcutAsync(doc);
-        }, 100);
-    },
-
-    removeInspectorShortcut: function(doc)
-    {
-        this.keyInspector = doc.getElementById("key_inspector");
-        if (!this.keyInspector)
-            return;
-
-        this.keyInspector.setAttribute("disabled", "true");
-
-        return this.keyInspector;
-    },
-
-    restoreInspectorShortcut: function(doc)
-    {
-        if (!this.keyInspector)
-            return;
-
-        this.keyInspector.removeAttribute("disabled");
     }
 };
 
diff --git a/content/firebug/firefox/browserMenu.js b/content/firebug/firefox/browserMenu.js
index e696f58..4a0f96a 100644
--- a/content/firebug/firefox/browserMenu.js
+++ b/content/firebug/firefox/browserMenu.js
@@ -27,17 +27,16 @@ var BrowserMenu =
     overlayStartButtonMenu: function(doc)
     {
         $menupopupOverlay(doc, $(doc, "mainPopupSet"), [
-            $menupopup(doc, 
+            $menupopup(doc,
             {
                 id: "fbStatusContextMenu",
                 onpopupshowing: "Firebug.browserOverlay.onOptionsShowing(this)"
             },
             [
-                $menu(doc, 
+                $menu(doc,
                 {
                     label: "firebug.uiLocation",
-                    tooltiptext: "firebug.menu.tip.UI_Location",
-                    "class": "fbInternational"
+                    tooltiptext: "firebug.menu.tip.UI_Location"
                 },
                 [
                     $menupopup(doc, {
@@ -99,7 +98,7 @@ var BrowserMenu =
      * There are more instances of Firebug Menu (e.g. one in Firefox -> Tools -> Web Developer
      * and one in Firefox 4 (top-left orange button menu) -> Web Developer
      *
-     * If extensions want to override the menu thay need to iterate all existing instance
+     * If extensions want to override the menu they need to iterate all existing instance
      * using document.querySelectorAll(".fbFirebugMenuPopup") and append new menu items to all
      * of them. Iteration must be done in the global space (browser.xul)
      *
@@ -118,8 +117,7 @@ var BrowserMenu =
                 label: "firebug.ShowFirebug",
                 tooltiptext: "firebug.menu.tip.Open_Firebug",
                 command: "cmd_firebug_toggleFirebug",
-                key: "key_firebug_toggleFirebug",
-                "class": "fbInternational"
+                key: "key_firebug_toggleFirebug"
             }),
             $menuitem(doc,
             {
@@ -127,16 +125,14 @@ var BrowserMenu =
                 label: "firebug.Deactivate_Firebug",
                 tooltiptext: "firebug.tip.Deactivate_Firebug",
                 command: "cmd_firebug_closeFirebug",
-                key: "key_firebug_closeFirebug",
-                "class": "fbInternational"
+                key: "key_firebug_closeFirebug"
             }),
 
             // Firebug UI position
             $menu(doc,
             {
                 label: "firebug.uiLocation",
-                tooltiptext: "firebug.menu.tip.UI_Location",
-                "class": "fbInternational"
+                tooltiptext: "firebug.menu.tip.UI_Location"
             },
             [
                 $menupopup(doc, {
@@ -150,15 +146,14 @@ var BrowserMenu =
             $menu(doc,
             {
                 id: "FirebugMenu_OpenWith",
-                label:"firebug.OpenWith",
-                tooltiptext:"firebug.menu.tip.Open_With",
-                "class": "fbInternational",
+                label: "firebug.OpenWith",
+                tooltiptext: "firebug.menu.tip.Open_With",
                 insertafter: "menu_firebug_openActionsSeparator",
                 openFromContext: "true",
                 command: "cmd_firebug_openInEditor"
             },
             [
-                $menupopup(doc,{id:"fbFirebugMenu_OpenWith",
+                $menupopup(doc, {id: "fbFirebugMenu_OpenWith",
                     onpopupshowing: "return Firebug.browserOverlay.onEditorsShowing(this);"})
             ]),
 
@@ -167,11 +162,10 @@ var BrowserMenu =
             {
                 id: "FirebugMenu_TextSize",
                 label: "firebug.TextSize",
-                tooltiptext: "firebug.menu.tip.Text_Size",
-                "class": "fbInternational"
+                tooltiptext: "firebug.menu.tip.Text_Size"
             },
             [
-                $menupopup(doc,{},
+                $menupopup(doc, {},
                 [
                     $menuitem(doc,
                     {
@@ -179,8 +173,7 @@ var BrowserMenu =
                         label: "firebug.IncreaseTextSize",
                         tooltiptext: "firebug.menu.tip.Increase_Text_Size",
                         command: "cmd_firebug_increaseTextSize",
-                        key: "key_firebug_increaseTextSize",
-                        "class": "fbInternational"
+                        key: "key_firebug_increaseTextSize"
                     }),
                     $menuitem(doc,
                     {
@@ -188,8 +181,7 @@ var BrowserMenu =
                         label: "firebug.DecreaseTextSize",
                         tooltiptext: "firebug.menu.tip.Decrease_Text_Size",
                         command: "cmd_firebug_decreaseTextSize",
-                        key: "key_firebug_decreaseTextSize",
-                        "class": "fbInternational"
+                        key: "key_firebug_decreaseTextSize"
                     }),
                     $menuitem(doc,
                     {
@@ -197,8 +189,7 @@ var BrowserMenu =
                         label: "firebug.NormalTextSize",
                         tooltiptext: "firebug.menu.tip.Normal_Text_Size",
                         command: "cmd_firebug_normalTextSize",
-                        key: "key_firebug_normalTextSize",
-                        "class": "fbInternational"
+                        key: "key_firebug_normalTextSize"
                     }),
                 ])
             ]),
@@ -208,8 +199,7 @@ var BrowserMenu =
             {
                 id: "FirebugMenu_Options",
                 label: "firebug.Options",
-                tooltiptext: "firebug.menu.tip.Options",
-                "class": "fbInternational"
+                tooltiptext: "firebug.menu.tip.Options"
             },
             [
                 $menupopup(doc,
@@ -225,8 +215,7 @@ var BrowserMenu =
                         label: "firebug.Show_Error_Count",
                         tooltiptext: "firebug.menu.tip.Show_Error_Count",
                         oncommand: "Firebug.browserOverlay.onToggleOption(this)",
-                        option: "showErrorCount",
-                        "class": "fbInternational"
+                        option: "showErrorCount"
                     }),
                     $menuitem(doc,
                     {
@@ -235,8 +224,7 @@ var BrowserMenu =
                         label: "firebug.menu.Show_Info_Tips",
                         tooltiptext: "firebug.menu.tip.Show_Info_Tips",
                         oncommand: "Firebug.browserOverlay.onToggleOption(this)",
-                        option: "showInfoTips",
-                        "class": "fbInternational"
+                        option: "showInfoTips"
                     }),
                     $menuitem(doc,
                     {
@@ -245,8 +233,7 @@ var BrowserMenu =
                         label: "ShadeBoxModel",
                         tooltiptext: "inspect.option.tip.Shade_Box_Model",
                         oncommand: "Firebug.browserOverlay.onToggleOption(this)",
-                        option: "shadeBoxModel",
-                        "class": "fbInternational"
+                        option: "shadeBoxModel"
                     }),
                     $menuitem(doc,
                     {
@@ -255,8 +242,7 @@ var BrowserMenu =
                         label: "ShowQuickInfoBox",
                         tooltiptext: "inspect.option.tip.Show_Quick_Info_Box",
                         oncommand: "Firebug.browserOverlay.onToggleOption(this)",
-                        option: "showQuickInfoBox",
-                        "class": "fbInternational"
+                        option: "showQuickInfoBox"
                     }),
                     $menuitem(doc,
                     {
@@ -265,8 +251,7 @@ var BrowserMenu =
                         label: "firebug.menu.Enable_Accessibility_Enhancements",
                         tooltiptext: "firebug.menu.tip.Enable_Accessibility_Enhancements",
                         oncommand: "Firebug.browserOverlay.onToggleOption(this)",
-                        option: "a11y.enable",
-                        "class": "fbInternational"
+                        option: "a11y.enable"
                     }),
                     $menuitem(doc,
                     {
@@ -275,8 +260,7 @@ var BrowserMenu =
                         label: "firebug.menu.Activate_Same_Origin_URLs2",
                         tooltiptext: "firebug.menu.tip.Activate_Same_Origin_URLs",
                         oncommand: "Firebug.browserOverlay.onToggleOption(this)",
-                        option: "activateSameOrigin",
-                        "class": "fbInternational"
+                        option: "activateSameOrigin"
                     }),
                     $menuitem(doc,
                     {
@@ -285,8 +269,7 @@ var BrowserMenu =
                         label: "firebug.menu.Vertical_Panels",
                         tooltiptext: "firebug.menu.tip.Vertical_Panels",
                         command: "cmd_firebug_toggleOrient",
-                        option: "viewPanelOrient",
-                        "class": "fbInternational"
+                        option: "viewPanelOrient"
                     }),
                     $menuseparator(doc, {id: "menu_firebug_optionsSeparator"}),
                     $menuitem(doc,
@@ -294,40 +277,36 @@ var BrowserMenu =
                         id: "menu_firebug_resetAllOptions",
                         label: "firebug.menu.Reset_All_Firebug_Options",
                         tooltiptext: "firebug.menu.tip.Reset_All_Firebug_Options",
-                        command: "cmd_firebug_resetAllOptions",
-                        "class": "fbInternational"
+                        command: "cmd_firebug_resetAllOptions"
                     }),
                 ])
             ]),
 
-            $menuseparator(doc,{id: "FirebugBetweenOptionsAndSites", collapsed: "true"}),
+            $menuseparator(doc, {id: "FirebugBetweenOptionsAndSites", collapsed: "true"}),
 
             // Sites
             $menu(doc,
             {
                 id: "FirebugMenu_Sites",
                 label: "firebug.menu.Firebug_Online",
-                tooltiptext: "firebug.menu.tip.Firebug_Online",
-                "class": "fbInternational"
+                tooltiptext: "firebug.menu.tip.Firebug_Online"
             },
             [
-                $menupopup(doc,{},
+                $menupopup(doc, {},
                 [
                     $menuitem(doc,
                     {
                         id: "menu_firebug_firebugUrlWebsite",
                         label: "firebug.Website",
                         tooltiptext: "firebug.menu.tip.Website",
-                        oncommand: "Firebug.chrome.visitWebsite('main')",
-                        "class": "fbInternational"
+                        oncommand: "Firebug.chrome.visitWebsite('main')"
                     }),
                     $menuitem(doc,
                     {
                         id: "menu_firebug_firebugUrlExtensions",
                         label: "firebug.menu.Extensions",
                         tooltiptext: "firebug.menu.tip.Extensions",
-                        oncommand: "Firebug.chrome.visitWebsite('extensions')",
-                        "class": "fbInternational"
+                        oncommand: "Firebug.chrome.visitWebsite('extensions')"
                     }),
                     $menuitem(doc,
                     {
@@ -335,48 +314,42 @@ var BrowserMenu =
                         label: "firebug.help",
                         tooltiptext: "firebug.menu.tip.help",
                         command: "cmd_firebug_openHelp",
-                        key: "key_firebug_help",
-                        "class": "fbInternational"
+                        key: "key_firebug_help"
                     }),
                     $menuitem(doc,
                     {
                         id: "menu_firebug_firebugDoc",
                         label: "firebug.Documentation",
                         tooltiptext: "firebug.menu.tip.Documentation",
-                        oncommand: "Firebug.chrome.visitWebsite('docs')",
-                        "class": "fbInternational"
+                        oncommand: "Firebug.chrome.visitWebsite('docs')"
                     }),
                     $menuitem(doc,
                     {
                         id: "menu_firebug_firebugKeyboard",
                         label: "firebug.KeyShortcuts",
                         tooltiptext: "firebug.menu.tip.Key_Shortcuts",
-                        oncommand: "Firebug.chrome.visitWebsite('keyboard')",
-                        "class": "fbInternational"
+                        oncommand: "Firebug.chrome.visitWebsite('keyboard')"
                     }),
                     $menuitem(doc,
                     {
                         id: "menu_firebug_firebugForums",
                         label: "firebug.Forums",
                         tooltiptext: "firebug.menu.tip.Forums",
-                        oncommand: "Firebug.chrome.visitWebsite('discuss')",
-                        "class": "fbInternational"
+                        oncommand: "Firebug.chrome.visitWebsite('discuss')"
                     }),
                     $menuitem(doc,
                     {
                         id: "menu_firebug_firebugIssues",
                         label: "firebug.Issues",
                         tooltiptext: "firebug.menu.tip.Issues",
-                        oncommand: "Firebug.chrome.visitWebsite('issues')",
-                        "class": "fbInternational"
+                        oncommand: "Firebug.chrome.visitWebsite('issues')"
                     }),
                     $menuitem(doc,
                     {
                         id: "menu_firebug_firebugDonate",
                         label: "firebug.Donate",
                         tooltiptext: "firebug.menu.tip.Donate",
-                        oncommand: "Firebug.chrome.visitWebsite('donate')",
-                        "class": "fbInternational"
+                        oncommand: "Firebug.chrome.visitWebsite('donate')"
                     }),
                 ])
             ]),
@@ -391,8 +364,7 @@ var BrowserMenu =
                 label: "firebug.menu.Customize_shortcuts",
                 tooltiptext: "firebug.menu.tip.Customize_Shortcuts",
                 command: "cmd_firebug_customizeFBKeys",
-                key: "key_firebug_customizeFBKeys",
-                "class": "fbInternational"
+                key: "key_firebug_customizeFBKeys"
             }),
 
             $menuseparator(doc, {id: "menu_firebug_aboutSeparator"}),
@@ -402,7 +374,7 @@ var BrowserMenu =
                 label: "firebug.About",
                 tooltiptext: "firebug.menu.tip.About",
                 oncommand: "Firebug.browserOverlay.openAboutDialog()",
-                "class": "firebugAbout fbInternational"
+                "class": "firebugAbout"
             }),
         ];
     },
@@ -415,11 +387,11 @@ var BrowserMenu =
         // Firefox page context menu
         $menupopupOverlay(doc, $(doc, "contentAreaContextMenu"), [
             $menuseparator(doc),
-            $menuitem(doc,{
+            $menuitem(doc, {
                 id: "menu_firebug_firebugInspect",
                 label: "firebug.InspectElementWithFirebug",
                 command: "cmd_firebug_inspect",
-                "class": "menuitem-iconic fbInternational"
+                "class": "menuitem-iconic"
             })
         ]);
 
@@ -432,15 +404,14 @@ var BrowserMenu =
                     label: "firebug.Firebug",
                     type: "checkbox",
                     key: "key_firebug_toggleFirebug",
-                    command: "cmd_firebug_toggleFirebug",
-                    "class": "fbInternational"
+                    command: "cmd_firebug_toggleFirebug"
                 })
             ],
             {
                 onpopupshowing: "return Firebug.browserOverlay.onViewMenuShowing();"
             }
         );
-        
+
         // SeaMonkey view menu
         $menupopupOverlay(doc, $(doc, "menu_View_Popup"),
             [
@@ -451,7 +422,7 @@ var BrowserMenu =
                     type: "checkbox",
                     key: "key_firebug_toggleFirebug",
                     command: "cmd_firebug_toggleFirebug",
-                    "class": "menuitem-iconic fbInternational"
+                    "class": "menuitem-iconic"
                 })
             ],
             {
@@ -465,7 +436,7 @@ var BrowserMenu =
                 id: "menu_webDeveloper_firebug",
                 position: 1,
                 label: "firebug.Firebug",
-                "class": "menu-iconic fbInternational"
+                "class": "menu-iconic"
             }, [
                 $menupopup(doc, {
                     id: "menu_firebug_firebugMenuPopup",
@@ -481,14 +452,12 @@ var BrowserMenu =
 
         // Firefox Button -> Web Developer Menu
         $menupopupOverlay(doc, $(doc, "appmenu_webDeveloper_popup"), [
-            $splitmenu(doc, {
+            $menu(doc, {
                 id: "appmenu_firebug",
                 position: 1,
-                command: "cmd_firebug_toggleFirebug",
-                key: "key_firebug_toggleFirebug",
                 label: "firebug.Firebug",
                 iconic: "true",
-                "class": "fbInternational"
+                "class": "menu-iconic"
             }, [
                 $menupopup(doc, {
                     id: "appmenu_firebugMenuPopup",
@@ -510,7 +479,7 @@ var BrowserMenu =
                 command: "cmd_firebug_toggleFirebug",
                 key: "key_firebug_toggleFirebug",
                 label: "firebug.Firebug",
-                "class": "menuitem-iconic fbInternational"
+                "class": "menuitem-iconic"
             }, [
                 $menupopup(doc, {
                     id: "toolsmenu_firebugMenuPopup",
diff --git a/content/firebug/firefox/browserOverlay.css b/content/firebug/firefox/browserOverlay.css
index 2c48652..345d6b7 100644
--- a/content/firebug/firefox/browserOverlay.css
+++ b/content/firebug/firefox/browserOverlay.css
@@ -19,27 +19,23 @@
     list-style-image: url(chrome://firebug/skin/firebug16Disabled.png) !important;
 }
 
-#firebug-button[firebugActive="background"] {
-    list-style-image: url(chrome://firebug/skin/firebug16EnabledInBackground.png) !important;
-}
-
 #firebug-button[firebugActive="true"] {
     list-style-image: url(chrome://firebug/skin/firebug16.png) !important;
 }
 
 /* Error badge (displays an error counter). The badge is only visible if error count
    should be displayed */
-#firebug-button .badge {
+#firebug-error-badge {
     display: none;
+    margin: 0;
 }
 
-#firebug-button[showErrors="true"] .badge {
+#firebug-error-badge[showErrors="true"] {
     display: block;
     -moz-box-sizing: border-box;
-    margin: 0;
 }
 
-#firebug-button .badge > .label {
+#firebug-error-label {
     -moz-box-sizing: border-box;
     visibility: hidden;
     font-size: 10px;
@@ -65,7 +61,7 @@
                 0 0 3px rgba(153, 0, 0, 0.9);
 }
 
-#firebug-button[showErrors="true"]:not([errorCount="0"]) .badge .label {
+#firebug-error-badge[showErrors="true"] > #firebug-error-label:not([errorCount="0"]) {
     visibility: visible;
 }
 
@@ -73,24 +69,25 @@
 #addon-bar #firebug-button dropmarker {
     display: none;
 }
-#addon-bar #firebug-button .fb-toolbarbutton{
+
+#addon-bar #firebug-button .fb-toolbarbutton {
     padding: 0 3px!important;
 }
 
 /* Slightly different positions of the badge for individual toolbars */
-#nav-bar #firebug-button .badge {
+#nav-bar #firebug-error-badge {
     margin: 3px -10px 0 -8px;
 }
 
-#addon-bar #firebug-button .badge {
+#addon-bar #firebug-error-badge {
     margin-top: 1px;
 }
 
-#TabsToolbar #firebug-button .badge {
+#TabsToolbar #firebug-error-badge {
     margin-top: 4px;
 }
 
-#toolbar-menubar #firebug-button .badge {
+#toolbar-menubar #firebug-error-badge {
     margin-top: 4px;
 }
 
@@ -163,10 +160,6 @@
     color: gray;
 }
 
-.firebugButtonTooltip .activeInBackground {
-    color: gray;
-}
-
 .firebugButtonTooltip .enablement {
     border-top: 1px gray dotted;
     margin-top: 5px;
diff --git a/content/firebug/firefox/browserOverlay.js b/content/firebug/firefox/browserOverlay.js
index dddc805..67784f8 100644
--- a/content/firebug/firefox/browserOverlay.js
+++ b/content/firebug/firefox/browserOverlay.js
@@ -5,14 +5,16 @@ define([
     "firebug/lib/options",
     "firebug/lib/locale",
     "firebug/lib/array",
+    "firebug/lib/string",
     "firebug/lib/xpcom",
     "firebug/firefox/browserOverlayLib",
     "firebug/firefox/browserCommands",
     "firebug/firefox/browserMenu",
     "firebug/firefox/browserToolbar",
+    "firebug/lib/system",
 ],
-function(FBTrace, Options, Locale, Arr, Xpcom, BrowserOverlayLib, BrowserCommands, BrowserMenu,
-    BrowserToolbar) {
+function(FBTrace, Options, Locale, Arr, Str, Xpcom, BrowserOverlayLib, BrowserCommands,
+    BrowserMenu, BrowserToolbar, System) {
 
 with (BrowserOverlayLib) {
 
@@ -26,10 +28,16 @@ var Cu = Components.utils;
 Locale.registerStringBundle("chrome://firebug/locale/firebug.properties");
 Locale.registerStringBundle("chrome://firebug/locale/cookies.properties");
 Locale.registerStringBundle("chrome://firebug/locale/selectors.properties");
+Locale.registerStringBundle("chrome://firebug/locale/keys.properties");
+Locale.registerStringBundle("chrome://global-platform/locale/platformKeys.properties");
+Locale.registerStringBundle("chrome://global/locale/keys.properties");
 
 Cu.import("resource://firebug/loader.js");
 Cu.import("resource://firebug/fbtrace.js");
 
+var servicesScope = {};
+Cu.import("resource://gre/modules/Services.jsm", servicesScope);
+
 const firstRunPage = "https://getfirebug.com/firstrun#Firebug ";
 
 // ********************************************************************************************* //
@@ -63,7 +71,7 @@ BrowserOverlay.prototype =
 
         var node = $stylesheet(this.doc, "chrome://firebug/content/firefox/browserOverlay.css");
 
-        if (this.win.navigator.platform.search("Mac") == 0)
+        if (System.isMac(this.win))
             $stylesheet(this.doc, "chrome://firebug/content/firefox/macBrowserOverlay.css");
 
         this.nodesToRemove.push(node);
@@ -81,17 +89,10 @@ BrowserOverlay.prototype =
         this.allPagesActivation();
     },
 
-    shutdown: function()
-    {
-        this.unloadContextMenuOverlay();
-
-        BrowserCommands.shutdown(this.doc);
-    },
-
     internationalize: function()
     {
         // Internationalize all elements with 'fbInternational' class. Clone
-        // before internationalizing.
+        // before internationalization.
         var elements = Arr.cloneArray(this.doc.getElementsByClassName("fbInternational"));
         Locale.internationalizeElements(this.doc, elements, ["label", "tooltiptext", "aria-label"]);
     },
@@ -152,7 +153,11 @@ BrowserOverlay.prototype =
         var self = this;
         scriptSources.forEach(function(url)
         {
-            $script(self.doc, url);
+            servicesScope.Services.scriptloader.loadSubScript(url, self.doc);
+
+            // xxxHonza: This doesn't work since Firefox 28. From some reason the script
+            // isn't parsed when inserted into the second browser window. See issue 6731
+            // $script(self.doc, url);
         });
 
         // Create Firebug splitter element.
@@ -336,11 +341,11 @@ BrowserOverlay.prototype =
         for (var i=0; i<positions.length; i++)
         {
             var pos = positions[i];
-            var label = pos.charAt(0).toUpperCase() + pos.slice(1);
+            var label = Str.capitalize(pos);
 
             var item = $menuitem(this.doc, {
-                label: Locale.$STR("firebug.menu." + label),
-                tooltiptext: Locale.$STR("firebug.menu.tip." + label),
+                label: "firebug.menu." + label,
+                tooltiptext: "firebug.menu.tip." + label,
                 type: "radio",
                 oncommand: oncommand.replace("%pos%", pos),
                 checked: (currPos == pos)
diff --git a/content/firebug/firefox/browserOverlayLib.js b/content/firebug/firefox/browserOverlayLib.js
index 93e8ccc..b94f4d1 100644
--- a/content/firebug/firefox/browserOverlayLib.js
+++ b/content/firebug/firefox/browserOverlayLib.js
@@ -48,6 +48,9 @@ var BrowserOverlayLib =
         if (attributes.label)
             attributes.label = Locale.$STR(attributes.label);
 
+        if (attributes.title)
+            attributes.title = Locale.$STR(attributes.title);
+
         if (attributes.tooltiptext)
             attributes.tooltiptext = Locale.$STR(attributes.tooltiptext);
 
@@ -124,11 +127,6 @@ var BrowserOverlayLib =
         return this.$el(doc, "menuitem", attrs);
     },
 
-    $splitmenu: function(doc, attrs, children)
-    {
-        return this.$el(doc, "splitmenu", attrs, children);
-    },
-
     $menupopupOverlay: function(doc, parent, children, attributes)
     {
         if (!parent)
@@ -184,7 +182,6 @@ var BrowserOverlayLib =
     $toolbarButton: function(doc, id, attrs, children, defaultPos)
     {
         attrs["class"] = "toolbarbutton-1";
-        attrs.firebugRootNode = true;
         attrs.id = id;
 
         // in seamonkey gNavToolbox is null onload
@@ -209,6 +206,32 @@ var BrowserOverlayLib =
         return toolbar.insertItem(id, beforeEl);
     },
 
+    $toolbarItem: function(doc, id, attrs, children, defaultPos)
+    {
+        attrs.id = id;
+
+        // in seamonkey gNavToolbox is null onload
+        this.$el(doc, "toolbaritem", attrs, children,
+            (doc.defaultView.gNavToolbox || this.$(doc, "navigator-toolbox")).palette);
+
+        var selector = "[currentset^='" + id + ",'],[currentset*='," + id +
+        ",'],[currentset$='," + id + "']";
+
+        var toolbar = doc.querySelector(selector);
+        if (!toolbar)
+            return; // todo defaultPos
+
+        var currentset = toolbar.getAttribute("currentset").split(",");
+        var i = currentset.indexOf(id) + 1;
+
+        var len = currentset.length;
+        var beforeEl = null;
+        while (i < len && !(beforeEl = this.$(doc, currentset[i])))
+            i++;
+
+        return toolbar.insertItem(id, beforeEl);
+    },
+
     $tooltip: function(doc, attrs, children)
     {
         return this.$el(doc, "tooltip", attrs, children);
diff --git a/content/firebug/firefox/browserToolbar.js b/content/firebug/firefox/browserToolbar.js
index e3bb146..4da30e4 100644
--- a/content/firebug/firefox/browserToolbar.js
+++ b/content/firebug/firefox/browserToolbar.js
@@ -32,6 +32,7 @@ var BrowserToolbar =
             label: "firebug.Inspect",
             tooltiptext: "firebug.InspectElement",
             observes: "cmd_firebug_toggleInspecting",
+            firebugRootNode: true,
             // Needed for the 'Customize Toolbar' dialog
             style: "list-style-image: url(chrome://firebug/skin/inspect.png); " +
                 "-moz-image-region: rect(0, 16px, 16px, 0);"
@@ -56,18 +57,38 @@ var BrowserToolbar =
             ])
         ]);
 
-        // TODO: why contextmenu doesn't work without cloning
-        $toolbarButton(doc, "firebug-button", {
-            label: "firebug.Firebug",
-            tooltip: "firebug-buttonTooltip",
-            type: "menu-button",
-            command: "cmd_firebug_toggleFirebug",
-            contextmenu: "fbStatusContextMenu",
-            observes: "firebugStatus",
-            // Needed for the 'Customize Toolbar' dialog
-            style: "list-style-image: url(chrome://firebug/skin/firebug16.png); " +
-                "-moz-image-region: rect(0, 16px, 16px, 0);"
-        }, [$(doc, "fbStatusContextMenu").cloneNode(true)]);
+        $toolbarItem(doc, "firebug-badged-button", {
+                title: "firebug.Firebug",
+                firebugRootNode: true
+            },
+            [
+                $el(doc, "stack",{
+                        id: "firebug-error-badge",
+                        onclick: "Firebug.toggleBar(true, 'console');"
+                    },
+                    [
+                        $el(doc, "label", {
+                            id: "firebug-error-label",
+                            value: 0
+                        })
+                    ]
+                ),
+                // TODO: why contextmenu doesn't work without cloning
+                $el(doc, "toolbarbutton", {
+                    id: "firebug-button",
+                    class: "toolbarbutton-1",
+                    label: "firebug.Firebug",
+                    tooltip: "firebug-buttonTooltip",
+                    type: "menu-button",
+                    command: "cmd_firebug_toggleFirebug",
+                    contextmenu: "fbStatusContextMenu",
+                    observes: "firebugStatus",
+                    // Needed for the 'Customize Toolbar' dialog
+                    style: "list-style-image: url(chrome://firebug/skin/firebug16.png); " +
+                        "-moz-image-region: rect(0, 16px, 16px, 0);"
+                }, [$(doc, "fbStatusContextMenu").cloneNode(true)])
+            ]
+        );
     },
 
     customizeToolbar: function(doc)
@@ -76,15 +97,15 @@ var BrowserToolbar =
         // The button is appended only once - if the user removes it, it isn't appended again.
         // TODO: merge into $toolbarButton?
         // toolbarpalette check is for seamonkey, where it is in the document
-        if ((!$(doc, "firebug-button") ||
-            $(doc, "firebug-button").parentNode.tagName == "toolbarpalette")
+        if ((!$(doc, "firebug-badged-button") ||
+            $(doc, "firebug-badged-button").parentNode.tagName == "toolbarpalette")
             && !Options.get("toolbarCustomizationDone"))
         {
             Options.set("toolbarCustomizationDone", true);
 
             // Get the current navigation bar button set (a string of button IDs) and append
             // ID of the Firebug start button into it.
-            var startButtonId = "firebug-button";
+            var startButtonId = "firebug-badged-button";
             var navBarId = "nav-bar";
             var navBar = $(doc, navBarId);
             var currentSet = navBar.currentSet;
diff --git a/content/firebug/firefox/customizeShortcuts.js b/content/firebug/firefox/customizeShortcuts.js
index 619375d..3f63746 100644
--- a/content/firebug/firefox/customizeShortcuts.js
+++ b/content/firebug/firefox/customizeShortcuts.js
@@ -1,29 +1,35 @@
 /* See license.txt for terms of usage */
 /* Reused code from Keyconfig by Dorando: http://mozilla.dorando.at/keyconfig.xpi*/
 
-// ************************************************************************************************
+define([
+    "firebug/lib/trace",
+    "firebug/lib/object",
+    "firebug/lib/locale",
+    "firebug/lib/string",
+    "firebug/lib/events",
+    "firebug/lib/system"
+],
+function(FBTrace, Obj, Locale, Str, Events, System) {
+
+// ********************************************************************************************* //
 // Constants
 
 const Cc = Components.classes;
 const Ci = Components.interfaces;
+const Cu = Components.utils;
 
-Components.utils.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://gre/modules/Services.jsm");
 
 var branch = Services.prefs.getBranch("extensions.firebug.key.shortcut.");
 var defaultBranch = Services.prefs.getDefaultBranch("extensions.firebug.key.shortcut.");
 
-// Initialized from window parameters.
-var FBL;
-var FBTrace;
-var Locale;
-
 // Global variables used by this dialog.
 var shortcutNames = null;
 var gVKNames = [];
-var gLocaleKeys = [];
 var gPlatformKeys = new Object();
 var updatedShortcuts = {};
 var modified = false;
+
 var mustBeKeyChars = {
     VK_SEMICOLON      : ";",
     VK_EQUALS         : "=",
@@ -42,270 +48,225 @@ var mustBeKeyChars = {
     VK_QUOTE          : "'"
 };
 
-// ************************************************************************************************
-// Implemantation
+// ********************************************************************************************* //
+// CustomizeShortcuts Dialog Implementation
 
-function init()
+function CustomizeShortcuts()
 {
-    var args = window.arguments[0];
-    FBL = args.FBL;
-    FBTrace = args.FBTrace;
-    Locale = FBL;
-
-    setKeyInfo();
-    shortcutNames = branch.getChildList("", {});
-    shortcutNames.sort();
-    shortcutNames.forEach(addShortcutRow);
-    setHandlers();
-    document.title = Locale.$STR("customizeShortcuts");
-
-    if (FBTrace.DBG_SHORTCUTS)
-        FBTrace.sysout("shortcuts.init; Customize Shortcuts dialog initialized.");
 }
 
-function setKeyInfo()
+CustomizeShortcuts.prototype =
 {
-    gLocaleKeys = document.getElementById("localeKeys");
-    var platformKeys = document.getElementById("platformKeys");
-    gPlatformKeys.shift = Locale.$STR("VK_SHIFT", platformKeys);
-    gPlatformKeys.meta = Locale.$STR("VK_META", platformKeys);
-    gPlatformKeys.alt = Locale.$STR("VK_ALT", platformKeys);
-    gPlatformKeys.ctrl = Locale.$STR("VK_CONTROL", platformKeys);
-    gPlatformKeys.sep = Locale.$STR("MODIFIER_SEPARATOR", platformKeys);
-
-    switch (Services.prefs.getIntPref("ui.key.accelKey"))
+    initialize: function(win)
     {
-        case KeyEvent.DOM_VK_CONTROL:
-            gPlatformKeys.accel = gPlatformKeys.ctrl;
-            break;
-        case KeyEvent.DOM_VK_ALT:
-            gPlatformKeys.accel = gPlatformKeys.alt;
-            break;
-        case KeyEvent.DOM_VK_META:
-            gPlatformKeys.accel = gPlatformKeys.meta;
-            break;
-        default:
-            gPlatformKeys.accel = (window.navigator.platform.search("Mac") == 0 ? gPlatformKeys.meta : gPlatformKeys.ctrl);
-    }
+        if (FBTrace.DBG_SHORTCUTS)
+            FBTrace.sysout("shortcuts.init; Customize Shortcuts dialog initialized.", win);
 
-    for (var property in KeyEvent)
-        gVKNames[KeyEvent[property]] = property.replace("DOM_", "");
-    gVKNames[8] = "VK_BACK";
-}
+        this.win = win;
 
-function setHandlers()
-{
-    var i;
-    var shortcutSinks = document.getElementsByClassName("shortcutSink");
-    for (i = 0; i < shortcutSinks.length; i++)
-        shortcutSinks[i].addEventListener("keydown", recognizeShortcut, false);
-
-    var resetBtns = document.getElementsByClassName("shortcutResetBtn");
-    for (i = 0; i < resetBtns.length; i++)
-        resetBtns[i].addEventListener("command", handleResetBtn, false);
-}
+        this.setKeyInfo();
 
-function saveChanges()
-{
-    if (!modified)
-        return true;
+        shortcutNames = branch.getChildList("", {});
+        shortcutNames.sort();
+        shortcutNames.forEach(this.addShortcutRow.bind(this));
 
-    shortcutNames.forEach(saveShortcut);
-
-    var e = Services.wm.getEnumerator("navigator:browser");
-    while (e.hasMoreElements())
-    {
-        var fbug = e.getNext().Firebug;
-        fbug && fbug.ShortcutsModel.initShortcuts();
-    }
-    return true;
-}
+        this.setHandlers();
 
-function saveShortcut(shortcutId, index, array)
-{
-    if (shortcutId in updatedShortcuts)
-        branch.setCharPref(shortcutId, updatedShortcuts[shortcutId]);
-}
+        this.win.document.title = Locale.$STR("customizeShortcuts");
+    },
 
-function handleResetBtn(event)
-{
-    var element = event.target.id.replace("_reset", "");
-    if (branch.prefHasUserValue(element))
+    setKeyInfo: function()
     {
-        branch.clearUserPref(element);
-        modified = true;
-    }
+        for (var property in KeyEvent)
+            gVKNames[KeyEvent[property]] = property.replace("DOM_", "");
 
-    event.target.hidden = true;
-    var textbox = document.getElementById(element + "_shortcut");
-    if (textbox)
-        textbox.value = getHumanShortcut(element);
-}
+        gVKNames[8] = "VK_BACK";
+    },
 
-function getHumanShortcut(element, getDefault)
-{
-    var shortcut = (getDefault ? defaultBranch : branch).getCharPref(element);
-    var tokens = shortcut.split(" ");
-    var keyCode = tokens.pop();
-
-    if (keyCode.length == 1)
-        return getFormattedKey(tokens.join(","), keyCode, null);
-    else
-        return getFormattedKey(tokens.join(","), null, keyCode);
-}
+    setHandlers: function()
+    {
+        var shortcutSinks = this.win.document.getElementsByClassName("shortcutSink");
+        for (var i=0; i<shortcutSinks.length; i++)
+            shortcutSinks[i].addEventListener("keydown", this.recognizeShortcut.bind(this), false);
 
-function addShortcutRow(element, index, array)
-{
-    // Get key configuration from preference
-    var shortcut = getHumanShortcut(element);
-    var defaultShortcut = getHumanShortcut(element, true);
-    var rows = document.getElementById("shortcutGridRows");
-    var row = document.createElement("row");
-
-    var label = document.createElement("label");
-    // Get the label from firebug.properties
-    var labelText = Locale.$STR("firebug.shortcut."+element+".label");
-    var tooltipText = Locale.$STR("firebug.shortcut.tip."+element);
-
-    // $STR defaults to property name (label) if it's not defined. We don't want that
-    if (labelText == "label")
-        labelText = element;
-    label.setAttribute("value", labelText);
-    row.appendChild(label);
-
-    var textbox = document.createElement("textbox");
-    textbox.id = element + "_shortcut";
-    textbox.className = "shortcutSink";
-    row.setAttribute("tooltiptext", tooltipText != "tip" ? tooltipText : "");
-    textbox.setAttribute("value", shortcut);
-    textbox.setAttribute("default_value", defaultShortcut);
-    row.appendChild(textbox);
-
-    var resetBtn = document.createElement("toolbarbutton");
-    resetBtn.id = element + "_reset";
-    resetBtn.setAttribute("label", Locale.$STR("a11y.labels.reset"));
-    resetBtn.setAttribute("aria-label", Locale.$STRF("a11y.labels.reset_shortcut", [labelText]));
-    resetBtn.className = "shortcutResetBtn";
-    resetBtn.hidden = defaultShortcut == shortcut;
-    row.appendChild(resetBtn);
-    rows.appendChild(row);
-}
+        var resetBtns = this.win.document.getElementsByClassName("shortcutResetBtn");
+        for (var i=0; i<resetBtns.length; i++)
+            resetBtns[i].addEventListener("command", this.handleResetBtn.bind(this), false);
+    },
 
-function recognizeShortcut(event)
-{
-    // We're using keydown, so we always start with keycode
-    var shortcut = "";
-    if ([KeyEvent.DOM_VK_TAB, KeyEvent.DOM_VK_SHIFT, KeyEvent.DOM_VK_CONTROL, KeyEvent.DOM_VK_ALT].
-            indexOf(event.keyCode) != -1 ||
-        ((!event.shiftKey && !event.altKey && !event.ctrlKey) &&
-        [KeyEvent.DOM_VK_RETURN, KeyEvent.DOM_VK_ESCAPE].indexOf(event.keyCode) != -1))
+    saveChanges: function()
     {
-        // Always let tab pass. Let enter & escape pass, if no modifiers are used
-        return;
-    }
+        if (!modified)
+            return true;
 
-    modified = true;
-    event.preventDefault();
-    event.stopPropagation();
+        shortcutNames.forEach(this.saveShortcut.bind(this));
 
-    var target = event.target;
+        var e = Services.wm.getEnumerator("navigator:browser");
+        while (e.hasMoreElements())
+        {
+            var fbug = e.getNext().Firebug;
+            fbug && fbug.ShortcutsModel.initShortcuts();
+        }
+        return true;
+    },
 
-    // Backspace pressed
-    if (event.keyCode == 8 && !event.shiftKey && !event.altKey && !event.ctrlKey)
+    saveShortcut: function(shortcutId, index, array)
     {
-        updatedShortcuts[target.id.replace("_shortcut", "")] = "";
-        target.value = "";
-
-        // Update reset button visibility
-        target.nextSibling.hidden = false;
+        if (shortcutId in updatedShortcuts)
+            branch.setCharPref(shortcutId, updatedShortcuts[shortcutId]);
+    },
 
-        return false;
-    }
-
-    var modifiers = [];
-    if (event.altKey)
-        modifiers.push("alt");
-    if (event.ctrlKey)
-        modifiers.push("control");
-    if (event.metaKey)
-        modifiers.push("meta");
-    if (event.shiftKey)
-        modifiers.push("shift");
+    handleResetBtn: function(event)
+    {
+        var element = event.target.id.replace("_reset", "");
+        if (branch.prefHasUserValue(element))
+        {
+            branch.clearUserPref(element);
+            modified = true;
+        }
 
-    modifiers = modifiers.join(" ");
-    var keyConstant = key = null;
+        event.target.hidden = true;
+        var textbox = this.win.document.getElementById(element + "_shortcut");
+        if (textbox)
+            textbox.value = this.getHumanShortcut(element);
+    },
 
-    keyConstant = gVKNames[event.keyCode];
+    getHumanShortcut: function(element, getDefault)
+    {
+        var shortcut = (getDefault ? defaultBranch : branch).getCharPref(element);
+        var tokens = shortcut.split(" ");
+        var keyCode = tokens.pop();
 
-    if (!keyConstant) //should not happen
-        return;
+        if (keyCode.length == 1)
+            return Locale.getFormattedKey(this.win, tokens.join(","), keyCode, null);
+        else
+            return Locale.getFormattedKey(this.win, tokens.join(","), null, keyCode);
+    },
 
-    // Check if the keycode is actually a printable character
-    // 1. Convert some of the punctuation keyConstants (e.g. VK_COMMA) back to actual characters
-    if (mustBeKeyChars[keyConstant])
+    addShortcutRow: function(element, index, array)
     {
-        key = mustBeKeyChars[keyConstant];
-    }
-    else
+        // Get key configuration from preference
+        var shortcut = this.getHumanShortcut(element);
+        var defaultShortcut = this.getHumanShortcut(element, true);
+        var rows = this.win.document.getElementById("shortcutGridRows");
+        var row = this.win.document.createElement("row");
+
+        var label = this.win.document.createElement("label");
+
+        // Get the label from firebug.properties
+        var labelText = Locale.$STR("firebug.shortcut."+element+".label");
+        var tooltipText = Locale.$STR("firebug.shortcut.tip."+element);
+
+        // $STR defaults to property name (label) if it's not defined. We don't want that
+        if (labelText == "label")
+            labelText = element;
+
+        label.setAttribute("value", labelText);
+        row.appendChild(label);
+
+        var textbox = this.win.document.createElement("textbox");
+        textbox.id = element + "_shortcut";
+        textbox.className = "shortcutSink";
+        row.setAttribute("tooltiptext", tooltipText != "tip" ? tooltipText : "");
+        textbox.setAttribute("value", shortcut);
+        textbox.setAttribute("default_value", defaultShortcut);
+        row.appendChild(textbox);
+
+        var resetBtn = this.win.document.createElement("toolbarbutton");
+        resetBtn.id = element + "_reset";
+        resetBtn.setAttribute("label", Locale.$STR("a11y.labels.reset"));
+        resetBtn.setAttribute("aria-label", Locale.$STRF("a11y.labels.reset_shortcut", [labelText]));
+        resetBtn.className = "shortcutResetBtn";
+        resetBtn.hidden = defaultShortcut == shortcut;
+        row.appendChild(resetBtn);
+        rows.appendChild(row);
+    },
+
+    recognizeShortcut: function(event)
     {
-        // 2. Detect basic alphanumeric keys
-        var keyNameGuess = keyConstant.replace("VK_", "");
-        if (keyNameGuess.length == 1)
-            key = keyNameGuess.toLowerCase();
-    }
+        // We're using keydown, so we always start with keycode
+        var shortcut = "";
+        if ([KeyEvent.DOM_VK_TAB, KeyEvent.DOM_VK_SHIFT, KeyEvent.DOM_VK_CONTROL, KeyEvent.DOM_VK_ALT].
+                indexOf(event.keyCode) != -1 ||
+            ((!event.shiftKey && !event.altKey && !event.ctrlKey) &&
+            [KeyEvent.DOM_VK_RETURN, KeyEvent.DOM_VK_ESCAPE].indexOf(event.keyCode) != -1))
+        {
+            // Always let tab pass. Let enter & escape pass, if no modifiers are used
+            return;
+        }
 
-    if (modifiers.length > 0)
-        shortcut += modifiers+" ";
-    shortcut += (key ? key : keyConstant);
+        modified = true;
 
-    updatedShortcuts[target.id.replace("_shortcut", "")] = shortcut;
+        Events.cancelEvent(event);
 
-    // Show formatted shortcut in textbox
-    modifiers = modifiers.replace(" ", ",");
-    var formatted = getFormattedKey(modifiers, key, keyConstant);
+        var target = event.target;
 
-    target.value = formatted;
+        // Backspace pressed
+        if (event.keyCode == 8 && !event.shiftKey && !event.altKey && !event.ctrlKey)
+        {
+            updatedShortcuts[target.id.replace("_shortcut", "")] = "";
+            target.value = "";
 
-    // Update reset button visibility
-    target.nextSibling.hidden = formatted == target.getAttribute("default_value");
-    return false;
-}
+            // Update reset button visibility
+            target.nextSibling.hidden = false;
 
-function getFormattedKey(modifiers, key, keyConstant)
-{
-    if ((modifiers == "shift,alt,control,accel" && keyConstant == "VK_SCROLL_LOCK") ||
-        (key == "" || (!key && keyConstant == "")))
-    {
-        return "";
-    }
+            return false;
+        }
 
-    var val = "";
-    if (modifiers)
-    {
-        val = modifiers.replace(/^[\s,]+|[\s,]+$/g, "").split(/[\s,]+/g).join(gPlatformKeys.sep).
-            replace("alt", gPlatformKeys.alt).replace("shift", gPlatformKeys.shift).
-            replace("control", gPlatformKeys.ctrl).replace("meta", gPlatformKeys.meta).
-            replace("accel", gPlatformKeys.accel) +
-            gPlatformKeys.sep;
-    }
+        var modifiers = [];
+        if (event.altKey)
+            modifiers.push("alt");
+        if (event.ctrlKey)
+            modifiers.push("control");
+        if (event.metaKey)
+            modifiers.push("meta");
+        if (event.shiftKey)
+            modifiers.push("shift");
 
-    if (key)
-        return val += key;
+        modifiers = modifiers.join(" ");
+        var keyConstant = key = null;
 
-    if (keyConstant)
-    {
-        try
+        keyConstant = gVKNames[event.keyCode];
+
+        if (!keyConstant) //should not happen
+            return;
+
+        // Check if the keycode is actually a printable character
+        // 1. Convert some of the punctuation keyConstants (e.g. VK_COMMA) back to actual characters
+        if (mustBeKeyChars[keyConstant])
         {
-            // See if a localized version for keyConstant exists (F keys, arrow, enter, pgup, etc.)
-            val += gLocaleKeys.getString(keyConstant);
+            key = mustBeKeyChars[keyConstant];
         }
-        catch (e)
+        else
         {
-            // Create human friendly alternative ourself
-            val += keyConstant.replace("VK_", "").replace("_", " ").toLowerCase();
+            // 2. Detect basic alphanumeric keys
+            var keyNameGuess = keyConstant.replace("VK_", "");
+            if (keyNameGuess.length == 1)
+                key = keyNameGuess.toLowerCase();
         }
+
+        if (modifiers.length > 0)
+            shortcut += modifiers+" ";
+        shortcut += (key ? key : keyConstant);
+
+        updatedShortcuts[target.id.replace("_shortcut", "")] = shortcut;
+
+        // Show formatted shortcut in textbox
+        modifiers = modifiers.replace(" ", ",");
+        var formatted = Locale.getFormattedKey(this.win, modifiers, key, keyConstant);
+
+        target.value = formatted;
+
+        // Update reset button visibility
+        target.nextSibling.hidden = formatted == target.getAttribute("default_value");
+        return false;
     }
-    return val;
 }
 
 // ********************************************************************************************* //
+// Registration
+
+return CustomizeShortcuts;
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/firefox/customizeShortcuts.xul b/content/firebug/firefox/customizeShortcuts.xul
index 2a699a1..015e2ae 100644
--- a/content/firebug/firefox/customizeShortcuts.xul
+++ b/content/firebug/firefox/customizeShortcuts.xul
@@ -9,17 +9,14 @@
         id="firebug-customize-keyboard"
         width="400" height="500"
         buttons="accept,cancel"
-        onload="init();"
-        ondialogaccept="return saveChanges();"
+        onload="dlg.initialize(this);"
+        ondialogaccept="return dlg.saveChanges();"
         ondialogcancel="return true;"
         persist="screenX screenY width height">
 
-    <script type="application/x-javascript" src="chrome://firebug/content/firefox/customizeShortcuts.js" />
-
-    <stringbundleset>
-        <stringbundle id="platformKeys" src="chrome://global-platform/locale/platformKeys.properties"/>
-        <stringbundle id="localeKeys" src="chrome://global/locale/keys.properties"/>
-    </stringbundleset>
+    <script type="application/x-javascript">
+    var dlg = window.arguments[0];
+    </script>
 
     <!-- Dialog UI structure (list of registered shortcuts) -->
     <grid flex="1" id="shortcutGrid">
@@ -30,4 +27,5 @@
         </columns>
         <rows id="shortcutGridRows"></rows>
     </grid>
+
 </dialog>
\ No newline at end of file
diff --git a/content/firebug/firefox/external-editors/changeeditor.js b/content/firebug/firefox/external-editors/changeeditor.js
index ff53e09..43e07de 100644
--- a/content/firebug/firefox/external-editors/changeeditor.js
+++ b/content/firebug/firefox/external-editors/changeeditor.js
@@ -1,13 +1,21 @@
 /* See license.txt for terms of usage */
 
-// ************************************************************************************************
-// Globals
+define([
+    "firebug/firebug",
+    "firebug/lib/locale",
+    "firebug/lib/trace",
+    "firebug/lib/system",
+    "firebug/lib/dom",
+],
+function(Firebug, Locale, FBTrace, System, Dom) {
+
+// ********************************************************************************************* //
+// Constants
 
 const Cc = Components.classes;
 const Ci = Components.interfaces;
+const nsIFilePicker = Ci.nsIFilePicker;
 
-var item;
-var FBL;
 var internalFilefieldTextbox;
 var browseButton;
 
@@ -15,255 +23,261 @@ var browseButton;
 var origLabel = "";
 var origImage = null;
 
-function onLoad()
+// would be good to have auto-suggest for popular editors
+var defaultCommandLines =
 {
-    var args = window.arguments[0];
-    item = args.item;
-    FBL = args.FBL;
+    "emacs/vim/gedit/nano/geany":     "+%line %file",
+    "sublimetext":                    "%file:%line:%col",
+    "notepad++":                      "-n%line %file",
+    "emeditor":                       "/l %line %file",
+    "IntelliJ IDEA":                  "%{--line %line%} %file",
+    "browser":                        "%url",
+    "explorer":                       "/select,%file",
+    "wget/curl":                      "%url",
+    "firefox":                        "http://validator.w3.org/check?uri=%url"
+};
+
+// ********************************************************************************************* //
+// ChangeEditor Implementation
 
-    browseButton = document.getElementById("browse-button");
+function ChangeEditor(item)
+{
+    this.item = item;
+}
 
-    document.getElementById("name").value = item.label;
-    if (item.executable)
+ChangeEditor.prototype =
+{
+    onLoad: function(win)
     {
-        origImage = FBL.getIconURLForFile(item.executable);
-        try
+        this.win = win;
+
+        browseButton = this.win.document.getElementById("browse-button");
+
+        this.win.document.getElementById("name").value = this.item.label;
+        if (this.item.executable)
         {
-            var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
-            file.initWithPath(item.executable);
-            document.getElementById("executable").file = file;
-            origLabel = file.leafName.replace(".exe","");
+            origImage = System.getIconURLForFile(this.item.executable);
+            try
+            {
+                var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
+                file.initWithPath(this.item.executable);
+                this.win.document.getElementById("executable").file = file;
+                origLabel = file.leafName.replace(".exe","");
+            }
+            catch(exc)
+            {
+            }
         }
-        catch(exc) {}
-    }
 
-    if (item.cmdline)
-        document.getElementById("cmdline").value = item.cmdline;
+        if (this.item.cmdline)
+            this.win.document.getElementById("cmdline").value = this.item.cmdline;
 
-    onChange();
+        this.onChange();
 
-    // Localization
-    internationalizeUI(document);
+        // Localization
+        this.internationalizeUI(this.win.document);
 
-    window.sizeToContent();
+        this.win.sizeToContent();
 
-    if (document.getAnonymousElementByAttribute && !document.getElementById("executable").file)
-    {
-        setTimeout(function()
+        if (this.win.document.getAnonymousElementByAttribute &&
+           !this.win.document.getElementById("executable").file)
         {
-            internalFilefieldTextbox = document.getAnonymousElementByAttribute(
-                document.getElementById("executable"), "class", "fileFieldLabel");
-
-            if (internalFilefieldTextbox)
+            var self = this;
+            setTimeout(function()
             {
-                internalFilefieldTextbox.readOnly = false;
-                internalFilefieldTextbox.addEventListener("input", function(e) {
-                    browseButton.disabled = (this.value != "");
-                    onChange();
-                }, false);
-            }
-        }, 100);
-    }
-}
+                internalFilefieldTextbox = self.win.document.getAnonymousElementByAttribute(
+                    self.win.document.getElementById("executable"), "class", "fileFieldLabel");
+
+                if (internalFilefieldTextbox)
+                {
+                    internalFilefieldTextbox.readOnly = false;
+                    internalFilefieldTextbox.addEventListener("input", function(e)
+                    {
+                        browseButton.disabled = (this.value != "");
+                        self.onChange();
+                    }, false);
+                }
+            }, 100);
+        }
+    },
 
-function internationalizeUI(doc)
-{
-    var elements = doc.getElementsByClassName("fbInternational");
-    var attributes = ["title", "label", "value"];
-    for (var i=0; i<elements.length; i++)
+    internationalizeUI: function(doc)
     {
-        if (elements[i].nodeName == "description")
+        var elements = doc.getElementsByClassName("fbInternational");
+        var attributes = ["title", "label", "value"];
+        for (var i=0; i<elements.length; i++)
         {
-            var localized = FBL.$STR(elements[i].textContent);
-            var parser = Cc["@mozilla.org/xmlextras/domparser;1"].createInstance(Ci.nsIDOMParser);
-            var doc = parser.parseFromString("<vbox>" + localized + "</vbox>", "text/xml");
-            var root = doc.documentElement;
-
-            while(elements[i].firstChild)
-                elements[i].removeChild(elements[i].firstChild);
-
-            for(var j=0; j<root.childNodes.length; j++)
+            if (elements[i].nodeName == "description")
             {
-                // ToDo: Show labels correctly
-                // Namespaces are not inherited from doc, so labels 
-                // are not shown as links
-                node = doc.importNode(root.childNodes[j], true);
-                elements[i].appendChild(node);
+                var localized = Locale.$STR(elements[i].textContent);
+                var parser = Cc["@mozilla.org/xmlextras/domparser;1"].createInstance(Ci.nsIDOMParser);
+                var doc = parser.parseFromString("<vbox>" + localized + "</vbox>", "text/xml");
+                var root = doc.documentElement;
+    
+                while (elements[i].firstChild)
+                    elements[i].removeChild(elements[i].firstChild);
+    
+                for (var j=0; j<root.childNodes.length; j++)
+                {
+                    // ToDo: Show labels correctly
+                    // Namespaces are not inherited from doc, so labels 
+                    // are not shown as links
+                    node = doc.importNode(root.childNodes[j], true);
+                    elements[i].appendChild(node);
+                }
             }
-        }
-        else
-        {
-            for(var j=0; j<attributes.length; j++)
+            else
             {
-                if (elements[i].hasAttribute(attributes[j]))
-                    FBL.internationalize(elements[i], attributes[j]);
+                for (var j=0; j<attributes.length; j++)
+                {
+                    if (elements[i].hasAttribute(attributes[j]))
+                        Locale.internationalize(elements[i], attributes[j]);
+                }
             }
         }
-    }
-}
+    },
 
-function onAccept()
-{
-    item.label = document.getElementById("name").value;
-    if (!browseButton.disabled)
-    {
-        var file = document.getElementById("executable").file;
-        item.executable = "";
-        if (file)
-            item.executable = file.path;
-    }
-    else
-    {
-        item.executable = internalFilefieldTextbox.value.replace(/^\s+|\s+$/g, '');
-    }
-
-    item.cmdline = document.getElementById("cmdline").value;
-    if (item.image == origImage)
-        item.image = FBL.getIconURLForFile(item.executable);
-
-    try
-    {
-        var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
-        file.initWithPath(item.executable);
-        if (!file.isExecutable())
-           throw "NotAnExecutable";
-
-        window.arguments[1].saveChanges = true;
-        return true;
-    }
-    catch (exc)
+    onAccept: function()
     {
-        if (FBTrace.DBG_ERRORS)
-            FBTrace.sysout("changeEditor.onAccept; EXCEPTION " + exc, exc);
-
-        var promptService = Cc["@mozilla.org/embedcomp/prompt-service;1"].createInstance(
-            Ci.nsIPromptService);
-
-        if (exc == "NotAnExecutable")
+        this.item.label = this.win.document.getElementById("name").value;
+    
+        if (!browseButton.disabled)
         {
-            promptService.alert(null, FBL.$STR("changeEditor.Invalid_Application_Path"),
-                FBL.$STR("changeEditor.Path_is_not_an_executable"));
+            var file = this.win.document.getElementById("executable").file;
+            this.item.executable = "";
+            if (file)
+                this.item.executable = file.path;
         }
         else
         {
-            promptService.alert(null, FBL.$STR("changeEditor.Invalid_Application_Path"),
-                FBL.$STR("changeEditor.Application_does_not_exist"));
+            this.item.executable = internalFilefieldTextbox.value.replace(/^\s+|\s+$/g, '');
         }
 
-        return false;
-    }
-}
+        this.item.cmdline = this.win.document.getElementById("cmdline").value;
+        if (this.item.image == origImage)
+            this.item.image = System.getIconURLForFile(this.item.executable);
 
-function onChange()
-{
-    document.documentElement.getButton("accept").disabled = !(
-        document.getElementById("name").value && (
-            (browseButton.disabled && internalFilefieldTextbox &&
-                internalFilefieldTextbox.value &&
-                internalFilefieldTextbox.value.replace(/^\s+|\s+$/g, '')) ||
-            (!browseButton.disabled && document.getElementById("executable").file)
-        )
-    );
-}
+        try
+        {
+            var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
+            file.initWithPath(this.item.executable);
+            if (!file.isExecutable())
+               throw "NotAnExecutable";
 
-function onBrowse()
-{
-    const Ci = Components.interfaces;
-    const nsIFilePicker = Ci.nsIFilePicker;
-    var picker = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
-    picker.init(window, "", nsIFilePicker.modeOpen);
-    picker.appendFilters(nsIFilePicker.filterApps);
+            this.win.arguments[1].saveChanges = true;
+            return true;
+        }
+        catch (exc)
+        {
+            if (FBTrace.DBG_ERRORS)
+                FBTrace.sysout("changeEditor.onAccept; EXCEPTION " + exc, exc);
+
+            var promptService = Cc["@mozilla.org/embedcomp/prompt-service;1"].createInstance(
+                Ci.nsIPromptService);
 
-    if (picker.show() == nsIFilePicker.returnOK && picker.file)
+            if (exc == "NotAnExecutable")
+            {
+                promptService.alert(null, Locale.$STR("changeEditor.Invalid_Application_Path"),
+                    Locale.$STR("changeEditor.Path_is_not_an_executable"));
+            }
+            else
+            {
+                promptService.alert(null, Locale.$STR("changeEditor.Invalid_Application_Path"),
+                    Locale.$STR("changeEditor.Application_does_not_exist"));
+            }
+
+            return false;
+        }
+    },
+
+    onChange: function()
     {
-        var nameField = document.getElementById("name");
-        var execField = document.getElementById("executable");
-        execField.file = picker.file;
+        this.win.document.documentElement.getButton("accept").disabled = !(
+            this.win.document.getElementById("name").value && (
+                (browseButton.disabled && internalFilefieldTextbox &&
+                    internalFilefieldTextbox.value &&
+                    internalFilefieldTextbox.value.replace(/^\s+|\s+$/g, '')) ||
+                (!browseButton.disabled && this.win.document.getElementById("executable").file)
+            )
+        );
+    },
+
+    onBrowse: function()
+    {
+        var picker = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
+        picker.init(this.win, "", nsIFilePicker.modeOpen);
+        picker.appendFilters(nsIFilePicker.filterApps);
 
-        if (internalFilefieldTextbox)
-            internalFilefieldTextbox.readOnly = true;
+        if (picker.show() == nsIFilePicker.returnOK && picker.file)
+        {
+            var nameField = this.win.document.getElementById("name");
+            var execField = this.win.document.getElementById("executable");
+            execField.file = picker.file;
 
-        if (nameField.value == origLabel || nameField.value == "")
-            origLabel = nameField.value = execField.file.leafName.replace(".exe","");
+            if (internalFilefieldTextbox)
+                internalFilefieldTextbox.readOnly = true;
 
-        onChange();
-        return true;
-    }
+            if (nameField.value == origLabel || nameField.value == "")
+                origLabel = nameField.value = execField.file.leafName.replace(".exe","");
 
-    return false;
-}
+            this.onChange();
+            return true;
+        }
 
-function insertText(text, whole)
-{
-    var textbox = document.getElementById("cmdline");
-    if(whole)
-        textbox.select();
+        return false;
+    },
 
-    textbox.editor.QueryInterface(Components.interfaces.nsIPlaintextEditor).insertText(text);
-    textbox.focus();
-}
+    insertText: function(text, whole)
+    {
+        var textbox = this.win.document.getElementById("cmdline");
+        if (whole)
+            textbox.select();
 
-// ************************************************************************************************
+        textbox.editor.QueryInterface(Ci.nsIPlaintextEditor).insertText(text);
+        textbox.focus();
+    },
 
-// would be good to have autosuggest for popular editors
-var defaultCommandLines =
-{
-    "emacs/vim/gedit/nano/geany":     "+%line %file",
-    "sublimetext":                    "%file:%line:%col",
-    "notepad++":                      "-n%line %file",
-    "emeditor":                       "/l %line %file",
-    "IntelliJ IDEA":                  "%{--line %line%} %file",
-    "browser":                        "%url",
-    "explorer":                       "/select,%file",
-    "wget/curl":                      "%url",
-    "firefox":                        "http://validator.w3.org/check?uri=%url"
-};
+    testEditor: function()
+    {
+        var tmpItem = {};
+        var file = this.win.document.getElementById("executable").file;
+        if (file)
+            tmpItem.executable = file.path;
 
-function suggestionPopupShowing(popup)
-{
-    FBL.eraseNode(popup);
+        tmpItem.cmdline = this.win.document.getElementById("cmdline").value;
 
-    for (var i in defaultCommandLines)
+        Firebug.ExternalEditors.open(Firebug.Firefox.getCurrentBrowser().currentURI.spec, 5, tmpItem);
+    },
+
+    suggestionPopupShowing: function(popup)
     {
-        var box = document.createElement('hbox');
-        var label = document.createElement('label');
-        label.setAttribute('value', i + ': ');
-        box.appendChild(label);
+        Dom.eraseNode(popup);
+
+        for (var i in defaultCommandLines)
+        {
+            var box = this.win.document.createElement("hbox");
+            var label = this.win.document.createElement("label");
+            label.setAttribute("value", i + ': ');
+            box.appendChild(label);
 
-        var spacer = document.createElement('spacer');
-        spacer.setAttribute('flex', 1);
-        box.appendChild(spacer);
+            var spacer = this.win.document.createElement("spacer");
+            spacer.setAttribute("flex", 1);
+            box.appendChild(spacer);
 
-        label = document.createElement('label');
-        label.setAttribute('value', defaultCommandLines[i]);
-        label.className = 'text-link';
-        box.appendChild(label);
+            label = this.win.document.createElement("label");
+            label.setAttribute("value", defaultCommandLines[i]);
+            label.className = "text-link";
+            box.appendChild(label);
 
-        popup.appendChild(box);
+            popup.appendChild(box);
+        }
     }
 }
 
-// ************************************************************************************************
-// TODO: suggestions for application?
-/*
-var paths = []
-var handlers = Cc["@mozilla.org/uriloader/external-helper-app-service;1"]
-    .getService(Ci.nsIMIMEService).getFromTypeAndExtension("", "js").possibleLocalHandlers;
-for (var i = handlers.length - 1; i >= 0; i--)
-    paths.unshift(handlers.queryElementAt(i, Ci.nsILocalHandlerApp).executable.path);
+// ********************************************************************************************* //
+// Registration
 
-paths
-*/
+return ChangeEditor;
 
-// ************************************************************************************************
-var testEditor = function()
-{
-    var tmpItem = {};
-    var file = document.getElementById("executable").file;
-    if (file)
-        tmpItem.executable = file.path;
-    tmpItem.cmdline = document.getElementById("cmdline").value;
-
-    var Firebug = opener.opener.Firebug;
-    Firebug.ExternalEditors.open(Firebug.Firefox.getCurrentBrowser().currentURI.spec, 5, tmpItem);
-};
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/firefox/external-editors/changeeditor.xul b/content/firebug/firefox/external-editors/changeeditor.xul
index bec34dd..862b702 100644
--- a/content/firebug/firefox/external-editors/changeeditor.xul
+++ b/content/firebug/firefox/external-editors/changeeditor.xul
@@ -8,46 +8,47 @@
         buttons="extra2,accept,cancel"
         id="firebug-external-editors-change"
         title="changeEditor.Editor_Configuration"
-        onload="onLoad();"
-        ondialogaccept="return onAccept();"
+        onload="dlg.onLoad(this);"
+        ondialogaccept="return dlg.onAccept();"
         persist="screenX screenY"
         class="fbInternational"
         buttonlabelextra2="test"
-        ondialogextra2="testEditor()">
+        ondialogextra2="dlg.testEditor()">
 
-    <script src="chrome://firebug/content/trace.js"/>
-    <script src="chrome://firebug/content/firefox/external-editors/changeeditor.js"/>
+    <script type="application/x-javascript">
+    var dlg = window.arguments[0];
+    </script>
 
     <vbox flex="1">
         <hbox align="center">
             <label id="fbNameLabel" control="name"
                 value="changeEditor.Name" class="fbInternational"/>
-            <textbox id="name" flex="1" oninput="onChange()"/>
+            <textbox id="name" flex="1" oninput="dlg.onChange()"/>
         </hbox>
         <separator class="groove"/>
         <hbox align="center">
             <label id="fbExecutableLabel" control="executable" align="baseline"
                 value="changeEditor.Executable" class="fbInternational"/>
             <filefield id="executable" flex="1"/>
-            <button id="browse-button" oncommand="onBrowse();"
+            <button id="browse-button" oncommand="dlg.onBrowse();"
                 label="editors.Browse" class="fbInternational"/>
         </hbox>
         <separator class="thin"/>
         <hbox align="center">
             <label id="fbCmdLineLabel" control="cmdline"
                 value="changeEditor.CmdLine" class="fbInternational"/>
-            <textbox id="cmdline" flex="1" oninput="onChange()"/>
+            <textbox id="cmdline" flex="1" oninput="dlg.onChange()"/>
             <toolbarbutton type="menu" label="">
-                <panel onpopupshowing="suggestionPopupShowing(this)"
-                    onclick="if(event.target.className=='text-link') insertText(event.target.value,true);"
+                <panel onpopupshowing="dlg.suggestionPopupShowing(this)"
+                    onclick="if(event.target.className=='text-link') dlg.insertText(event.target.value,true);"
                     position="after_end"/>
             </toolbarbutton>
         </hbox>
-        <vbox align="left" onclick="if(event.target.className=='text-link') insertText(event.target.textContent);">
+        <vbox align="left" onclick="if(event.target.className=='text-link') dlg.insertText(event.target.textContent);">
             <description class="fbInternational">changeEditor.Supplied_arguments</description>
-            <hbox><label class='text-link'>%url </label> <description class="fbInternational">changeEditor.URL_of_file</description></hbox>
-            <hbox><label class='text-link'>%file </label><description class="fbInternational">changeEditor.Path_to_local_file</description></hbox>
-            <hbox><label class='text-link'>%line </label><description class="fbInternational">changeEditor.Line_number</description></hbox>
+            <hbox><label class='text-link'>%url </label><description class="fbInternational">changeEditor.URL_of_file2</description></hbox>
+            <hbox><label class='text-link'>%file </label><description class="fbInternational">changeEditor.Path_to_local_file2</description></hbox>
+            <hbox><label class='text-link'>%line </label><description class="fbInternational">changeEditor.Line_number2</description></hbox>
         </vbox>
         <separator class="groove"/>
     </vbox>
diff --git a/content/firebug/firefox/external-editors/editors.js b/content/firebug/firefox/external-editors/editors.js
index 5520ddf..80c3b99 100644
--- a/content/firebug/firefox/external-editors/editors.js
+++ b/content/firebug/firefox/external-editors/editors.js
@@ -1,6 +1,16 @@
 /* See license.txt for terms of usage */
 
-// ************************************************************************************************
+define([
+    "firebug/firebug",
+    "firebug/lib/trace",
+    "firebug/lib/locale",
+    "firebug/lib/array",
+    "firebug/lib/system",
+    "firebug/firefox/external-editors/changeeditor",
+],
+function(Firebug, FBTrace, Locale, Arr, System, ChangeEditor) {
+
+// ********************************************************************************************* //
 // Constants
 
 const Cc = Components.classes;
@@ -10,28 +20,31 @@ const Cu = Components.utils;
 const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
 const names = ["label", "executable", "cmdline", "image"];
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 // Globals
 
-var gEditorManager =
+function EditorManager(prefName)
 {
-    _tree : null,
-    _data : [],
-    _removeButton : null,
-    _changeButton : null,
-    _moveUpButton : null,
+    this._prefName = prefName;
 
-    init: function()
+    this._tree = null;
+    this._data = [];
+    this._removeButton = null;
+    this._changeButton = null;
+    this._moveUpButton = null;
+}
+
+EditorManager.prototype =
+{
+    init: function(win)
     {
-        var args = window.arguments[0];
-        this._FBL = args.FBL;
-        this._prefName = args.prefName;
+        this.win = win;
 
-        (this._removeButton = document.getElementById("removeEditor")).disabled = true;
-        (this._changeButton = document.getElementById("changeEditor")).disabled = true;
-        (this._moveUpButton = document.getElementById("moveUpEditor")).disabled = true;
+        (this._removeButton = this.win.document.getElementById("removeEditor")).disabled = true;
+        (this._changeButton = this.win.document.getElementById("changeEditor")).disabled = true;
+        (this._moveUpButton = this.win.document.getElementById("moveUpEditor")).disabled = true;
 
-        this._tree = document.getElementById("editorsList");
+        this._tree = this.win.document.getElementById("editorsList");
 
         this._treeView =
         {
@@ -41,7 +54,7 @@ var gEditorManager =
             get rowCount() { return this.data.length; },
             getCellText: function(row, column)
             {
-                switch(column.id)
+                switch (column.id)
                 {
                 case "editorName":
                     return " "+this.data[row].label;
@@ -59,7 +72,8 @@ var gEditorManager =
             isSeparator: function(row) { return false; },
             isSorted: function() { return false; },
             getLevel: function(row) { return 0; },
-            getImageSrc: function(row,column) { return column.id=="editorName" ? this.data[row].image : null; },
+            getImageSrc: function(row,column) {
+                return column.id=="editorName" ? this.data[row].image : null; },
             getRowProperties: function(row,props) {},
             getCellProperties: function(row,column,props) {},
             getColumnProperties: function(colid,column,props) {}
@@ -68,7 +82,7 @@ var gEditorManager =
         this._load();
         this._tree.view = this._treeView;
 
-        this.internationalizeUI(document);
+        this.internationalizeUI(this.win.document);
     },
 
     uninit: function()
@@ -79,12 +93,13 @@ var gEditorManager =
     {
         var elements = doc.getElementsByClassName("fbInternational");
         var attributes = ["title", "label", "value"];
+
         for (var i=0; i<elements.length; i++)
         {
-            for(var j=0; j<attributes.length; j++)
+            for (var j=0; j<attributes.length; j++)
             {
                 if (elements[i].hasAttribute(attributes[j]))
-                    this._FBL.internationalize(elements[i], attributes[j]);
+                    Locale.internationalize(elements[i], attributes[j]);
             }
         }
     },
@@ -101,13 +116,9 @@ var gEditorManager =
     {
         var item = { label: "", executable: null, cmdline: "" };
         var result = {};
-        var args = {
-            item: item,
-            FBL: this._FBL
-        };
 
-        openDialog("chrome://firebug/content/firefox/external-editors/changeeditor.xul",
-            "_blank", "modal,centerscreen,resizable", args, result);
+        this.win.openDialog("chrome://firebug/content/firefox/external-editors/changeeditor.xul",
+            "_blank", "modal,centerscreen,resizable", new ChangeEditor(item), result);
 
         if (result.saveChanges)
         {
@@ -119,18 +130,21 @@ var gEditorManager =
             this._tree.view = this._treeView;
 
             var editors = [];
-            try {
+            try
+            {
                 editors = prefs.getCharPref(this._prefName).split(",");
-                for( var i = 0; i < editors.length; ++i )
+                for (var i=0; i<editors.length; ++i)
                 {
-                    if ( editors[i].replace(/^\s+|\s+$/,"") == "" )
+                    if (editors[i].replace(/^\s+|\s+$/,"") == "")
                         editors.splice(i, 1);
                 }
             }
-            catch(exc)
+            catch (exc)
             {
-                this._FBL.ERROR(exc);
+                if (FBTrace.DBG_ERRORS)
+                    FBTrace.sysout("EXCEPTION " + exc, exc);
             }
+
             editors.push(item.id);
             prefs.setCharPref(this._prefName, editors.join(","));
         }
@@ -141,20 +155,25 @@ var gEditorManager =
         var selection = this._tree.view.selection;
         if (selection.count < 1)
             return;
+
         var item = this._data[selection.currentIndex];
         this._data.splice(selection.currentIndex, 1);
         this._tree.view = this._treeView;
 
-        try {
+        try
+        {
             var editors = prefs.getCharPref(this._prefName).split(",");
-            this._FBL.remove(editors, item.id);
+            Arr.remove(editors, item.id);
+
             prefs.setCharPref(this._prefName, editors.join(","));
             prefs.deleteBranch(this._prefName+"."+item.id);
         }
-        catch(exc)
+        catch (exc)
         {
-            this._FBL.ERROR(exc);
+            if (FBTrace.DBG_ERRORS)
+                FBTrace.sysout("EXCEPTION " + exc, exc);
         }
+
         // update disabled state of buttons
         if (this._data.length == 0)
             selection.clearSelection();
@@ -165,20 +184,16 @@ var gEditorManager =
         var selection = this._tree.view.selection;
         if (selection.count != 1)
             return;
+
         var item = this._data[selection.currentIndex];
-        var args = {
-            item: item,
-            FBL: this._FBL
-        };
         var result = {};
 
-        openDialog("chrome://firebug/content/firefox/external-editors/changeeditor.xul",
-            "_blank", "modal,centerscreen", args, result);
+        this.win.openDialog("chrome://firebug/content/firefox/external-editors/changeeditor.xul",
+            "_blank", "modal,centerscreen", new ChangeEditor(item), result);
 
         if (result.saveChanges)
-        {
             this._saveItem(item);
-        }
+
         this._loadItem(item);
         this._tree.view = this._treeView;
     },
@@ -188,17 +203,21 @@ var gEditorManager =
         var selection = this._tree.view.selection;
         if (selection.count < 1)
             return;
+
         var item = this._data[selection.currentIndex];
         this._data.splice(selection.currentIndex, 1);
         this._data.unshift(item);
         this._tree.view = this._treeView;
-        try {
+
+        try
+        {
             var editors = this._data.map(function(x) x.id);
             prefs.setCharPref(this._prefName, editors.join(","));
         }
-        catch(exc)
+        catch (exc)
         {
-            this._FBL.ERROR(exc);
+            if (FBTrace.DBG_ERRORS)
+                FBTrace.sysout("EXCEPTION " + exc, exc);
         }
     },
 
@@ -206,61 +225,71 @@ var gEditorManager =
     _loadItem: function(item)
     {
         const prefName = this._prefName;
-        for( var i = 0; i < names.length; ++i )
+
+        for (var i=0; i<names.length; ++i)
         {
-            try {
+            try
+            {
                 item[names[i]] = prefs.getCharPref(prefName+"."+item.id+"."+names[i]);
             }
             catch(exc)
-            {}
+            {
+            }
         }
+
         if (!item.image)
-            item.image = this._FBL.getIconURLForFile(item.executable);
+            item.image = System.getIconURLForFile(item.executable);
     },
 
     _saveItem: function(item)
     {
-        if ( item.image && item.image == this._FBL.getIconURLForFile(item.executable) )
+        if (item.image && item.image == System.getIconURLForFile(item.executable))
             item.image = null;
 
         const prefName = this._prefName;
-        for( var i = 0; i < names.length; ++i )
+        for (var i=0; i<names.length; ++i)
         {
-            try {
+            try
+            {
                 var value = item[names[i]];
-                if ( value )
-                    prefs.setCharPref(prefName+"."+item.id+"."+names[i], value);
+                if (value)
+                    prefs.setCharPref(prefName + "." + item.id + "." + names[i], value);
                 else
-                    prefs.clearUserPref(prefName+"."+item.id+"."+names[i]);
+                    prefs.clearUserPref(prefName + "." + item.id + "." + names[i]);
+            }
+            catch (exc)
+            {
             }
-            catch(exc)
-            {}
         }
     },
 
     _load: function()
     {
-        try {
+        try
+        {
             var list = prefs.getCharPref(this._prefName).split(",");
-            for (var i = 0; i < list.length; ++i)
+            for (var i=0; i<list.length; ++i)
             {
                 var editorId = list[i].replace(/\s/g, "_");
-                if ( !editorId )
+                if (!editorId)
                     continue;
+
                 var item = { id: editorId };
                 this._data.push(item);
                 this._loadItem(item);
             }
         }
-        catch(exc)
+        catch (exc)
         {
-            this._FBL.ERROR(exc);
+            if (FBTrace.DBG_ERRORS)
+                FBTrace.sysout("EXCEPTION " + exc, exc);
         }
     }
 };
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 // URLMappings
+
 Cu.import("resource://firebug/loader.js");
 
 var headerName = "X-Local-File-Path";
@@ -278,16 +307,16 @@ var noMapping = "no mappings for tested url";
 var willQueryServer = "for this url Firebug will send query to server";
 
 var splitter = " => ";
-var gUrlMappingManager = {
+var gUrlMappingManager =
+{
     init: function()
     {
-        var Firebug = opener.Firebug;
         var extModule = Firebug.ExternalEditors;
         this.checkHeaderRe = extModule.checkHeaderRe;
         this.pathTransformations = extModule.pathTransformations;
 
         var val = [
-            headerExplaination,    "\n",
+            headerExplaination, "\n",
             headerName, splitter, extModule.checkHeaderRe.source,
             "\n\n",
             listExplaination,
@@ -297,13 +326,13 @@ var gUrlMappingManager = {
         for (var i = 0; i < this.pathTransformations.length; i++)
         {
             var transform = this.pathTransformations[i];
-            val.push(transform.regexp.source, splitter, transform.filePath, '\n');
+            val.push(transform.regexp.source, splitter, transform.filePath, "\n");
         }
 
         val.push(splitter, "\n");
 
-        document.getElementById("urlMappings").value = val.join("");
-        document.getElementById("test").value = Firebug.Firefox.getCurrentBrowser().currentURI.spec;
+        this.win.document.getElementById("urlMappings").value = val.join("");
+        this.win.document.getElementById("test").value = Firebug.Firefox.getCurrentBrowser().currentURI.spec;
 
         this.onMainInput();
     },
@@ -311,7 +340,7 @@ var gUrlMappingManager = {
     uninit: function()
     {
         this.save();
-        opener.Firebug.ExternalEditors.saveUrlMappings();
+        Firebug.ExternalEditors.saveUrlMappings();
     },
 
     save: function()
@@ -373,10 +402,12 @@ var gUrlMappingManager = {
                     this.checkHeaderRe = addRegexp(end, i);
                 continue;
             }
+
             var t = {
                 regexp: addRegexp(start, i),
                 filePath: end
             };
+
             if (t.regexp && t.filePath)
                 this.pathTransformations.push(t);
         }
@@ -387,8 +418,8 @@ var gUrlMappingManager = {
 
     onTestInput: function()
     {
-        var testBox = document.getElementById("test");
-        var resultBox = document.getElementById("result");
+        var testBox = this.win.document.getElementById("test");
+        var resultBox = this.win.document.getElementById("result");
         var href = testBox.value;
 
         if (this.checkHeaderRe.test(href))
@@ -397,7 +428,7 @@ var gUrlMappingManager = {
         }
         else
         {
-            for (var i = 0; i < this.pathTransformations.length; i++)
+            for (var i=0; i<this.pathTransformations.length; i++)
             {
                 var transform = this.pathTransformations[i];
                 if (transform.regexp.test(href))
@@ -419,13 +450,14 @@ var gUrlMappingManager = {
 
     onMainInput: function()
     {
-        this.parse(document.getElementById("urlMappings").value);
-        var resultBox = document.getElementById("result");
+        this.parse(this.win.document.getElementById("urlMappings").value);
+        var resultBox = this.win.document.getElementById("result");
         if (this.errors.length)
         {
             resultBox.value = this.errors;
             resultBox.style.cssText = "box-shadow: 0px 0px 1.5px 1px red;";
-        } else
+        }
+        else
         {
             resultBox.style.cssText = "";
             this.onTestInput();
@@ -439,6 +471,7 @@ var gUrlMappingManager = {
 
         if (this.timeOut != null)
             return;
+
         this.timeOut = setTimeout(function(_this)
         {
             _this[_this._scheduled]();
@@ -448,5 +481,10 @@ var gUrlMappingManager = {
     }
 };
 
-// ************************************************************************************************
+// ********************************************************************************************* //
+// Registration
+
+return EditorManager;
 
+// ********************************************************************************************* //
+});
\ No newline at end of file
diff --git a/content/firebug/firefox/external-editors/editors.xul b/content/firebug/firefox/external-editors/editors.xul
index 8da86d3..680235e 100644
--- a/content/firebug/firefox/external-editors/editors.xul
+++ b/content/firebug/firefox/external-editors/editors.xul
@@ -9,23 +9,14 @@
         id="firebug-external-editors"
         width="600" height="300"
         title="firebug.Configure_Editors"
-        onload="gEditorManager.init();/*gUrlMappingManager.init()*/"
+        onload="gEditorManager.init(this);/*gUrlMappingManager.init()*/"
         onunload="gEditorManager.uninit();/*gUrlMappingManager.uninit()*/"
         persist="screenX screenY width height">
 
-    <script type="application/x-javascript" src="chrome://firebug/content/xpcom.js"/>
-    <script type="application/x-javascript"
-        src="chrome://firebug/content/firefox/external-editors/editors.js"/>
+    <script type="application/x-javascript">
+    var gEditorManager = window.arguments[0];
+    </script>
 
-    <!--
-    <tabbox flex="1" class="contentPane">
-        <tabs>
-            <tab label="editors.Configured_Firebug_Editors" class="fbInternational"/>
-            <tab label="editors.Url_mappings" class="fbInternational"/>
-        </tabs>
-        <tabpanels flex="1">
-            <tabpanel flex="1" orient="vertical">
-    -->
     <vbox flex="1" class="contentPane">
         <label id="actionsIntro" control="editorsList"
             value="editors.Configured_Firebug_Editors" class="fbInternational"/>
@@ -74,20 +65,5 @@
         </hbox>
         <resizer dir="bottomright"/>
     </hbox>
-    <!--
-            </tabpanel>
-            <tabpanel flex="1" orient="vertical">
-                <textbox id="urlMappings" multiline="true" flex="1" wrap="off"
-                    oninput="gUrlMappingManager.schedule('onMainInput')"/>
-                <hbox>
-                    <textbox id="test" flex="1"
-                        oninput="gUrlMappingManager.schedule('onTestInput')"/>
-                    <splitter class='plain'/>
-                    <textbox id="result" flex="1" />
-                </hbox>
-            </tabpanel>
-        </tabpanels>
-    </tabbox>
-    -->
 
 </window>
diff --git a/content/firebug/firefox/external-editors/externalEditors.js b/content/firebug/firefox/external-editors/externalEditors.js
index b2d5db0..e3079f5 100644
--- a/content/firebug/firefox/external-editors/externalEditors.js
+++ b/content/firebug/firefox/external-editors/externalEditors.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/lib",
     "firebug/lib/object",
     "firebug/firebug",
@@ -15,10 +16,12 @@ define([
     "firebug/lib/dom",
     "firebug/chrome/menu",
     "firebug/trace/debug",
-    "firebug/chrome/firefox"
+    "firebug/chrome/firefox",
+    "firebug/firefox/external-editors/editors",
+    "firebug/lib/options",
 ],
-function(FBL, Obj, Firebug, Locale, Xpcom, Url, Str, SourceLink, Css, System, Arr, Dom,
-    Menu, Debug, Firefox) {
+function(Module, FBL, Obj, Firebug, Locale, Xpcom, Url, Str, SourceLink, Css, System, Arr, Dom,
+    Menu, Debug, Firefox, Editors, Options) {
 
 // ********************************************************************************************* //
 // Constants
@@ -43,13 +46,13 @@ var temporaryDirectory = null;
 // ********************************************************************************************* //
 // Module Implementation
 
-Firebug.ExternalEditors = Obj.extend(Firebug.Module,
+Firebug.ExternalEditors = Obj.extend(Module,
 {
     dispatchName: "externalEditors",
 
     initializeUI: function()
     {
-        Firebug.Module.initializeUI.apply(this, arguments);
+        Module.initializeUI.apply(this, arguments);
 
         Firebug.registerUIListener(this);
         this.loadExternalEditors();
@@ -96,8 +99,8 @@ Firebug.ExternalEditors = Obj.extend(Firebug.Module,
         const editorPrefNames = ["label", "executable", "cmdline", "image"];
 
         externalEditors = [];
-        var prefDomain = Firebug.Options.getPrefDomain();
-        var list = Firebug.Options.getPref(prefDomain, prefName).split(",");
+        var prefDomain = Options.getPrefDomain();
+        var list = Options.getPref(prefDomain, prefName).split(",");
 
         for (var i=0; i<list.length; ++i)
         {
@@ -110,7 +113,7 @@ Firebug.ExternalEditors = Obj.extend(Firebug.Module,
             {
                 try
                 {
-                    item[editorPrefNames[j]] = Firebug.Options.getPref(prefDomain,
+                    item[editorPrefNames[j]] = Options.getPref(prefDomain,
                         prefName + "." + editorId + "." + editorPrefNames[j]);
                 }
                 catch(exc)
@@ -193,14 +196,9 @@ Firebug.ExternalEditors = Obj.extend(Firebug.Module,
 
     openEditorList: function()
     {
-        var args = {
-            FBL: FBL,
-            prefName: prefDomain + ".externalEditors"
-        };
-
         Firefox.openWindow("Firebug:ExternalEditors",
             "chrome://firebug/content/firefox/external-editors/editors.xul",
-            "", args);
+            "", new Editors(prefDomain + ".externalEditors"));
     },
 
     onContextMenu: function(items, object, target, context, panel, popup)
@@ -228,8 +226,8 @@ Firebug.ExternalEditors = Obj.extend(Firebug.Module,
     createContextMenuItem: function(doc)
     {
         var item = doc.createElement("menu");
-        item.setAttribute("type", "splitmenu");
         item.setAttribute("iconic", "true");
+        item.setAttribute("label", Locale.$STR("firebug.OpenWith"));
 
         item.addEventListener("command", function(event)
         {
@@ -263,19 +261,22 @@ Firebug.ExternalEditors = Obj.extend(Firebug.Module,
             item = item.cloneNode(true);
             item.hidden = false;
             item.removeAttribute("openFromContext");
+
+            item.setAttribute("image", editor.image);
+            item.setAttribute("label", editor.label);
+            item.value = editor.id;
         }
         else
         {
             item = this.createContextMenuItem(doc);
         }
 
-        item.setAttribute("image", editor.image);
-        item.setAttribute("label", editor.label);
-        item.value = editor.id;
-
         popup.appendChild(item);
 
-        this.lastSource={url: url, line: line};
+        this.lastSource = {
+            url: url,
+            line: line
+        };
     },
 
     onContextMenuCommand: function(event)
@@ -568,7 +569,8 @@ Firebug.ExternalEditors = Obj.extend(Firebug.Module,
         return file;
     },
 
-    deleteTemporaryFiles: function()  // TODO call on "shutdown" event to modules
+    // TODO call on "shutdown" event to modules
+    deleteTemporaryFiles: function()
     {
         try
         {
@@ -610,6 +612,7 @@ function fixupFilePath(path)
 }
 
 // object.extend doesn't handle getters
+// xxxHonza: now it does we should fix this.
 Firebug.ExternalEditors.__defineGetter__("pathTransformations",
     lazyLoadUrlMappings.bind(Firebug.ExternalEditors, "pathTransformations"));
 
diff --git a/content/firebug/firefox/firebugFrame.xul b/content/firebug/firefox/firebugFrame.xul
index c848960..6bd0cb4 100644
--- a/content/firebug/firefox/firebugFrame.xul
+++ b/content/firebug/firefox/firebugFrame.xul
@@ -7,6 +7,8 @@
 <?xml-stylesheet href="../firebug.css"?>
 <?xml-stylesheet href="chrome://firebug/skin/window.css"?>
 <?xml-stylesheet href="chrome://browser/skin/browser.css"?>
+<?xml-stylesheet href="chrome://firebug/skin/quickInfoBoxPanel.css"?>
+<?xml-stylesheet href="chrome://browser/content/browser.css"?>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         id="firebug"
diff --git a/content/firebug/firefox/firebugMenuOverlay.xul b/content/firebug/firefox/firebugMenuOverlay.xul
index 1f58e1f..61de7c5 100644
--- a/content/firebug/firefox/firebugMenuOverlay.xul
+++ b/content/firebug/firefox/firebugMenuOverlay.xul
@@ -17,7 +17,6 @@
         <command id="cmd_firebug_toggleQuickInfoBox" oncommand="Firebug.QuickInfoBox.toggleQuickInfoBox()"
                  checked="false"/>
         <command id="cmd_firebug_toggleProfiling" oncommand="Firebug.Profiler.toggleProfiling(Firebug.currentContext)"/>
-        <!-- <command id="cmd_firebug_toggleMemoryProfiling" oncommand="Firebug.MemoryProfiler.toggleProfiling(Firebug.currentContext)"/> -->
         <command id="cmd_firebug_toggleHTMLEditing" oncommand="Firebug.currentContext.getPanel('html').toggleEditing()"/>
         <command id="cmd_firebug_togglecssEditMode" oncommand="Firebug.currentContext.getPanel('stylesheet').toggleEditing()"/>
 
diff --git a/content/firebug/firefox/macBrowserOverlay.css b/content/firebug/firefox/macBrowserOverlay.css
index d5d1093..7a8d90c 100644
--- a/content/firebug/firefox/macBrowserOverlay.css
+++ b/content/firebug/firefox/macBrowserOverlay.css
@@ -1,4 +1,4 @@
-#firebug-button .badge > .label {
+#firebug-error-label {
     -moz-box-sizing: border-box;
     visibility: hidden;
     font-size: 9px;
@@ -14,16 +14,16 @@
 }
 
 /* Slightly different positions of the badge for individual toolbars */
-#nav-bar #firebug-button .badge {
+#nav-bar #firebug-error-badge {
     margin: -5px -10px 0 -8px;
 }
 
-#fbContentSplitter{
+#fbContentSplitter {
     border-color: threedShadow !important;
     background-color: #FFFFFF;
 }
 
-#fbContentSplitter[dir=reverse]{
+#fbContentSplitter[dir=reverse] {
     transform: scale(-1, -1);
 }
 
diff --git a/content/firebug/firefox/searchBox.xml b/content/firebug/firefox/searchBox.xml
new file mode 100644
index 0000000..08bf2a8
--- /dev/null
+++ b/content/firebug/firefox/searchBox.xml
@@ -0,0 +1,453 @@
+<?xml version="1.0"?>
+<!-- See license.txt for terms of usage -->
+
+<bindings xmlns="http://www.mozilla.org/xbl"
+    xmlns:xbl="http://www.mozilla.org/xbl"
+    xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+    xmlns:html="http://www.w3.org/1999/xhtml">
+
+<!-- Searchbox is located in the main Firebug toolbar and can be used to search
+    for a keyword within the current panel. -->
+<binding id="searchBox">
+    <content sizetopopup="none" align="center">
+        <xul:textbox anonid="searchBox" flex="1" width="0"
+            rows="1" label="search.Firebug_Search" class="fbsearch-textbox"
+            onkeyup="onSearchBoxKeyUp(event, this);" aria-describedby="fbSearchBoxDescription">
+            <xul:box class="fbsearch-icon" onclick="onSearchIconClick(event, this.parentNode)"/>
+        </xul:textbox>
+        <xul:toolbarbutton anonid="searchPrev"
+            class="fbsearch-options-buttons prev a11yFocus"
+            tooltiptext="search.tip.Previous"
+            role="menuitem"
+            oncommand="searchPrev();"/>
+        <xul:toolbarbutton anonid="searchNext"
+            class="fbsearch-options-buttons next a11yFocus"
+            tooltiptext="search.tip.Next"
+            role="menuitem"
+            oncommand="searchNext();"/>
+        <xul:description anonid="fbSearchBoxDescription"  collapsed="true"/>
+        <xul:panel id="fbSearchOptionsPanel" norestorefocus="true" noautofocus="true"
+            ignorekeys="true" role="presentation" type="arrow">
+            <xul:vbox>
+                <xul:label id="fbSearchBoxIsSensitive" value="search.Case_AutoSensitive"/>
+                <xul:label id="fbSearchBoxIsNotSensitive" value="search.Case_Insensitive"/>
+                <xul:vbox class="searchOptionsMenu innerToolbar" role="menu" anonid="fbSearchOptionsMenu">
+                    <xul:box anonid="startPanelFocus" class="panelFocusBound" onfocus="startFocusHandler()" />
+                    <xul:vbox anonid="searchOptionsList" role="presentation" />
+                    <xul:box anonid="endPanelFocus" class="panelFocusBound" onfocus="endFocusHandler()" />
+                </xul:vbox>
+            </xul:vbox>
+        </xul:panel>
+        <xul:box anonid="endTextFocus" class="panelFocusBound" onfocus="endTextFocusHandler()" />
+    </content>
+
+    <implementation>
+        <constructor><![CDATA[
+            var searchBox = document.getAnonymousElementByAttribute(this, "anonid", "searchBox");
+            var optionsPopup = document.getElementById("fbSearchOptionsPanel");
+
+            var self = this;
+
+            this.onFocusSearchBox = function(event)
+            {
+                self.focusHandler(event);
+            };
+
+            this.onFocusOptionsPopup = function(event)
+            {
+                self.panelFocusHandler(event);
+            };
+
+            searchBox.addEventListener("focus", this.onFocusSearchBox, true);
+            optionsPopup.addEventListener("focus", this.onFocusOptionsPopup, true);
+
+            // Dynamically set noautohide to avoid mozilla bug 545265.
+            optionsPopup.addEventListener("popupshowing", function runOnce()
+            {
+                optionsPopup.removeEventListener("popupshowing", runOnce, false);
+                optionsPopup.setAttribute("noautohide", true);
+            }, false);
+        ]]></constructor>
+
+        <destructor><![CDATA[
+            var searchBox = document.getAnonymousElementByAttribute(this, "anonid", "searchBox");
+            var optionsPopup = document.getElementById("fbSearchOptionsPanel");
+
+            searchBox.removeEventListener("focus", this.onFocusSearchBox, true);
+            optionsPopup.removeEventListener("focus", this.onFocusOptionsPopup, true);
+        ]]></destructor>
+
+        <property name="value">
+            <xbl:getter><![CDATA[
+                var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
+                    "searchBox");
+                return searchBox.value;
+            ]]></xbl:getter>
+
+            <xbl:setter><![CDATA[
+                var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
+                    "searchBox");
+                searchBox.setAttribute("active-search", !!val);
+                searchBox.value = val;
+            ]]></xbl:setter>
+        </property>
+
+        <property name="placeholder">
+            <xbl:getter><![CDATA[
+                var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
+                    "searchBox");
+                return searchBox.placeholder;
+            ]]></xbl:getter>
+
+            <xbl:setter><![CDATA[
+                var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
+                    "searchBox");
+                searchBox.placeholder = val;
+            ]]></xbl:setter>
+        </property>
+
+        <property name="status">
+            <xbl:getter><![CDATA[
+                return Firebug.Search.status;
+            ]]></xbl:getter>
+
+            <xbl:setter><![CDATA[
+                var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
+                    "searchBox");
+                Firebug.Search.status = searchBox.value == "" || val || "notfound";
+                searchBox.setAttribute("status", Firebug.Search.status);
+            ]]></xbl:setter>
+        </property>
+
+        <property name="optionsShown">
+            <xbl:getter><![CDATA[
+                var optionsPopup = document.getElementById("fbSearchOptionsPanel");
+                return optionsPopup.state == "open";
+            ]]></xbl:getter>
+        </property>
+
+        <!-- Flag indicating that the child of the panel has or just had focus -->
+        <field name="panelHasFocus" />
+
+        <!-- Timer to close the popup, set on blur. Any kind of focus that directly follows
+        the blur should clear it with clearBlurTimeout(). -->
+        <field name="blurTimeout">null</field>
+
+        <method name="clearBlurTimeout">
+            <body><![CDATA[
+                if (this.blurTimeout !== null) {
+                    clearTimeout(this.blurTimeout);
+                    this.blurTimeout = null;
+                }
+            ]]></body>
+        </method>
+
+        <method name="updateOptions">
+            <parameter name="menuItems" />
+            <body><![CDATA[
+                var searchOptions = document.getAnonymousElementByAttribute(this, "anonid",
+                    "searchOptionsList");
+                FBL.eraseNode(searchOptions);
+
+                if (menuItems)
+                {
+                    for (var i=0; i<menuItems.length; i++)
+                    {
+                        var checkbox = document.createElement("checkbox");
+                        checkbox.className = "fbsearch-options-label a11yFocus";
+                        checkbox.setAttribute("role", "menuitemcheckbox")
+                        FBL.setItemIntoElement(checkbox, menuItems[i]);
+
+                        searchOptions.appendChild(checkbox);
+                    }
+                }
+            ]]></body>
+        </method>
+
+        <method name="showOptions">
+            <body><![CDATA[
+                var searchBox = document.getAnonymousElementByAttribute(this, "anonid", "searchBox");
+                var searchPrev = document.getAnonymousElementByAttribute(this, "anonid", "searchPrev");
+                var searchNext = document.getAnonymousElementByAttribute(this, "anonid", "searchNext");
+
+                FBL.internationalize(searchBox, "label");
+                FBL.internationalize(searchPrev, "label");
+                FBL.internationalize(searchPrev, "tooltiptext");
+                FBL.internationalize(searchNext, "label");
+                FBL.internationalize(searchNext, "tooltiptext");
+
+                var searchMenu = document.getAnonymousElementByAttribute(this, "anonid",
+                    "fbSearchOptionsMenu");
+                var searchDescription = document.getAnonymousElementByAttribute(this, "anonid",
+                    "fbSearchBoxDescription");
+
+                if (searchMenu)
+                    searchMenu.setAttribute("aria-label", FBL.$STR("a11y.labels.search options"));
+
+                if (searchDescription)
+                {
+                    searchDescription.setAttribute("tooltiptext",
+                        FBL.$STR("a11y.labels.Press up or down arrow key for search options"));
+                }
+
+                var optionsPopup = document.getElementById("fbSearchOptionsPanel");
+                var position = (Firebug.getPlacement() == "detached" ? "after_end" : "before_end");
+
+                this.focused = true;
+                optionsPopup.setAttribute("position", position);
+                var popupBoxObject = optionsPopup.popupBoxObject;
+                popupBoxObject.setConsumeRollupEvent(popupBoxObject.ROLLUP_NO_CONSUME);
+
+                var anchor = document.getAnonymousElementByAttribute(this, "anonid", "searchBox");
+                optionsPopup.openPopup(anchor, position, 0, 0, false, false);
+
+                this.clearBlurTimeout();
+            ]]></body>
+        </method>
+
+        <method name="hideOptions">
+            <body><![CDATA[
+                var optionsPopup = document.getElementById("fbSearchOptionsPanel");
+                optionsPopup.hidePopup();
+
+                this.clearBlurTimeout();
+            ]]></body>
+        </method>
+
+        <method name="searchNext">
+            <body><![CDATA[
+                this.status = Firebug.Search.searchNext(Firebug.currentContext);
+            ]]></body>
+        </method>
+
+        <method name="searchPrev">
+            <body><![CDATA[
+                this.status = Firebug.Search.searchPrev(Firebug.currentContext);
+            ]]></body>
+        </method>
+
+        <method name="focus">
+            <body><![CDATA[
+                var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
+                    "searchBox");
+                searchBox.focus();
+            ]]></body>
+        </method>
+
+        <method name="select">
+            <body><![CDATA[
+                var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
+                    "searchBox");
+                searchBox.select();
+            ]]></body>
+        </method>
+
+        <!-- Focus management handlers. These must be defined as methods and registered
+            using addEventListener or attribute registration as XBL handlers do not
+            appear to allow access to anonymous event targets when capturing. -->
+        <method name="focusHandler">
+            <parameter name="event" />
+            <body><![CDATA[
+                this.panelHasFocus = false;
+                this.clearBlurTimeout();
+
+                if (!FBL.hasClass(event.target, "panelFocusBound") && !this.optionsShown)
+                {
+                    this.showOptions();
+                }
+            ]]></body>
+        </method>
+
+        <method name="panelFocusHandler">
+            <parameter name="event" />
+            <body><![CDATA[
+                this.clearBlurTimeout();
+
+                if (!FBL.hasClass(event.target, "panelFocusBound"))
+                    this.panelHasFocus = true;
+            ]]></body>
+        </method>
+
+        <method name="endTextFocusHandler">
+            <body><![CDATA[
+                this.clearBlurTimeout();
+
+                if (this.panelHasFocus)
+                {
+                    // The user has just tabbed out of the panel
+                    document.commandDispatcher.advanceFocus();
+                    this.panelHasFocus = false;
+                }
+                else if (this.optionsShown)
+                {
+                    // The user has just tabbed out of the search box (and into the panel)
+                    var optionsPopup = document.getElementById("fbSearchOptionsPanel");
+                    document.commandDispatcher.advanceFocusIntoSubtree(optionsPopup);
+                }
+                else
+                {
+                    // The user has just reverse tabbed from the next tab target
+                    this.showOptions();
+
+                    var searchNext = document.getAnonymousElementByAttribute(this, "anonid",
+                        "searchNext");
+                    setTimeout(function() { searchNext.focus(); }, 0);
+                    this.panelHasFocus = true;
+                }
+            ]]></body>
+        </method>
+
+        <method name="startFocusHandler">
+            <body><![CDATA[
+                if (this.panelHasFocus)
+                {
+                    // The user has shift-tabbed out of the panel
+                    var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
+                        "searchBox");
+                    searchBox.focus();
+                    this.panelHasFocus = false;
+                }
+                else
+                {
+                    // The user has just tabbed into the panel
+                    document.commandDispatcher.advanceFocus();
+                    this.panelHasFocus = true;
+                }
+            ]]></body>
+        </method>
+
+        <method name="endFocusHandler">
+            <body><![CDATA[
+                // The user has just tabbed out of the panel
+                this.hideOptions();
+
+                var endTextFocus = document.getAnonymousElementByAttribute(this, "anonid",
+                    "endTextFocus");
+                endTextFocus.focus();
+            ]]></body>
+        </method>
+
+        <method name="onSearchBoxKeyUp">
+            <parameter name="event" />
+            <parameter name="textbox" />
+            <body><![CDATA[
+                textbox.setAttribute("active-search", !!textbox.value);
+
+                if (!Firebug.A11yModel || !Firebug.A11yModel.isEnabled())
+                    return;
+                if (event.keyCode == KeyEvent.DOM_VK_UP || event.keyCode == KeyEvent.DOM_VK_DOWN)
+                {
+                    var goingDown = (event.keyCode == KeyEvent.DOM_VK_DOWN);
+                    var optionsPopup = document.getElementById("fbSearchOptionsPanel");
+                    var items = optionsPopup.getElementsByClassName("a11yFocus");
+                    if (!optionsPopup || !items)
+                        return;
+                    if (optionsPopup.state == "closed")
+                        this.showOptions();
+
+                    setTimeout(FBL.bindFixed(function()
+                    {
+                        items[goingDown ? 0 : items.length -1].focus();
+                    }));
+                }
+                else if (event.keyCode == KeyEvent.DOM_VK_ESCAPE)
+                {
+                    this.hideOptions();
+                }
+            ]]></body>
+        </method>
+
+        <method name="onSearchIconClick">
+            <parameter name="event" />
+            <parameter name="textbox" />
+            <body><![CDATA[
+                if (textbox.value)
+                {
+                    this.value = "";
+                    Firebug.Search.update(Firebug.currentContext);
+                }
+                else
+                {
+                    this.optionsShown ? this.hideOptions() : this.showOptions();
+                }
+
+                if (!this.focused)
+                    this.focus();
+            ]]></body>
+        </method>
+    </implementation>
+
+    <handlers>
+        <handler event="keypress"><![CDATA[
+            if (event.keyCode == KeyEvent.DOM_VK_UP)
+            {
+                if (!FBL.isControl(event))
+                    this.value = Firebug.Search.cycleHistory(1);
+                else
+                    this.searchPrev();
+            }
+            else if (event.keyCode == KeyEvent.DOM_VK_DOWN)
+            {
+                if (!FBL.isControl(event))
+                    this.value = Firebug.Search.cycleHistory(-1);
+                else
+                    this.searchNext();
+            }
+            else if (event.keyCode == KeyEvent.DOM_VK_ESCAPE)
+            {
+                var optionsPopup = document.getElementById("fbSearchOptionsPanel");
+                var searchBox = document.getAnonymousElementByAttribute(this, "anonid",
+                    "searchBox");
+                if (!optionsPopup || !searchBox)
+                    return;
+                searchBox.focus();
+                if (optionsPopup.state == "open" && this.value.length == 0)
+                {
+                    optionsPopup.hidePopup();
+                }
+                else
+                {
+                    this.value = "";
+                    this.status = "noSearch";
+                    Firebug.Search.setPlaceholder();
+                }
+            }
+            else if (event.keyCode == KeyEvent.DOM_VK_RETURN)
+            {
+                if (FBL.isShift(event))
+                    this.searchPrev();
+                else if (FBL.isControl(event))
+                    FBL.dispatch([Firebug.A11yModel], "moveToSearchMatch");
+                else
+                    this.searchNext();
+            }
+            else
+            {
+                return;
+            }
+
+            FBL.cancelEvent(event);
+        ]]></handler>
+
+        <handler event="input"><![CDATA[
+            Firebug.Search.update(Firebug.currentContext);
+        ]]></handler>
+
+        <handler event="popupshowing"><![CDATA[
+            this.panelHasFocus = false;
+        ]]></handler>
+
+        <handler event="blur" phase="capturing"><![CDATA[
+            this.clearBlurTimeout();
+            this.blurTimeout = setTimeout(function()
+            {
+                hideOptions();
+                status = "noSearch";
+                focused = false;
+                Firebug.Search.setPlaceholder();
+            }, 0);
+        ]]></handler>
+    </handlers>
+</binding>
+
+</bindings>
diff --git a/content/firebug/firefox/start-button/startButton.xml b/content/firebug/firefox/start-button/startButton.xml
index a105859..d35ec19 100644
--- a/content/firebug/firefox/start-button/startButton.xml
+++ b/content/firebug/firefox/start-button/startButton.xml
@@ -11,9 +11,6 @@
 
     <content>
         <children includes="observes|template|menupopup|panel|tooltip"/>
-        <xul:stack class="badge">
-            <xul:label class="label" value="0" xbl:inherits="value=errorCount"/>
-        </xul:stack>
         <xul:toolbarbutton class="fb-toolbarbutton box-inherit toolbarbutton-menubutton-button"
             anonid="button" flex="1" allowevents="true"
             xbl:inherits="disabled,crop,image,label,accesskey,command,align,dir,pack,orient"/>
diff --git a/content/firebug/firefox/start-button/startButtonOverlay.js b/content/firebug/firefox/start-button/startButtonOverlay.js
index 4567222..8b34718 100644
--- a/content/firebug/firefox/start-button/startButtonOverlay.js
+++ b/content/firebug/firefox/start-button/startButtonOverlay.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/chrome/firefox",
@@ -10,13 +11,15 @@ define([
     "firebug/lib/options",
     "firebug/firefox/browserOverlayLib",
 ],
-function(Obj, Firebug, Firefox, Locale, Events, Dom, Options, BrowserOverlayLib) {
+function(Module, Obj, Firebug, Firefox, Locale, Events, Dom, Options, BrowserOverlayLib) {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
 
-const Cc = Components.classes;
-const Ci = Components.interfaces;
+var Cc = Components.classes;
+var Ci = Components.interfaces;
 
 // ********************************************************************************************* //
 // Module Implementation
@@ -30,14 +33,14 @@ const Ci = Components.interfaces;
  * such as panel activation and also indicates whether Firebug is activated/deactivated for
  * the current page (by changing its color).
  */
-Firebug.StartButton = Obj.extend(Firebug.Module,
+Firebug.StartButton = Obj.extend(Module,
 /** @lends Firebug.StartButton */
 {
     dispatchName: "startButton",
 
     initializeUI: function()
     {
-        Firebug.Module.initializeUI.apply(this, arguments);
+        Module.initializeUI.apply(this, arguments);
 
         if (FBTrace.DBG_INITIALIZE)
             FBTrace.sysout("StartButton.initializeUI;");
@@ -63,79 +66,60 @@ Firebug.StartButton = Obj.extend(Firebug.Module,
 
         Dom.eraseNode(tooltip);
 
-        with (BrowserOverlayLib)
-        {
-            tooltip.appendChild($label(doc, {
-                "class": "version",
-                value: "Firebug " + Firebug.getVersion()
-            }));
+        tooltip.appendChild(BrowserOverlayLib.$label(doc, {
+            "class": "version",
+            value: Locale.$STR("Firebug") + " " + Firebug.getVersion()
+        }));
 
-            var status = $el(doc, "hbox");
-            tooltip.appendChild(status);
+        var status = BrowserOverlayLib.$el(doc, "hbox");
+        tooltip.appendChild(status);
 
-            var suspended = Firebug.getSuspended();
-            var contexts = Firebug.TabWatcher.contexts.length;
+        var suspended = Firebug.getSuspended();
+        status.appendChild(BrowserOverlayLib.$label(doc, {
+            "class": "status",
+            value: suspended ? Locale.$STR("startbutton.tip.deactivated") :
+                Locale.$STRP("plural.Total_Firebugs2", [Firebug.TabWatcher.contexts.length])
+        }));
 
-            // The tooltip shows number of active contexts (aka tabs with active Firebug)
-            // for every tab, even for those that don't have Firebug active.
-            // This should help the user to see that there is active Firebug instance(s) in
-            // a background Firefox tab.
-            status.appendChild($label(doc, {
-                "class": "status",
-                value: (contexts == 0) ? Locale.$STR("startbutton.tip.deactivated") :
-                    Locale.$STRP("plural.Total_Firebugs2", [contexts])
-            }));
+        if (suspended)
+            return;
 
-            if (contexts == 0)
-                return;
+        status.appendChild(BrowserOverlayLib.$label(doc, {
+            "class": "placement",
+            value: "(" + Locale.$STR(Firebug.getPlacement()) + ")"
+        }));
 
-            status.appendChild($label(doc, {
-                "class": "placement",
-                value: "(" + Locale.$STR(Firebug.getPlacement()) + ")"
+        if (Firebug.allPagesActivation == "on")
+        {
+            tooltip.appendChild(BrowserOverlayLib.$label(doc, {
+                "class": "alwaysOn",
+                value: Locale.$STR("enablement.on") + " " +
+                    Locale.$STR("enablement.for_all_pages")
             }));
+        }
 
-            if (Firebug.allPagesActivation == "on")
-            {
-                tooltip.appendChild($label(doc, {
-                    "class": "alwaysOn",
-                    value: Locale.$STR("enablement.on") + " " +
-                        Locale.$STR("enablement.for_all_pages")
-                }));
-            }
+        // Panel enablement status info
+        tooltip.appendChild(BrowserOverlayLib.$label(doc, {
+            "class": "enablement",
+            value: Locale.$STR("enablement.Panel_activation_status")
+        }));
 
-            // If there are active contexts, but not on the current page make a little
-            // note about that
-            if (!Firebug.currentContext && contexts)
-            {
-                tooltip.appendChild($label(doc, {
-                    "class": "activeInBackground",
-                    value: Locale.$STR("enablement.active_in_background")
-                }));
-            }
+        var statuses = this.getEnablementStatus();
+        for (var i=0; i<statuses.length; i++)
+        {
+            var status = statuses[i];
+            var parent = BrowserOverlayLib.$el(doc, "hbox");
+            tooltip.appendChild(parent);
 
-            // Panel enablement status info
-            tooltip.appendChild($label(doc, {
-                "class": "enablement",
-                value: Locale.$STR("enablement.Panel_activation_status")
+            parent.appendChild(BrowserOverlayLib.$label(doc, {
+                "class": "panelName " + status.status,
+                value: status.name + ":"
             }));
 
-            var statuses = this.getEnablementStatus();
-            for (var i=0; i<statuses.length; i++)
-            {
-                var status = statuses[i];
-                var parent = $el(doc, "hbox");
-                tooltip.appendChild(parent);
-
-                parent.appendChild($label(doc, {
-                    "class": "panelName " + status.status,
-                    value: status.name + ":"
-                }));
-
-                parent.appendChild($label(doc, {
-                    "class": "panelStatus " + status.status,
-                    value: status.statusLabel
-                }));
-            }
+            parent.appendChild(BrowserOverlayLib.$label(doc, {
+                "class": "panelStatus " + status.status,
+                value: status.statusLabel
+            }));
         }
     },
 
@@ -144,24 +128,27 @@ Firebug.StartButton = Obj.extend(Firebug.Module,
 
     showCount: function(errorCount)
     {
-        var firebugButton = Firefox.getElementById("firebug-button");
+        var errorBadge = Firefox.getElementById("firebug-error-badge");
         if (errorCount && Firebug.showErrorCount)
         {
-            if (firebugButton)
+            if (errorBadge)
             {
-                firebugButton.setAttribute("showErrors", "true");
-                firebugButton.setAttribute("errorCount", errorCount);
+                var errorLabel = Firefox.getElementById("firebug-error-label");
+                errorBadge.setAttribute("showErrors", "true");
+                errorLabel.setAttribute("value", errorCount);
+                errorLabel.setAttribute("tooltiptext", Locale.$STRP("plural.startbutton.tip.errors", [errorCount]))
             }
         }
         else
         {
-            if (firebugButton)
+            if (errorBadge)
             {
-                firebugButton.removeAttribute("showErrors");
+                errorBadge.removeAttribute("showErrors");
 
                 // Use '0', so the horizontal space for the number is still allocated.
                 // The button will cause re-layout if there are more than 9 errors.
-                firebugButton.setAttribute("errorCount", "0");
+                var errorLabel = Firefox.getElementById("firebug-error-label");
+                errorLabel.setAttribute("value", "0");
             }
         }
     },
@@ -175,19 +162,12 @@ Firebug.StartButton = Obj.extend(Firebug.Module,
         if (!firebugStatus)
             return;
 
-        // The start button is half/colorful if Firebug is active in the background.
-        var contexts = Firebug.TabWatcher.contexts.length;
-        var active = (contexts > 0) ? "background" : "false";
-
-        // The start button is colorful if Firebug is active on the current page.
-        active = Firebug.currentContext ? "true" : active;
+        // The start button is colorful only if there is a context
+        var active = Firebug.currentContext ? "true" : "false";
         firebugStatus.setAttribute("firebugActive", active);
 
         if (FBTrace.DBG_TOOLTIP)
-        {
-            FBTrace.sysout("StartButton.resetTooltip; active: " + active +
-                ", contexts: " + contexts);
-        }
+            FBTrace.sysout("StartButton.resetTooltip; called: firebug active: " + active);
     },
 
     getEnablementStatus: function()
diff --git a/content/firebug/html/attributeEditor.js b/content/firebug/html/attributeEditor.js
new file mode 100644
index 0000000..7f49f0e
--- /dev/null
+++ b/content/firebug/html/attributeEditor.js
@@ -0,0 +1,400 @@
+/* See license.txt for terms of usage */
+/*global define:1*/
+
+define([
+    "firebug/firebug",
+    "firebug/lib/dom",
+    "firebug/lib/domplate",
+    "firebug/lib/events",
+    "firebug/lib/xml",
+    "firebug/css/autoCompleter",
+    "firebug/editor/editor",
+    "firebug/editor/inlineEditor",
+    "firebug/html/htmlReps",
+],
+function(Firebug, Dom, Domplate, Events, Xml, CSSAutoCompleter, Editor, InlineEditor, HTMLReps) {
+
+"use strict";
+
+// ********************************************************************************************* //
+// AttributeEditor
+
+function AttributeEditor(doc)
+{
+    this.initializeInline(doc);
+}
+
+AttributeEditor.prototype = Domplate.domplate(InlineEditor.prototype,
+{
+    saveEdit: function(target, value, previousValue)
+    {
+        var element = Firebug.getRepObject(target);
+        if (!element)
+            return;
+
+        // For HTML elements, make the attribute name into lower case to match
+        // what it gets normalized to by the browser - otherwise we will be
+        // fooled into thinking that an extra attribute has appeared (issue 6996).
+        if (target.classList.contains("nodeName") && Xml.isElementHTML(element))
+            value = value.toLowerCase();
+
+        target.textContent = value;
+
+        // Note: attribute name changes are saved in endEditing, to prevent overwriting
+        // existing attributes.
+
+        if (target.classList.contains("nodeValue") && value !== previousValue)
+        {
+            var attrName = Dom.getPreviousByClass(target, "nodeName").textContent;
+            element.setAttribute(attrName, value);
+
+            var panel = Firebug.getElementPanel(target);
+            Events.dispatch(Firebug.uiListeners, "onObjectChanged", [element, panel]);
+        }
+    },
+
+    beginEditing: function(target, value)
+    {
+        this.initialValue = value;
+    },
+
+    endEditing: function(target, value, cancel)
+    {
+        var previousValue = this.initialValue;
+        delete this.initialValue;
+
+        if (!cancel && value !== previousValue)
+        {
+            var element = Firebug.getRepObject(target);
+            if (!element)
+                return;
+
+            if (target.classList.contains("nodeName"))
+            {
+                // Save changed attribute names here instead of in saveEdit, because otherwise
+                // unrelated properties might get discarded.
+                if (previousValue)
+                    element.removeAttribute(previousValue);
+
+                if (value)
+                {
+                    var attrValue = Dom.getNextByClass(target, "nodeValue").textContent;
+                    element.setAttribute(value, attrValue);
+                }
+
+                var panel = Firebug.getElementPanel(target);
+                Events.dispatch(Firebug.uiListeners, "onObjectChanged", [element, panel]);
+            }
+            else
+            {
+                var attrName = Dom.getPreviousByClass(target, "nodeName").textContent;
+                if (attrName === "style" && value.endsWith("; "))
+                {
+                    value = value.slice(0, -1);
+                    this.input.value = value;
+                    element.setAttribute(attrName, value);
+                }
+            }
+        }
+
+        // Remove group unless it is valid for it to be empty.
+        return !this.isEmptyValid(target);
+    },
+
+    isEmptyValid: function(target)
+    {
+        return target.classList.contains("nodeValue");
+    },
+
+    advanceToNext: function(target, charCode)
+    {
+        if (charCode == 61 /* '=' */ && target.classList.contains("nodeName"))
+        {
+            return true;
+        }
+        else if ((charCode == 34 /* '"' */ || charCode == 39 /* ''' */) &&
+            target.classList.contains("nodeValue"))
+        {
+            var nonRestrictiveAttributes =
+            [
+                "onabort",
+                "onblur",
+                "onchange",
+                "onclick",
+                "ondblclick",
+                "onerror",
+                "onfocus",
+                "onkeydown",
+                "onkeypress",
+                "onkeyup",
+                "onload",
+                "onmousedown",
+                "onmousemove",
+                "onmouseout",
+                "onmouseover",
+                "onmouseup",
+                "onreset",
+                "onselect",
+                "onsubmit",
+                "onunload",
+                "title",
+                "alt",
+                "style"
+            ];
+
+            var attrName = Dom.getPreviousByClass(target, "nodeName").textContent;
+
+            // This should cover most of the cases where quotes are allowed inside the value
+            // See issue 4542
+            for (var i = 0; i < nonRestrictiveAttributes.length; i++)
+            {
+                if (attrName == nonRestrictiveAttributes[i])
+                    return false;
+            }
+            return true;
+        }
+    },
+
+    isInStyleAttrValue: function()
+    {
+        var target = this.target;
+        if (!target.classList.contains("nodeValue"))
+            return false;
+        var attrName = Dom.getPreviousByClass(target, "nodeName").textContent;
+        return (attrName === "style");
+    },
+
+    getAutoCompleteRange: function(value, offset)
+    {
+        if (!this.isInStyleAttrValue())
+            return null;
+
+        var propNameIndex = offset ? value.lastIndexOf(";", offset-1) + 1 : 0;
+        var propValueIndex = offset ? value.lastIndexOf(":", offset-1) + 1 : 0;
+        while (propValueIndex < value.length && value.charAt(propValueIndex) === " ")
+            propValueIndex++;
+        while (propNameIndex < value.length && value.charAt(propNameIndex) === " ")
+            propNameIndex++;
+
+        if (propValueIndex > propNameIndex)
+        {
+            // Auto-complete a property value.
+            var propName = value.slice(propNameIndex).replace(/:.*/, "").trim();
+            var start = propValueIndex;
+            var end = value.indexOf(";", propValueIndex);
+            if (end === -1)
+                end = value.length;
+
+            var propValue = value.slice(start, end);
+            var subRange = CSSAutoCompleter.getPropertyRange(propName, propValue,
+                offset - start);
+            if (!subRange)
+                subRange = {start: 0, end: propValue.length};
+            start = propValueIndex + subRange.start;
+            end = propValueIndex + subRange.end;
+
+            return {
+                start: start,
+                end: end,
+                type: "value",
+                propName: propName,
+                subRange: subRange
+            };
+        }
+        else
+        {
+            // Auto-complete a property name.
+            var end = value.indexOf(":", propNameIndex);
+            if (end === -1)
+                end = value.length;
+            return {start: propNameIndex, end: end, type: "name"};
+        }
+    },
+
+    getAutoCompletePropSeparator: function(range, expr, prefixOf)
+    {
+        if (!this.isInStyleAttrValue())
+            return null;
+        if (range.type === "name")
+        {
+            if (prefixOf.charAt(0) === ";")
+                return ": ";
+            else
+                return ": ; ";
+        }
+        else
+        {
+            return CSSAutoCompleter.getValuePropSeparator(range.propName, range.subRange);
+        }
+    },
+
+    getAutoCompleteList: function(preExpr, expr, postExpr, range, cycle, context, out)
+    {
+        var target = this.target;
+        var element = Firebug.getRepObject(target);
+        if (!element)
+            return;
+
+        var nodeType = Xml.getElementSimpleType(element);
+        var tagName = element.localName;
+        if (target.classList.contains("nodeName"))
+        {
+            var list = Xml.getAttributesForTagName(nodeType, tagName);
+            var initialValue = this.initialValue;
+            return list.filter(function(name)
+            {
+                return (name === initialValue || !element.hasAttribute(name));
+            });
+        }
+        else if (this.isInStyleAttrValue())
+        {
+            if (range.type === "name")
+            {
+                return CSSAutoCompleter.autoCompletePropertyName(nodeType, expr, cycle, out);
+            }
+            else
+            {
+                var pre = preExpr.slice(preExpr.lastIndexOf(":") + 1).trim();
+                var postInd = postExpr.indexOf(";");
+                var post = (postInd === -1 ? postExpr : postExpr.slice(0, postInd));
+                return CSSAutoCompleter.autoCompletePropertyValue(nodeType, range.propName,
+                    pre, expr, post, range.subRange, cycle, context, out);
+            }
+        }
+        else if (target.classList.contains("nodeValue"))
+        {
+            var attrName = Dom.getPreviousByClass(target, "nodeName").textContent;
+            return Xml.getValuesForAttribute(nodeType, tagName, attrName);
+        }
+    },
+
+    autoCompleteAdjustSelection: function(value, offset, data)
+    {
+        // For CSS, and some SVG attribute values, jump into function parameter lists.
+        if (offset >= 2 && value.substr(offset - 2, 2) === "()")
+            return offset - 1;
+
+        if (!this.isInStyleAttrValue())
+            return offset;
+
+        // In the case "prop|:", accepting the completion should jump directly into
+        // the property value (skipping the colons).
+        if (offset < value.length && value.substr(offset, 2) === ":")
+            value = this.input.value = value + " ";
+        if (offset < value.length && value.substr(offset, 2) === ": ")
+            return offset + 2;
+
+        // When accepting the completion, except by right arrow key (which should
+        // work only within the property value), skip past semicolons and possibly
+        // add a new separator (colon/semicolon, depending on which part we are in).
+        if (data === "styleadvance")
+        {
+            if (offset < value.length && value.substr(offset, 2) === ";")
+                value = this.input.value = value + " ";
+            if (offset < value.length && value.substr(offset, 2) === "; ")
+                return offset + 2;
+            if (offset === value.length)
+            {
+                var propNameIndex = value.lastIndexOf(";");
+                var propValueIndex = value.lastIndexOf(":");
+                var endingChar = (propValueIndex > propNameIndex ? ";" : ":");
+                this.input.value = value + endingChar + " ";
+                return offset + 2;
+            }
+        }
+        return offset;
+    },
+
+    handleStyleAttrKeyPress: function(event)
+    {
+        var inputField = this.input;
+        var value = inputField.value;
+        var offset = inputField.selectionStart;
+        var hasSelection = (offset != inputField.selectionEnd);
+
+        var propNameIndex = offset ? value.lastIndexOf(";", offset-1) + 1 : 0;
+        var propValueIndex = offset ? value.lastIndexOf(":", offset-1) + 1 : 0;
+        var inValue = (propValueIndex > propNameIndex);
+
+        // Compute which one of ; (59) and : (58) should advance to the next
+        // field (depending on whether we are in a value or a name).
+        var advanceChar = (inValue ? 59 : 58);
+        var advanceByChar = (event.charCode === advanceChar);
+
+        if (advanceByChar)
+        {
+            if (this.getAutoCompleter().acceptCompletion(inputField, "styleadvance"))
+                return true;
+            if (!hasSelection && value.charCodeAt(offset) === advanceChar)
+            {
+                // Make ; advance past a ; already there.
+                inputField.setSelectionRange(offset + 2, offset + 2);
+                return true;
+            }
+        }
+        else if (event.keyCode === KeyEvent.DOM_VK_TAB ||
+            event.keyCode === KeyEvent.DOM_VK_RETURN)
+        {
+            if (this.getAutoCompleter().acceptCompletion(inputField, "styleadvance"))
+                return true;
+            if (!hasSelection && !inValue && value.slice(propNameIndex, offset).trim())
+            {
+                // Make <tab> advance from name to value.
+                var ind = this.autoCompleteAdjustSelection(value, offset,
+                    "styleadvance");
+                if (ind !== null)
+                {
+                    inputField.setSelectionRange(ind, ind);
+                    Editor.update();
+                    return true;
+                }
+            }
+        }
+        return false;
+    },
+
+    onKeyPress: function(event)
+    {
+        if (this.isInStyleAttrValue())
+        {
+            var handled = this.handleStyleAttrKeyPress(event);
+            if (handled)
+                Events.cancelEvent(event);
+        }
+        InlineEditor.prototype.onKeyPress.call(this, event);
+    },
+
+    insertNewRow: function(target, insertWhere)
+    {
+        var emptyAttr = {name: "", value: ""};
+        var sibling = insertWhere == "before" ? target.previousSibling : target;
+        return HTMLReps.AttrTag.insertAfter({attr: emptyAttr}, sibling);
+    },
+
+    getInitialValue: function(target, value)
+    {
+        if (!value)
+            return value;
+
+        var element = Firebug.getRepObject(target);
+        if (element && element instanceof window.Element)
+        {
+            // If object that was clicked to edit was
+            // attribute value, not attribute name.
+            if (target.classList.contains("nodeValue"))
+            {
+                var attributeName = Dom.getPreviousByClass(target, "nodeName").textContent;
+                return element.getAttribute(attributeName);
+            }
+        }
+        return value;
+    }
+});
+
+// ********************************************************************************************* //
+// Registration
+
+return AttributeEditor;
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/html/highlighter.css b/content/firebug/html/highlighter.css
index 049ed82..d72db0a 100644
--- a/content/firebug/html/highlighter.css
+++ b/content/firebug/html/highlighter.css
@@ -22,6 +22,9 @@
     pointer-events: none !important;
     white-space: normal !important;
 }
+style.firebugResetStyles {
+    display: none !important;
+}
 
 .firebugBlockBackgroundColor {
     background-color: transparent !important;
diff --git a/content/firebug/html/highlighterCache.js b/content/firebug/html/highlighterCache.js
index a0bb8fd..39df593 100644
--- a/content/firebug/html/highlighterCache.js
+++ b/content/firebug/html/highlighterCache.js
@@ -4,6 +4,8 @@ define([
 ],
 function() {
 
+"use strict";
+
 // ********************************************************************************************* //
 // Constants
 
diff --git a/content/firebug/html/htmlLib.js b/content/firebug/html/htmlLib.js
index 091e4ee..dfe1054 100644
--- a/content/firebug/html/htmlLib.js
+++ b/content/firebug/html/htmlLib.js
@@ -7,9 +7,10 @@ define([
     "firebug/lib/dom",
     "firebug/lib/search",
     "firebug/lib/xml",
+    "firebug/lib/xpath",
     "firebug/lib/string",
 ],
-function(Obj, Events, Css, Dom, Search, Xml, Str) {
+function(Obj, Events, Css, Dom, Search, Xml, Xpath, Str) {
 
 // ********************************************************************************************* //
 // Constants
@@ -47,6 +48,37 @@ var HTMLLib =
         walker = walker || new HTMLLib.DOMWalker(root);
         var re = new Search.ReversibleRegExp(text, "m");
         var matchCount = 0;
+        var nodeSet = new Set();
+
+        // Try also to parse the text as a CSS or XPath selector, and merge
+        // the result sets together.
+        try
+        {
+            var isXPath = (text.charAt(0) === "/");
+            function eachDoc(doc)
+            {
+                var nodes = isXPath ?
+                    Xpath.evaluateXPath(doc, text, doc, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE) :
+                    doc.querySelectorAll(text);
+
+                for (var i = 0, len = nodes.length; i < len; ++i)
+                    nodeSet.add(nodes[i]);
+
+                var frames = doc.getElementsByTagName("iframe");
+                for (var i = 0, len = frames.length; i < len; ++i)
+                {
+                    var fr = frames[i];
+                    if (fr.contentDocument)
+                        eachDoc(fr.contentDocument);
+                }
+            }
+            eachDoc(root.ownerDocument || root);
+        }
+        catch (exc)
+        {
+            // Not a valid selector.
+            nodeSet = null;
+        }
 
         /**
          * Finds the first match within the document.
@@ -160,21 +192,45 @@ var HTMLLib =
          */
         this.checkNode = function(node, reverse, caseSensitive, firstStep)
         {
+            if (nodeSet && nodeSet.has(node))
+            {
+                // If a selector matches the node, that takes priority.
+                return {
+                    node: node,
+                    isValue: false,
+                    match: re.fakeMatch(node.localName, reverse, caseSensitive),
+                    fullNodeMatch: true
+                };
+            }
+
             var checkOrder;
-            if (node.nodeType != Node.TEXT_NODE)
+            if (node.nodeType == Node.ELEMENT_NODE)
             {
-                var nameCheck = { name: "nodeName", isValue: false, caseSensitive: caseSensitive };
-                var valueCheck = { name: "nodeValue", isValue: true, caseSensitive: caseSensitive };
-                checkOrder = reverse ? [ valueCheck, nameCheck ] : [ nameCheck, valueCheck ];
+                // For non-qualified XML names (where localName and nodeName are the same thing) we
+                // want the initial capitalization (localName); when !caseSensitive it doesn't matter.
+                var name = (!caseSensitive || node.nodeName.length > node.localName.length ?
+                    "nodeName" : "localName");
+                checkOrder = [{name: name, isValue: false}];
+            }
+            else if (node.nodeType == Node.TEXT_NODE)
+            {
+                checkOrder = [{name: "nodeValue", isValue: false}];
+            }
+            else if (node.nodeType == Node.ATTRIBUTE_NODE)
+            {
+                checkOrder = [{name: "nodeName", isValue: false}, {name: "nodeValue", isValue: true}];
+                if (reverse)
+                    checkOrder.reverse();
             }
             else
             {
-                checkOrder = [{name: "nodeValue", isValue: false, caseSensitive: caseSensitive }];
+                // Skip comment nodes etc.
+                return;
             }
 
             for (var i = firstStep || 0; i < checkOrder.length; i++)
             {
-                var m = re.exec(node[checkOrder[i].name], reverse, checkOrder[i].caseSensitive);
+                var m = re.exec(node[checkOrder[i].name], reverse, caseSensitive);
                 if (m) {
                     return {
                         node: node,
@@ -230,18 +286,50 @@ var HTMLLib =
          */
         this.selectMatched = function(nodeBox, node, match, reverse)
         {
-            setTimeout(Obj.bindFixed(function()
+            // Force a reflow to make sure search highlighting works (issue 6952).
+            nodeBox.offsetWidth;
+
+            if (match.fullNodeMatch)
+            {
+                this.selectWholeNode(nodeBox);
+            }
+            else
             {
                 var reMatch = match.match;
                 this.selectNodeText(nodeBox, node, reMatch[0], reMatch.index, reverse,
                     reMatch.caseSensitive);
+            }
 
-                Events.dispatch([Firebug.A11yModel], "onHTMLSearchMatchFound",
-                    [panelNode.ownerPanel, match]);
-            }, this));
+            Events.dispatch([Firebug.A11yModel], "onHTMLSearchMatchFound",
+                [panelNode.ownerPanel, match]);
         };
 
         /**
+         * Select a whole node as a search result.
+         *
+         * @private
+         */
+        this.selectWholeNode = function(nodeBox)
+        {
+            nodeBox = Dom.getAncestorByClass(nodeBox, "nodeBox");
+            var labelBox = Dom.getChildByClass(nodeBox, "nodeLabel");
+            Css.setClass(labelBox, "search-selection");
+            Dom.scrollIntoCenterView(labelBox, panelNode);
+
+            var sel = panelNode.ownerDocument.defaultView.getSelection();
+            sel.removeAllRanges();
+
+            var range = panelNode.ownerDocument.createRange();
+            var until = labelBox.getElementsByClassName("nodeBracket")[0];
+            var from = until.parentNode.firstChild;
+            range.setStartBefore(from);
+            range.setEndAfter(until);
+            sel.addRange(range);
+
+            Css.removeClass(labelBox, "search-selection");
+        },
+
+        /**
          * Select text node search results.
          *
          * @private
@@ -273,6 +361,11 @@ var HTMLLib =
             if (row)
             {
                 var trueNodeBox = Dom.getAncestorByClass(nodeBox, "nodeBox");
+
+                // Temporarily add '-moz-user-select: text' to the node, so
+                // that selections show up (issue 2741).
+                // XXX(simon): This doesn't seem to be needed any more as of
+                // Fx 27, so we ought to remove it at some point.
                 Css.setClass(trueNodeBox, "search-selection");
 
                 Dom.scrollIntoCenterView(row, panelNode);
@@ -289,104 +382,6 @@ var HTMLLib =
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
     /**
-     * XXXjjb this code is no longer called and won't be in 1.5; if FireFinder works out we can delete this.
-     * Constructs a SelectorSearch instance.
-     *
-     * @class Class used to search a DOM tree for elements matching the given
-     *        CSS selector.
-     *
-     * @constructor
-     * @param {String} text CSS selector to search for
-     * @param {Document} doc Document to search
-     * @param {Object} panelNode Panel node containing the IO Box representing the DOM tree.
-     * @param {Object} ioBox IO Box to display the search results in
-     */
-    SelectorSearch: function(text, doc, panelNode, ioBox)
-    {
-        this.parent = new HTMLLib.NodeSearch(text, doc, panelNode, ioBox);
-
-        /**
-         * Finds the first match within the document.
-         *
-         * @param {boolean} revert true to search backward, false to search forward
-         * @param {boolean} caseSensitive true to match exact case, false to ignore case
-         * @return true if no more matches were found, but matches were found previously.
-         */
-        this.find = this.parent.find;
-
-        /**
-         * Resets the search to the beginning of the document.
-         */
-        this.reset = this.parent.reset;
-
-        /**
-         * Opens the given node in the associated IO Box.
-         *
-         * @private
-         */
-        this.openToNode = this.parent.openToNode;
-
-        try
-        {
-            // http://dev.w3.org/2006/webapi/selectors-api/
-            this.matchingNodes = doc.querySelectorAll(text);
-            this.matchIndex = 0;
-        }
-        catch(exc)
-        {
-            FBTrace.sysout("SelectorSearch FAILS "+exc, exc);
-        }
-
-        /**
-         * Finds the next match in the document.
-         *
-         * The return value is an object with the fields
-         * - node: Node that contains the match
-         * - isValue: true if the match is a match due to the value of the node, false if it is due to the name
-         * - match: Regular expression result from the match
-         *
-         * @param {boolean} revert true to search backward, false to search forward
-         * @param {boolean} caseSensitive true to match exact case, false to ignore case
-         * @return Match object if found
-         */
-        this.findNextMatch = function(reverse, caseSensitive)
-        {
-            if (!this.matchingNodes || !this.matchingNodes.length)
-                return undefined;
-
-            if (reverse)
-            {
-                if (this.matchIndex > 0)
-                    return { node: this.matchingNodes[this.matchIndex--], isValue: false, match: "?XX?"};
-                else
-                    return undefined;
-            }
-            else
-            {
-                if (this.matchIndex < this.matchingNodes.length)
-                    return { node: this.matchingNodes[this.matchIndex++], isValue: false, match: "?XX?"};
-                else
-                    return undefined;
-            }
-        };
-
-        /**
-         * Selects the search results.
-         *
-         * @private
-         */
-        this.selectMatched = function(nodeBox, node, match, reverse)
-        {
-            setTimeout(Obj.bindFixed(function()
-            {
-                ioBox.select(node, true, true);
-                Events.dispatch([Firebug.A11yModel], "onHTMLSearchMatchFound", [panelNode.ownerPanel, match]);
-            }, this));
-        };
-    },
-
-
-    /**
      * Constructs a DOMWalker instance.
      *
      * @constructor
@@ -563,7 +558,7 @@ var HTMLLib =
      */
     isSourceElement: function(element)
     {
-        if (!Xml.isElementHTML(element) && !Xml.isElementXHTML(element))
+        if (!Xml.isElementHTMLOrXHTML(element))
             return false;
 
         var tag = element.localName ? element.localName.toLowerCase() : "";
diff --git a/content/firebug/html/htmlModule.js b/content/firebug/html/htmlModule.js
new file mode 100644
index 0000000..49b6f00
--- /dev/null
+++ b/content/firebug/html/htmlModule.js
@@ -0,0 +1,505 @@
+/* See license.txt for terms of usage */
+/*global define:1*/
+
+define([
+    "firebug/firebug",
+    "firebug/lib/trace",
+    "firebug/lib/array",
+    "firebug/lib/css",
+    "firebug/lib/dom",
+    "firebug/lib/domplate",
+    "firebug/lib/events",
+    "firebug/lib/locale",
+    "firebug/lib/object",
+    "firebug/lib/persist",
+    "firebug/lib/xpath",
+    "firebug/chrome/module",
+    "firebug/chrome/rep",
+    "firebug/html/htmlReps",
+    "firebug/js/breakpoint",
+],
+function(Firebug, FBTrace, Arr, Css, Dom, Domplate, Events, Locale, Obj, Persist, Xpath,
+    Module, Rep, HTMLReps) {
+
+"use strict";
+
+// ********************************************************************************************* //
+// Constants
+
+var {domplate, TAG, DIV, SPAN, INPUT} = Domplate;
+
+var BP_BREAKONATTRCHANGE = 1;
+var BP_BREAKONCHILDCHANGE = 2;
+var BP_BREAKONREMOVE = 3;
+var BP_BREAKONTEXT = 4;
+
+// ********************************************************************************************* //
+// HTMLModule
+
+var HTMLModule = Obj.extend(Module,
+{
+    dispatchName: "htmlModule",
+
+    initialize: function(prefDomain, prefNames)
+    {
+        Module.initialize.apply(this, arguments);
+        Firebug.connection.addListener(this.DebuggerListener);
+    },
+
+    shutdown: function()
+    {
+        Module.shutdown.apply(this, arguments);
+        Firebug.connection.removeListener(this.DebuggerListener);
+    },
+
+    initContext: function(context, persistedState)
+    {
+        Module.initContext.apply(this, arguments);
+        context.mutationBreakpoints = new MutationBreakpointGroup(context);
+    },
+
+    loadedContext: function(context, persistedState)
+    {
+        context.mutationBreakpoints.load(context);
+    },
+
+    destroyContext: function(context, persistedState)
+    {
+        Module.destroyContext.apply(this, arguments);
+
+        context.mutationBreakpoints.store(context);
+    },
+
+    deleteNode: function(node, context)
+    {
+        Events.dispatch(this.fbListeners, "onBeginFirebugChange", [node, context]);
+        node.parentNode.removeChild(node);
+        Events.dispatch(this.fbListeners, "onEndFirebugChange", [node, context]);
+    },
+
+    deleteAttribute: function(node, attr, context)
+    {
+        Events.dispatch(this.fbListeners, "onBeginFirebugChange", [node, context]);
+        node.removeAttribute(attr);
+        Events.dispatch(this.fbListeners, "onEndFirebugChange", [node, context]);
+    }
+});
+
+// ********************************************************************************************* //
+// Mutation Breakpoints
+
+/**
+ * @class Represents {@link Firebug.Debugger} listener. This listener is reponsible for
+ * providing a list of mutation-breakpoints into the Breakpoints side-panel.
+ */
+HTMLModule.DebuggerListener =
+{
+    getBreakpoints: function(context, groups)
+    {
+        if (!context.mutationBreakpoints.isEmpty())
+            groups.push(context.mutationBreakpoints);
+    }
+};
+
+HTMLModule.MutationBreakpoints =
+{
+    breakOnNext: function(context, breaking)
+    {
+        context.breakOnNextMutate = breaking;
+    },
+
+    breakOnNextMutate: function(event, context, type)
+    {
+        if (!context.breakOnNextMutate)
+            return false;
+
+        // Ignore changes in ignored branches
+        if (isAncestorIgnored(event.target))
+            return false;
+
+        context.breakOnNextMutate = false;
+
+        this.breakWithCause(event, context, type);
+    },
+
+    breakWithCause: function(event, context, type)
+    {
+        var changeLabel = HTMLModule.BreakpointRep.getChangeLabel({type: type});
+        context.breakingCause = {
+            title: Locale.$STR("html.Break On Mutate"),
+            message: changeLabel,
+            type: event.type,
+            target: event.target,
+            relatedNode: event.relatedNode, // http://www.w3.org/TR/DOM-Level-2-Events/events.html
+            prevValue: event.prevValue,
+            newValue: event.newValue,
+            attrName: event.attrName,
+            attrChange: event.attrChange,
+        };
+
+        Firebug.Breakpoint.breakNow(context.getPanel("html", true));
+        return true;
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Mutation event handlers.
+
+    onMutateAttr: function(event, context)
+    {
+        if (this.breakOnNextMutate(event, context, BP_BREAKONATTRCHANGE))
+            return;
+
+        var breakpoints = context.mutationBreakpoints;
+        var self = this;
+        breakpoints.enumerateBreakpoints(function(bp) {
+            if (bp.checked && bp.node == event.target && bp.type == BP_BREAKONATTRCHANGE) {
+                self.breakWithCause(event, context, BP_BREAKONATTRCHANGE);
+                return true;
+            }
+        });
+    },
+
+    onMutateText: function(event, context)
+    {
+        if (this.breakOnNextMutate(event, context, BP_BREAKONTEXT))
+            return;
+    },
+
+    onMutateNode: function(event, context)
+    {
+        var node = event.target;
+        var removal = event.type == "DOMNodeRemoved";
+
+        if (this.breakOnNextMutate(event, context, removal ?
+            BP_BREAKONREMOVE : BP_BREAKONCHILDCHANGE))
+        {
+            return;
+        }
+
+        var breakpoints = context.mutationBreakpoints;
+        var breaked = false;
+
+        var self = this;
+        if (removal)
+        {
+            breaked = breakpoints.enumerateBreakpoints(function(bp) {
+                if (bp.checked && bp.node == node && bp.type == BP_BREAKONREMOVE) {
+                    self.breakWithCause(event, context, BP_BREAKONREMOVE);
+                    return true;
+                }
+            });
+        }
+
+        if (!breaked)
+        {
+            // Collect all parents of the mutated node.
+            var parents = [];
+            for (var parent = node.parentNode; parent; parent = parent.parentNode)
+                parents.push(parent);
+
+            // Iterate over all parents and see if some of them has a breakpoint.
+            breakpoints.enumerateBreakpoints(function(bp)
+            {
+                for (var i=0; i<parents.length; i++)
+                {
+                    if (bp.checked && bp.node == parents[i] && bp.type == BP_BREAKONCHILDCHANGE)
+                    {
+                        self.breakWithCause(event, context, BP_BREAKONCHILDCHANGE);
+                        return true;
+                    }
+                }
+            });
+        }
+
+        if (removal)
+        {
+            // Remove all breakpoints associated with removed node.
+            var invalidate = false;
+            breakpoints.enumerateBreakpoints(function(bp)
+            {
+                if (bp.node == node)
+                {
+                    breakpoints.removeBreakpoint(bp);
+                    invalidate = true;
+                }
+            });
+
+            if (invalidate)
+                context.invalidatePanels("breakpoints");
+        }
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Context menu items
+
+    getContextMenuItems: function(context, node, target, items)
+    {
+        if (!(node && node.nodeType == Node.ELEMENT_NODE))
+            return;
+
+        var breakpoints = context.mutationBreakpoints;
+
+        var attrBox = Dom.getAncestorByClass(target, "nodeAttr");
+        if (Dom.getAncestorByClass(target, "nodeAttr"))
+        {
+        }
+
+        if (!(Css.nonEditableTags.hasOwnProperty(node.localName)))
+        {
+            items.push(
+                "-",
+                {
+                    label: "html.label.Break_On_Attribute_Change",
+                    tooltiptext: "html.tip.Break_On_Attribute_Change",
+                    type: "checkbox",
+                    checked: breakpoints.findBreakpoint(node, BP_BREAKONATTRCHANGE),
+                    command: Obj.bindFixed(this.onModifyBreakpoint, this, context, node,
+                        BP_BREAKONATTRCHANGE)
+                },
+                {
+                    label: "html.label.Break_On_Child_Addition_or_Removal",
+                    tooltiptext: "html.tip.Break_On_Child_Addition_or_Removal",
+                    type: "checkbox",
+                    checked: breakpoints.findBreakpoint(node, BP_BREAKONCHILDCHANGE),
+                    command: Obj.bindFixed(this.onModifyBreakpoint, this, context, node,
+                        BP_BREAKONCHILDCHANGE)
+                },
+                {
+                    label: "html.label.Break_On_Element_Removal",
+                    tooltiptext: "html.tip.Break_On_Element_Removal",
+                    type: "checkbox",
+                    checked: breakpoints.findBreakpoint(node, BP_BREAKONREMOVE),
+                    command: Obj.bindFixed(this.onModifyBreakpoint, this, context, node,
+                        BP_BREAKONREMOVE)
+                }
+            );
+        }
+    },
+
+    onModifyBreakpoint: function(context, node, type)
+    {
+        var xpath = Xpath.getElementXPath(node);
+        if (FBTrace.DBG_HTML)
+            FBTrace.sysout("html.onModifyBreakpoint " + xpath);
+
+        var breakpoints = context.mutationBreakpoints;
+        var bp = breakpoints.findBreakpoint(node, type);
+
+        // Remove an existing or create new breakpoint.
+        if (bp)
+            breakpoints.removeBreakpoint(bp);
+        else
+            breakpoints.addBreakpoint(node, type);
+
+        Events.dispatch(HTMLModule.fbListeners, "onModifyBreakpoint",
+            [context, xpath, type]);
+    }
+};
+
+HTMLModule.Breakpoint = function(node, type)
+{
+    this.node = node;
+    this.xpath = Xpath.getElementXPath(node);
+    this.checked = true;
+    this.type = type;
+};
+
+HTMLModule.BreakpointRep = domplate(Rep,
+{
+    inspectable: false,
+
+    tag:
+        DIV({"class": "breakpointRow focusRow", $disabled: "$bp|isDisabled", _repObject: "$bp",
+            role: "option", "aria-checked": "$bp.checked"},
+            DIV({"class": "breakpointBlockHead"},
+                INPUT({"class": "breakpointCheckbox", type: "checkbox",
+                    _checked: "$bp.checked", tabindex: "-1", onclick: "$onEnable"}),
+                TAG("$bp.node|getNodeTag", {object: "$bp.node"}),
+                DIV({"class": "breakpointMutationType"}, "$bp|getChangeLabel"),
+                SPAN({"class": "closeButton", onclick: "$onRemove"})
+            ),
+            DIV({"class": "breakpointCode"},
+                TAG("$bp.node|getSourceLine", {object: "$bp.node"})
+            )
+        ),
+
+    getNodeTag: function(node)
+    {
+        var rep = Firebug.getRep(node, Firebug.currentContext);
+        return rep.shortTag ? rep.shortTag : rep.tag;
+    },
+
+    getSourceLine: function(node)
+    {
+        return HTMLReps.getNodeTag(node, false);
+    },
+
+    getChangeLabel: function(bp)
+    {
+        switch (bp.type)
+        {
+        case BP_BREAKONATTRCHANGE:
+            return Locale.$STR("html.label.Break On Attribute Change");
+        case BP_BREAKONCHILDCHANGE:
+            return Locale.$STR("html.label.Break On Child Addition or Removal");
+        case BP_BREAKONREMOVE:
+            return Locale.$STR("html.label.Break On Element Removal");
+        case BP_BREAKONTEXT:
+            return Locale.$STR("html.label.Break On Text Change");
+        }
+
+        return "";
+    },
+
+    isDisabled: function(bp)
+    {
+        return !bp.checked;
+    },
+
+    onRemove: function(event)
+    {
+        Events.cancelEvent(event);
+
+        var bpPanel = Firebug.getElementPanel(event.target);
+        var context = bpPanel.context;
+
+        if (Css.hasClass(event.target, "closeButton"))
+        {
+            // Remove from list of breakpoints.
+            var row = Dom.getAncestorByClass(event.target, "breakpointRow");
+            context.mutationBreakpoints.removeBreakpoint(row.repObject);
+
+            bpPanel.refresh();
+        }
+    },
+
+    onEnable: function(event)
+    {
+        var checkBox = event.target;
+        var bpRow = Dom.getAncestorByClass(checkBox, "breakpointRow");
+
+        if (checkBox.checked)
+        {
+            Css.removeClass(bpRow, "disabled");
+            bpRow.setAttribute("aria-checked", "true");
+        }
+        else
+        {
+            Css.setClass(bpRow, "disabled");
+            bpRow.setAttribute("aria-checked", "false");
+        }
+
+        var bp = bpRow.repObject;
+        bp.checked = checkBox.checked;
+
+        var bpPanel = Firebug.getElementPanel(event.target);
+        var context = bpPanel.context;
+
+        context.mutationBreakpoints.updateListeners();
+    },
+
+    supportsObject: function(object, type)
+    {
+        return object instanceof HTMLModule.Breakpoint;
+    }
+});
+
+// ********************************************************************************************* //
+
+function MutationBreakpointGroup(context)
+{
+    this.breakpoints = [];
+    this.context = context;
+}
+
+MutationBreakpointGroup.prototype = Obj.extend(new Firebug.Breakpoint.BreakpointGroup(),
+{
+    name: "mutationBreakpoints",
+    title: Locale.$STR("html.label.HTML Breakpoints"),
+
+    addBreakpoint: function(node, type)
+    {
+        this.breakpoints.push(new HTMLModule.Breakpoint(node, type));
+        this.updateListeners();
+    },
+
+    matchBreakpoint: function(bp, args)
+    {
+        var node = args[0];
+        var type = args[1];
+        return (bp.node == node) && (!bp.type || bp.type == type);
+    },
+
+    removeBreakpoint: function(bp)
+    {
+        Arr.remove(this.breakpoints, bp);
+        this.updateListeners();
+    },
+
+    hasEnabledBreakpoints: function()
+    {
+        return this.breakpoints.some(function(bp)
+        {
+            return bp.checked;
+        });
+    },
+
+    updateListeners: function()
+    {
+        var htmlPanel = this.context.getPanel("html");
+        htmlPanel.updateMutationBreakpointListeners();
+    },
+
+    // Persistence
+    load: function(context)
+    {
+        var panelState = Persist.getPersistedState(context, "html");
+        if (panelState.breakpoints)
+            this.breakpoints = panelState.breakpoints;
+
+        this.enumerateBreakpoints(function(bp)
+        {
+            var elts = Xpath.getElementsByXPath(context.window.document, bp.xpath);
+            bp.node = elts && elts.length ? elts[0] : null;
+        });
+
+        this.updateListeners();
+    },
+
+    store: function(context)
+    {
+        this.enumerateBreakpoints(function(bp)
+        {
+            bp.node = null;
+        });
+
+        var panelState = Persist.getPersistedState(context, "html");
+        panelState.breakpoints = this.breakpoints;
+    },
+});
+
+function isAncestorIgnored(node)
+{
+    for (var parent = node; parent; parent = parent.parentNode)
+    {
+        if (Firebug.shouldIgnore(parent))
+            return true;
+    }
+
+    return false;
+}
+
+// ********************************************************************************************* //
+// Registration
+
+// Backwards compatibility
+HTMLModule.SourceText = HTMLReps.SourceText;
+Firebug.HTMLModule = HTMLModule;
+
+Firebug.registerModule(HTMLModule);
+Firebug.registerRep(HTMLModule.BreakpointRep);
+
+return HTMLModule;
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/html/htmlPanel.js b/content/firebug/html/htmlPanel.js
index 6902170..bb8144a 100644
--- a/content/firebug/html/htmlPanel.js
+++ b/content/firebug/html/htmlPanel.js
@@ -1,19 +1,23 @@
 /* See license.txt for terms of usage */
+/*global define:1*/
 
 define([
-    "firebug/lib/object",
     "firebug/firebug",
+    "firebug/lib/trace",
+    "firebug/chrome/panel",
+    "firebug/lib/object",
     "firebug/lib/domplate",
-    "firebug/chrome/reps",
     "firebug/lib/locale",
+    "firebug/html/attributeEditor",
     "firebug/html/htmlLib",
+    "firebug/html/htmlModule",
+    "firebug/html/htmlReps",
     "firebug/lib/events",
     "firebug/js/sourceLink",
     "firebug/lib/css",
     "firebug/lib/dom",
     "firebug/chrome/window",
     "firebug/lib/options",
-    "firebug/lib/xpath",
     "firebug/lib/string",
     "firebug/lib/xml",
     "firebug/lib/array",
@@ -22,88 +26,31 @@ define([
     "firebug/lib/url",
     "firebug/css/cssModule",
     "firebug/css/cssReps",
-    "firebug/js/breakpoint",
+    "firebug/css/selectorEditor",
+    "firebug/editor/baseEditor",
     "firebug/editor/editor",
+    "firebug/editor/inlineEditor",
     "firebug/chrome/searchBox",
     "firebug/html/insideOutBox",
     "firebug/html/inspector",
     "firebug/html/layout"
 ],
-function(Obj, Firebug, Domplate, FirebugReps, Locale, HTMLLib, Events,
-    SourceLink, Css, Dom, Win, Options, Xpath, Str, Xml, Arr, Persist, Menu,
-    Url, CSSModule, CSSInfoTip) {
-
-with (Domplate) {
+function(Firebug, FBTrace, Panel, Obj, Domplate, Locale, AttributeEditor, HTMLLib, HTMLModule,
+    HTMLReps, Events, SourceLink, Css, Dom, Win, Options, Str, Xml, Arr, Persist, Menu, Url,
+    CSSModule, CSSInfoTip, CSSSelectorEditor, BaseEditor, Editor, InlineEditor) {
 
 // ********************************************************************************************* //
 // Constants
 
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-
-const BP_BREAKONATTRCHANGE = 1;
-const BP_BREAKONCHILDCHANGE = 2;
-const BP_BREAKONREMOVE = 3;
-const BP_BREAKONTEXT = 4;
+var {domplate, DIV, TEXTAREA} = Domplate;
 
 var KeyEvent = window.KeyEvent;
 
 // ********************************************************************************************* //
 
-Firebug.HTMLModule = Obj.extend(Firebug.Module,
-{
-    dispatchName: "htmlModule",
-
-    initialize: function(prefDomain, prefNames)
-    {
-        Firebug.Module.initialize.apply(this, arguments);
-        Firebug.connection.addListener(this.DebuggerListener);
-    },
-
-    shutdown: function()
-    {
-        Firebug.Module.shutdown.apply(this, arguments);
-        Firebug.connection.removeListener(this.DebuggerListener);
-    },
-
-    initContext: function(context, persistedState)
-    {
-        Firebug.Module.initContext.apply(this, arguments);
-        context.mutationBreakpoints = new MutationBreakpointGroup(context);
-    },
-
-    loadedContext: function(context, persistedState)
-    {
-        context.mutationBreakpoints.load(context);
-    },
-
-    destroyContext: function(context, persistedState)
-    {
-        Firebug.Module.destroyContext.apply(this, arguments);
-
-        context.mutationBreakpoints.store(context);
-    },
-
-    deleteNode: function(node, context)
-    {
-        Events.dispatch(this.fbListeners, "onBeginFirebugChange", [node, context]);
-        node.parentNode.removeChild(node);
-        Events.dispatch(this.fbListeners, "onEndFirebugChange", [node, context]);
-    },
-
-    deleteAttribute: function(node, attr, context)
-    {
-        Events.dispatch(this.fbListeners, "onBeginFirebugChange", [node, context]);
-        node.removeAttribute(attr);
-        Events.dispatch(this.fbListeners, "onEndFirebugChange", [node, context]);
-    }
-});
-
-// ********************************************************************************************* //
-
 Firebug.HTMLPanel = function() {};
 
-var WalkingPanel = Obj.extend(Firebug.Panel, HTMLLib.ElementWalkerFunctions);
+var WalkingPanel = Obj.extend(Panel, HTMLLib.ElementWalkerFunctions);
 
 Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
 {
@@ -119,7 +66,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
 
     stopEditing: function()
     {
-        Firebug.Editor.stopEditing();
+        Editor.stopEditing();
     },
 
     isEditing: function()
@@ -244,7 +191,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
         {
             var labelBox = objectNodeBox.querySelector("*> .nodeLabel > .nodeLabelBox");
             var bracketBox = labelBox.querySelector("*> .nodeBracket");
-            Firebug.Editor.insertRow(bracketBox, "before");
+            Editor.insertRow(bracketBox, "before");
         }
     },
 
@@ -258,14 +205,14 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
             {
                 var attrValueBox = attrBox.childNodes[3];
                 var value = elt.getAttribute(attrName);
-                Firebug.Editor.startEditing(attrValueBox, value);
+                Editor.startEditing(attrValueBox, value);
             }
         }
     },
 
     deleteAttribute: function(elt, attrName)
     {
-        Firebug.HTMLModule.deleteAttribute(elt, attrName, this.context);
+        HTMLModule.deleteAttribute(elt, attrName, this.context);
     },
 
     localEditors:{}, // instantiated editor cache
@@ -280,9 +227,9 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
             {
                 // look for special purpose editor (inserted by an extension),
                 // otherwise use our html editor
-                var specializedEditor = Firebug.HTMLPanel.Editors[type] ||
-                    Firebug.HTMLPanel.Editors["html"];
-                editor = this.localEditors[type] = new specializedEditor(this.document);
+                var SpecializedEditor = Firebug.HTMLPanel.Editors[type] ||
+                    Firebug.HTMLPanel.Editors.html;
+                editor = this.localEditors[type] = new SpecializedEditor(this.document);
             }
 
             this.startEditingNode(node, objectNodeBox, editor, type);
@@ -291,21 +238,16 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
 
     startEditingNode: function(node, box, editor, type)
     {
-        switch (type)
-        {
-            case "html":
-            case "xhtml":
-                this.startEditingHTMLNode(node, box, editor);
-                break;
-            default:
-                this.startEditingXMLNode(node, box, editor);
-        }
+        if (type === "html" || type === "xhtml")
+            this.startEditingHTMLNode(node, box, editor);
+        else
+            this.startEditingXMLNode(node, box, editor);
     },
 
     startEditingXMLNode: function(node, box, editor)
     {
         var xml = Xml.getElementXML(node);
-        Firebug.Editor.startEditing(box, xml, editor);
+        Editor.startEditing(box, xml, editor);
     },
 
     startEditingHTMLNode: function(node, box, editor)
@@ -317,7 +259,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
 
         var html = editor.innerEditMode ? node.innerHTML : Xml.getElementHTML(node);
         html = Str.escapeForHtmlEditor(html);
-        Firebug.Editor.startEditing(box, html, editor);
+        Editor.startEditing(box, html, editor);
     },
 
     deleteNode: function(node, dir)
@@ -341,7 +283,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
                 this.selectPrevious();
         }
 
-        Firebug.HTMLModule.deleteNode(node, this.context);
+        HTMLModule.deleteNode(node, this.context);
 
         Firebug.Inspector.highlightObject(this.selection, this.context);
     },
@@ -401,7 +343,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
             lines = Str.splitLines(text);
         }
 
-        var sourceElt = new Firebug.HTMLModule.SourceText(lines, node);
+        var sourceElt = new HTMLReps.SourceText(lines, node);
 
         if (!this.sourceElements)
         {
@@ -448,7 +390,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
             observer.observe(doc, {
                 attributes: true,
                 childList: true,
-                characterData: true, 
+                characterData: true,
                 subtree: true
             });
             context.registeredHTMLMutationObservers.set(doc, observer);
@@ -619,11 +561,19 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
             }
             else
             {
-                var attr = target.getAttributeNode(attrName);
+                var filterAttributeByName = function(attr)
+                {
+                    return attr.name == attrName;
+                };
+
+                var attributes = Array.prototype.slice.call(target.attributes);
+                var attr = attributes.filter(filterAttributeByName)[0];
 
                 if (FBTrace.DBG_HTML)
-                    FBTrace.sysout("mutateAttr getAttributeNode " + removal + " " + attrName +
+                {
+                    FBTrace.sysout("mutateAttr attribute node " + removal + " " + attrName +
                         "=" + attrValue + " node: " + attr, attr);
+                }
 
                 if (attr)
                 {
@@ -769,7 +719,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
         if (!Firebug.showTextNodesWithWhitespace && this.isWhitespaceText(target))
             return;
 
-        var newParentTag = getNodeTag(parent);
+        var newParentTag = HTMLReps.getNodeTag(parent);
         var oldParentTag = getNodeBoxTag(parentNodeBox);
 
         var objectBox = null;
@@ -909,14 +859,14 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
                 ", isRoot:" + (isRoot? "true" : "false")+")");
         }
 
-        var tag = getNodeTag(object);
+        var tag = HTMLReps.getNodeTag(object);
         if (tag)
             return tag.replace({object: object}, this.document);
     },
 
     getParentObject: function(node)
     {
-        if (node instanceof Firebug.HTMLModule.SourceText)
+        if (node instanceof HTMLReps.SourceText)
             return node.owner;
 
         var parentNode = this.getParentNode(node);
@@ -1190,7 +1140,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
         if (Firebug.shouldIgnore(target))
             return;
 
-        Firebug.HTMLModule.MutationBreakpoints.onMutateAttr(event, this.context);
+        HTMLModule.MutationBreakpoints.onMutateAttr(event, this.context);
         this.updateMutationBreakpointListeners();
     },
 
@@ -1199,7 +1149,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
         if (FBTrace.DBG_HTML)
             FBTrace.sysout("html.onMutateText; ", event);
 
-        Firebug.HTMLModule.MutationBreakpoints.onMutateText(event, this.context);
+        HTMLModule.MutationBreakpoints.onMutateText(event, this.context);
         this.updateMutationBreakpointListeners();
     },
 
@@ -1209,7 +1159,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
         if (Firebug.shouldIgnore(target))
             return;
 
-        Firebug.HTMLModule.MutationBreakpoints.onMutateNode(event, this.context);
+        HTMLModule.MutationBreakpoints.onMutateNode(event, this.context);
         this.updateMutationBreakpointListeners();
     },
 
@@ -1217,19 +1167,25 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
     {
         if (Events.isLeftClick(event) && Events.isDoubleClick(event))
         {
-            // The double-click (detail == 2) expands an HTML element, but the user must click
+            // The double-click expands an HTML element, but the user must click
             // on the element itself not on the twisty.
-            // The logic should be as follow:
+            // The logic should be as follows:
             // - click on the twisty expands/collapses the element
             // - double click on the element name expands/collapses it
             // - click on the element name selects it
             if (!Css.hasClass(event.target, "twisty") && !Css.hasClass(event.target, "nodeLabel"))
                 this.toggleNode(event);
         }
-        else if (Events.isAltClick(event) && Events.isDoubleClick(event) && !this.editing)
+        else if (Events.isAltClick(event) && !this.editing)
         {
             var node = Firebug.getRepObject(event.target);
             this.editNode(node);
+            this.setEditEnableState();
+        }
+        else if (Dom.getAncestorByClass(event.target, "nodeBracket"))
+        {
+            var bracketBox = Dom.getAncestorByClass(event.target, "nodeBracket");
+            Editor.insertRow(bracketBox, "before");
         }
     },
 
@@ -1277,6 +1233,10 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
         if (ch == "*")
             this.toggleAll(event, node);
 
+        // Edit the HTML on Ctrl/Meta+E
+        if (Events.isControl(event) && ch === "e")
+            this.editNode(node);
+
         if (!Events.noKeyModifiers(event))
           return;
 
@@ -1382,6 +1342,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
 
     name: "html",
     searchable: true,
+    searchPlaceholder: "search.html.Search_by_text_or_CSS_selector",
     breakable: true,
     dependents: ["css", "computed", "layout", "dom", "domSide", "watch"],
     inspectorHistory: new Array(5),
@@ -1398,15 +1359,15 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
         this.onMouseDown = this.onMouseDown.bind(this);
         this.onKeyPress = this.onKeyPress.bind(this);
 
-        Firebug.Panel.initialize.apply(this, arguments);
-        Firebug.CSSModule.addListener(this);
+        Panel.initialize.apply(this, arguments);
+        CSSModule.addListener(this);
     },
 
     destroy: function(state)
     {
         Persist.persistObjects(this, state);
 
-        Firebug.Panel.destroy.apply(this, arguments);
+        Panel.destroy.apply(this, arguments);
 
         delete this.embeddedBrowserParents;
         delete this.embeddedBrowserDocument;
@@ -1418,7 +1379,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
             delete this.inspectorHistory[i];
         delete this.inspectorHistory;
 
-        Firebug.CSSModule.removeListener(this);
+        CSSModule.removeListener(this);
         this.unregisterMutationListeners();
     },
 
@@ -1430,7 +1391,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
         Events.addEventListener(this.panelNode, "click", this.onClick, false);
         Events.addEventListener(this.panelNode, "mousedown", this.onMouseDown, false);
 
-        Firebug.Panel.initializeNode.apply(this, arguments);
+        Panel.initializeNode.apply(this, arguments);
     },
 
     destroyNode: function()
@@ -1447,7 +1408,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
             delete this.ioBox;
         }
 
-        Firebug.Panel.destroyNode.apply(this, arguments);
+        Panel.destroyNode.apply(this, arguments);
     },
 
     show: function(state)
@@ -1711,7 +1672,29 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
             this.search(text, reverse);
         }
 
-        return !search.noMatch && (loopAround ?  "wraparound" : true);
+        return !search.noMatch && (loopAround ? "wraparound" : true);
+    },
+
+    shouldIgnoreIntermediateSearchFailure: function(value)
+    {
+        // Ignore failures for values that, according to the auto-completion system,
+        // can be extended into valid selectors, or that are obviously incomplete
+        // selectors.
+        var editor = new CSSSelectorEditor();
+        var range = editor.getAutoCompleteRange(value, value.length);
+        var preExpr = value.slice(0, range.start);
+        var expr = value.slice(range.start);
+
+        if (preExpr.lastIndexOf("[") > preExpr.lastIndexOf("]"))
+            return true;
+        if (preExpr.lastIndexOf("(") > preExpr.lastIndexOf(")"))
+            return true;
+
+        var list = editor.getAutoCompleteList(preExpr, expr, "", range, false, this.context, {});
+        return list && list.some(function(x)
+        {
+            return x.startsWith(expr);
+        });
     },
 
     getSearchOptionsMenuItems: function()
@@ -1864,7 +1847,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
             {
                 var type;
 
-                if (Xml.isElementHTML(node) || Xml.isElementXHTML(node))
+                if (Xml.isElementHTMLOrXHTML(node))
                     type = "HTML";
                 else if (Xml.isElementMathML(node))
                     type = "MathML";
@@ -1880,15 +1863,13 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
                     label: Locale.$STRF("html.Edit_Node", [type]),
                     tooltiptext: Locale.$STRF("html.tip.Edit_Node", [type]),
                     nol10n: true,
+                    acceltext: (Locale.getFormattedKey(window, "accel", "E")),
                     command: Obj.bindFixed(this.editNode, this, node)
                 },
                 {
                     label: "DeleteElement",
                     tooltiptext: "html.Delete_Element",
-
-                    // xxxsz: 'Del' needs to be translated, but therefore customizeShortcuts
-                    // must be turned into a module
-                    acceltext: "Del",
+                    acceltext: Locale.getFormattedKey(window, null, null, "VK_DELETE"),
                     command: Obj.bindFixed(this.deleteNode, this, node),
                     disabled:(node.localName in Css.innerEditableTags)
                 });
@@ -1903,7 +1884,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
                     {
                         label: "html.label.Expand/Contract_All",
                         tooltiptext: "html.tip.Expand/Contract_All",
-                        acceltext: "*",
+                        acceltext: Locale.getFormattedKey(window, null, "*"),
                         command: Obj.bind(this.toggleAll, this, node)
                     }
                 );
@@ -1928,8 +1909,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
             );
         }
 
-        Firebug.HTMLModule.MutationBreakpoints.getContextMenuItems(
-            this.context, node, target, items);
+        HTMLModule.MutationBreakpoints.getContextMenuItems(this.context, node, target, items);
 
         return items;
     },
@@ -2008,7 +1988,7 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
 
     breakOnNext: function(breaking)
     {
-        Firebug.HTMLModule.MutationBreakpoints.breakOnNext(this.context, breaking);
+        HTMLModule.MutationBreakpoints.breakOnNext(this.context, breaking);
         this.updateMutationBreakpointListeners();
     },
 
@@ -2026,254 +2006,6 @@ Firebug.HTMLPanel.prototype = Obj.extend(WalkingPanel,
 
 // ********************************************************************************************* //
 
-var AttrTag = Firebug.HTMLPanel.AttrTag =
-    SPAN({"class": "nodeAttr editGroup"},
-        " ", SPAN({"class": "nodeName editable"}, "$attr.name"), "="",
-        SPAN({"class": "nodeValue editable"}, "$attr|getAttrValue"), """
-    );
-
-var TextTag = Firebug.HTMLPanel.TextTag =
-    SPAN({"class": "nodeText editable"},
-        FOR("char", "$object|getNodeTextGroups",
-            SPAN({"class": "$char.class $char.extra"}, "$char.str")
-        )
-    );
-
-// ********************************************************************************************* //
-
-Firebug.HTMLPanel.CompleteElement = domplate(FirebugReps.Element,
-{
-    tag:
-        DIV({"class": "nodeBox open $object|getHidden", _repObject: "$object", role : 'presentation'},
-            DIV({"class": "nodeLabel", role: "presentation"},
-                SPAN({"class": "nodeLabelBox repTarget", role : 'treeitem', 'aria-expanded' : 'false'},
-                    "<",
-                    SPAN({"class": "nodeTag"}, "$object|getNodeName"),
-                    FOR("attr", "$object|attrIterator", AttrTag),
-                    SPAN({"class": "nodeBracket"}, ">")
-                )
-            ),
-            DIV({"class": "nodeChildBox", role :"group"},
-                FOR("child", "$object|childIterator",
-                    TAG("$child|getNodeTag", {object: "$child"})
-                )
-            ),
-            DIV({"class": "nodeCloseLabel", role:"presentation"},
-                "</",
-                SPAN({"class": "nodeTag"}, "$object|getNodeName"),
-                ">"
-             )
-        ),
-
-    getNodeTag: function(node)
-    {
-        return getNodeTag(node, true);
-    },
-
-    childIterator: function(node)
-    {
-        if (node.contentDocument)
-            return [node.contentDocument.documentElement];
-
-        if (Firebug.showTextNodesWithWhitespace)
-        {
-            return Arr.cloneArray(node.childNodes);
-        }
-        else
-        {
-            var nodes = [];
-            var walker = new HTMLLib.ElementWalker();
-
-            for (var child = walker.getFirstChild(node); child; child = walker.getNextSibling(child))
-            {
-                if (child.nodeType != Node.TEXT_NODE || !HTMLLib.isWhitespaceText(child))
-                    nodes.push(child);
-            }
-
-            return nodes;
-        }
-    }
-});
-
-Firebug.HTMLPanel.SoloElement = domplate(Firebug.HTMLPanel.CompleteElement,
-{
-    tag:
-        DIV({"class": "soloElement", onmousedown: "$onMouseDown"},
-            Firebug.HTMLPanel.CompleteElement.tag
-        ),
-
-    onMouseDown: function(event)
-    {
-        for (var child = event.target; child; child = child.parentNode)
-        {
-            if (child.repObject)
-            {
-                var panel = Firebug.getElementPanel(child);
-                Firebug.chrome.select(child.repObject);
-                break;
-            }
-        }
-    }
-});
-
-Firebug.HTMLPanel.Element = domplate(FirebugReps.Element,
-{
-    tag:
-    DIV({"class": "nodeBox containerNodeBox $object|getHidden", _repObject: "$object",
-            role: "presentation"},
-        DIV({"class": "nodeLabel", role: "presentation"},
-            DIV({"class": "twisty", role: "presentation"}),
-            SPAN({"class": "nodeLabelBox repTarget", role: "treeitem", "aria-expanded": "false"},
-                "<",
-                SPAN({"class": "nodeTag"}, "$object|getNodeName"),
-                FOR("attr", "$object|attrIterator", AttrTag),
-                SPAN({"class": "nodeBracket editable insertBefore"}, ">")
-            )
-        ),
-        DIV({"class": "nodeChildBox", role: "group"}), /* nodeChildBox is special signal in insideOutBox */
-        DIV({"class": "nodeCloseLabel", role: "presentation"},
-            SPAN({"class": "nodeCloseLabelBox repTarget"},
-                "</",
-                SPAN({"class": "nodeTag"}, "$object|getNodeName"),
-                ">"
-            )
-        )
-    )
-});
-
-Firebug.HTMLPanel.HTMLDocument = domplate(FirebugReps.Element,
-{
-    tag:
-        DIV({"class": "nodeBox documentNodeBox containerNodeBox",
-            _repObject: "$object", role: "presentation"},
-            DIV({"class": "nodeChildBox", role: "group"})
-        )
-});
-
-Firebug.HTMLPanel.HTMLDocType = domplate(FirebugReps.Element,
-{
-    tag:
-        DIV({"class": "nodeBox docTypeNodeBox containerNodeBox",
-            _repObject: "$object", role: "presentation"},
-            DIV({"class": "docType"},
-                "$object|getDocType"
-            )
-        ),
-
-    getDocType: function(doctype)
-    {
-        return '<!DOCTYPE ' + doctype.name + (doctype.publicId ? ' PUBLIC "' + doctype.publicId +
-            '"': '') + (doctype.systemId ? ' "' + doctype.systemId + '"' : '') + '>';
-    }
-});
-
-Firebug.HTMLPanel.HTMLHtmlElement = domplate(FirebugReps.Element,
-{
-    tag:
-        DIV({"class": "nodeBox htmlNodeBox containerNodeBox $object|getHidden",
-            _repObject: "$object", role: "presentation"},
-            DIV({"class": "nodeLabel", role: "presentation"},
-                DIV({"class": "twisty", role: "presentation"}),
-                SPAN({"class": "nodeLabelBox repTarget", role: "treeitem",
-                    "aria-expanded": "false"},
-                    "<",
-                    SPAN({"class": "nodeTag"}, "$object|getNodeName"),
-                    FOR("attr", "$object|attrIterator", AttrTag),
-                    SPAN({"class": "nodeBracket editable insertBefore"}, ">")
-                )
-            ),
-            DIV({"class": "nodeChildBox", role: "group"}), /* nodeChildBox is special signal in insideOutBox */
-            DIV({"class": "nodeCloseLabel", role: "presentation"},
-                SPAN({"class": "nodeCloseLabelBox repTarget"},
-                    "</",
-                    SPAN({"class": "nodeTag"}, "$object|getNodeName"),
-                    ">"
-                )
-            )
-        )
-});
-
-Firebug.HTMLPanel.TextElement = domplate(FirebugReps.Element,
-{
-    tag:
-        DIV({"class": "nodeBox textNodeBox $object|getHidden", _repObject: "$object", role : 'presentation'},
-            DIV({"class": "nodeLabel", role: "presentation"},
-                SPAN({"class": "nodeLabelBox repTarget", role : 'treeitem'},
-                    "<",
-                    SPAN({"class": "nodeTag"}, "$object|getNodeName"),
-                    FOR("attr", "$object|attrIterator", AttrTag),
-                    SPAN({"class": "nodeBracket editable insertBefore"}, ">"),
-                    TextTag,
-                    "</",
-                    SPAN({"class": "nodeTag"}, "$object|getNodeName"),
-                    ">"
-                )
-            )
-        )
-});
-
-Firebug.HTMLPanel.EmptyElement = domplate(FirebugReps.Element,
-{
-    tag:
-        DIV({"class": "nodeBox emptyNodeBox $object|getHidden", _repObject: "$object", role : 'presentation'},
-            DIV({"class": "nodeLabel", role: "presentation"},
-                SPAN({"class": "nodeLabelBox repTarget", role : 'treeitem'},
-                    "<",
-                    SPAN({"class": "nodeTag"}, "$object|getNodeName"),
-                    FOR("attr", "$object|attrIterator", AttrTag),
-                    SPAN({"class": "nodeBracket editable insertBefore"}, ">")
-                )
-            )
-        )
-});
-
-Firebug.HTMLPanel.XEmptyElement = domplate(FirebugReps.Element,
-{
-    tag:
-        DIV({"class": "nodeBox emptyNodeBox $object|getHidden", _repObject: "$object", role : 'presentation'},
-            DIV({"class": "nodeLabel", role: "presentation"},
-                SPAN({"class": "nodeLabelBox repTarget", role : 'treeitem'},
-                    "<",
-                    SPAN({"class": "nodeTag"}, "$object|getNodeName"),
-                    FOR("attr", "$object|attrIterator", AttrTag),
-                    SPAN({"class": "nodeBracket editable insertBefore"}, "/>")
-                )
-            )
-        )
-});
-
-Firebug.HTMLPanel.AttrNode = domplate(FirebugReps.Element,
-{
-    tag: AttrTag
-});
-
-Firebug.HTMLPanel.TextNode = domplate(FirebugReps.Element,
-{
-    tag:
-        DIV({"class": "nodeBox", _repObject: "$object", role : 'presentation'},
-            TextTag
-        )
-});
-
-Firebug.HTMLPanel.CDATANode = domplate(FirebugReps.Element,
-{
-    tag:
-        DIV({"class": "nodeBox", _repObject: "$object", role : 'presentation'},
-            "<![CDATA[",
-            SPAN({"class": "nodeText nodeCDATA editable"}, "$object.nodeValue"),
-            "]]>"
-        )
-});
-
-Firebug.HTMLPanel.CommentNode = domplate(FirebugReps.Element,
-{
-    tag:
-        DIV({"class": "nodeBox nodeComment", _repObject: "$object", role : 'presentation'},
-            "<!--",
-            SPAN({"class": "nodeComment editable"}, "$object.nodeValue"),
-            "-->"
-        )
-});
 
 // ********************************************************************************************* //
 // TextDataEditor
@@ -2286,7 +2018,7 @@ function TextDataEditor(doc)
     this.initializeInline(doc);
 }
 
-TextDataEditor.prototype = domplate(Firebug.InlineEditor.prototype,
+TextDataEditor.prototype = domplate(InlineEditor.prototype,
 {
     saveEdit: function(target, value, previousValue)
     {
@@ -2315,7 +2047,7 @@ function TextNodeEditor(doc)
     this.initializeInline(doc);
 }
 
-TextNodeEditor.prototype = domplate(Firebug.InlineEditor.prototype,
+TextNodeEditor.prototype = domplate(InlineEditor.prototype,
 {
     getInitialValue: function(target, value)
     {
@@ -2390,133 +2122,6 @@ TextNodeEditor.prototype = domplate(Firebug.InlineEditor.prototype,
 });
 
 // ********************************************************************************************* //
-// AttributeEditor
-
-function AttributeEditor(doc)
-{
-    this.initializeInline(doc);
-}
-
-AttributeEditor.prototype = domplate(Firebug.InlineEditor.prototype,
-{
-    saveEdit: function(target, value, previousValue)
-    {
-        var element = Firebug.getRepObject(target);
-        if (!element)
-            return;
-
-        if (Css.hasClass(target, "nodeName"))
-        {
-            // For HTML elements, make the attribute name into lower case to match
-            // what it gets normalized to by the browser - otherwise we will be
-            // fooled into thinking that an extra attribute has appeared (issue 6996).
-            if (Xml.isElementHTML(element))
-                value = value.toLowerCase();
-
-            if (value != previousValue)
-                element.removeAttribute(previousValue);
-
-            if (value)
-            {
-                var attrValue = Dom.getNextByClass(target, "nodeValue").textContent;
-                element.setAttribute(value, attrValue);
-            }
-            else
-            {
-                element.removeAttribute(value);
-            }
-        }
-        else if (Css.hasClass(target, "nodeValue"))
-        {
-            var attrName = Dom.getPreviousByClass(target, "nodeName").textContent;
-            element.setAttribute(attrName, value);
-        }
-
-        target.textContent = value;
-
-        var panel = Firebug.getElementPanel(target);
-        Events.dispatch(Firebug.uiListeners, "onObjectChanged", [element, panel]);
-
-        //this.panel.markChange();
-    },
-
-    advanceToNext: function(target, charCode)
-    {
-        if (charCode == 61 /* '=' */ && Css.hasClass(target, "nodeName"))
-        {
-            return true;
-        }
-        else if ((charCode == 34 /* '"' */ || charCode == 39 /* ''' */) &&
-            Css.hasClass(target, "nodeValue"))
-        {
-            var nonRestrictiveAttributes =
-            [
-                "onabort",
-                "onblur",
-                "onchange",
-                "onclick",
-                "ondblclick",
-                "onerror",
-                "onfocus",
-                "onkeydown",
-                "onkeypress",
-                "onkeyup",
-                "onload",
-                "onmousedown",
-                "onmousemove",
-                "onmouseout",
-                "onmouseover",
-                "onmouseup",
-                "onreset",
-                "onselect",
-                "onsubmit",
-                "onunload",
-                "title",
-                "alt",
-                "style"
-            ];
-
-            var attrName = Dom.getPreviousByClass(target, "nodeName").textContent;
-
-            // This should cover most of the cases where quotes are allowed inside the value
-            // See issue 4542
-            for (var i = 0; i < nonRestrictiveAttributes.length; i++)
-            {
-                if (attrName == nonRestrictiveAttributes[i])
-                    return false;
-            }
-            return true;
-        }
-    },
-
-    insertNewRow: function(target, insertWhere)
-    {
-        var emptyAttr = {name: "", value: ""};
-        var sibling = insertWhere == "before" ? target.previousSibling : target;
-        return AttrTag.insertAfter({attr: emptyAttr}, sibling);
-    },
-
-    getInitialValue: function(target, value)
-    {
-        if (value == "")
-            return value;
-
-        var element = Firebug.getRepObject(target);
-        if (element && element instanceof window.Element)
-        {
-            // If object that was clicked to edit was
-            // attribute value, not attribute name.
-            if (Css.hasClass(target, "nodeValue"))
-            {
-                var attributeName = Dom.getPreviousByClass(target, "nodeName").textContent;
-                return element.getAttribute(attributeName);
-            }
-        }
-        return value;
-    }
-});
-
-// ********************************************************************************************* //
 // HTMLEditor
 
 function HTMLEditor(doc)
@@ -2528,7 +2133,7 @@ function HTMLEditor(doc)
     this.arrowCompletion = false;
 }
 
-HTMLEditor.prototype = domplate(Firebug.BaseEditor,
+HTMLEditor.prototype = domplate(BaseEditor,
 {
     tag:
         DIV(
@@ -2661,7 +2266,7 @@ HTMLEditor.prototype = domplate(Firebug.BaseEditor,
 
     onInput: function()
     {
-        Firebug.Editor.update();
+        Editor.update();
     }
 });
 
@@ -2669,8 +2274,8 @@ HTMLEditor.prototype = domplate(Firebug.BaseEditor,
 // Editors
 
 Firebug.HTMLPanel.Editors = {
-    html : HTMLEditor,
-    Attribute : AttributeEditor,
+    html: HTMLEditor,
+    Attribute: AttributeEditor,
     TextNode: TextNodeEditor,
     TextData: TextDataEditor
 };
@@ -2678,52 +2283,6 @@ Firebug.HTMLPanel.Editors = {
 // ********************************************************************************************* //
 // Local Helpers
 
-function getEmptyElementTag(node)
-{
-    var isXhtml= Xml.isElementXHTML(node);
-    if (isXhtml)
-        return Firebug.HTMLPanel.XEmptyElement.tag;
-    else
-        return Firebug.HTMLPanel.EmptyElement.tag;
-}
-
-function getNodeTag(node, expandAll)
-{
-    if (node instanceof window.Element)
-    {
-        if (node instanceof window.HTMLHtmlElement && node.ownerDocument && node.ownerDocument.doctype)
-            return Firebug.HTMLPanel.HTMLHtmlElement.tag;
-        else if (node instanceof window.HTMLAppletElement)
-            return getEmptyElementTag(node);
-        else if (Firebug.shouldIgnore(node))
-            return null;
-        else if (HTMLLib.isContainerElement(node))
-            return expandAll ? Firebug.HTMLPanel.CompleteElement.tag : Firebug.HTMLPanel.Element.tag;
-        else if (HTMLLib.isEmptyElement(node))
-            return getEmptyElementTag(node);
-        else if (Firebug.showCommentNodes && HTMLLib.hasCommentChildren(node))
-            return expandAll ? Firebug.HTMLPanel.CompleteElement.tag : Firebug.HTMLPanel.Element.tag;
-        else if (HTMLLib.hasNoElementChildren(node))
-            return Firebug.HTMLPanel.TextElement.tag;
-        else
-            return expandAll ? Firebug.HTMLPanel.CompleteElement.tag : Firebug.HTMLPanel.Element.tag;
-    }
-    else if (node instanceof window.Text)
-        return Firebug.HTMLPanel.TextNode.tag;
-    else if (node instanceof window.CDATASection)
-        return Firebug.HTMLPanel.CDATANode.tag;
-    else if (node instanceof window.Comment && (Firebug.showCommentNodes || expandAll))
-        return Firebug.HTMLPanel.CommentNode.tag;
-    else if (node instanceof Firebug.HTMLModule.SourceText)
-        return FirebugReps.SourceText.tag;
-    else if (node instanceof window.Document)
-        return Firebug.HTMLPanel.HTMLDocument.tag;
-    else if (node instanceof window.DocumentType)
-        return Firebug.HTMLPanel.HTMLDocType.tag;
-    else
-        return FirebugReps.Nada.tag;
-}
-
 function getNodeBoxTag(nodeBox)
 {
     var re = /([^\s]+)NodeBox/;
@@ -2733,439 +2292,27 @@ function getNodeBoxTag(nodeBox)
 
     var nodeBoxType = m[1];
     if (nodeBoxType == "container")
-        return Firebug.HTMLPanel.Element.tag;
+        return HTMLReps.Element.tag;
     else if (nodeBoxType == "text")
-        return Firebug.HTMLPanel.TextElement.tag;
+        return HTMLReps.TextElement.tag;
     else if (nodeBoxType == "empty")
-        return Firebug.HTMLPanel.EmptyElement.tag;
+        return HTMLReps.EmptyElement.tag;
 }
 
 // ********************************************************************************************* //
+// Registration
 
-Firebug.HTMLModule.SourceText = function(lines, owner)
-{
-    this.lines = lines;
-    this.owner = owner;
-};
-
-Firebug.HTMLModule.SourceText.getLineAsHTML = function(lineNo)
-{
-    return Str.escapeForSourceLine(this.lines[lineNo-1]);
-};
-
-// ********************************************************************************************* //
-// Mutation Breakpoints
-
-/**
- * @class Represents {@link Firebug.Debugger} listener. This listener is reponsible for
- * providing a list of mutation-breakpoints into the Breakpoints side-panel.
- */
-Firebug.HTMLModule.DebuggerListener =
-{
-    getBreakpoints: function(context, groups)
-    {
-        if (!context.mutationBreakpoints.isEmpty())
-            groups.push(context.mutationBreakpoints);
-    }
-};
-
-Firebug.HTMLModule.MutationBreakpoints =
-{
-    breakOnNext: function(context, breaking)
-    {
-        context.breakOnNextMutate = breaking;
-    },
-
-    breakOnNextMutate: function(event, context, type)
-    {
-        if (!context.breakOnNextMutate)
-            return false;
-
-        // Ignore changes in ignored branches
-        if (isAncestorIgnored(event.target))
-            return false;
-
-        context.breakOnNextMutate = false;
-
-        this.breakWithCause(event, context, type);
-    },
-
-    breakWithCause: function(event, context, type)
-    {
-        var changeLabel = Firebug.HTMLModule.BreakpointRep.getChangeLabel({type: type});
-        context.breakingCause = {
-            title: Locale.$STR("html.Break On Mutate"),
-            message: changeLabel,
-            type: event.type,
-            target: event.target,
-            relatedNode: event.relatedNode, // http://www.w3.org/TR/DOM-Level-2-Events/events.html
-            prevValue: event.prevValue,
-            newValue: event.newValue,
-            attrName: event.attrName,
-            attrChange: event.attrChange,
-        };
-
-        Firebug.Breakpoint.breakNow(context.getPanel("html", true));
-        return true;
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // Mutation event handlers.
-
-    onMutateAttr: function(event, context)
-    {
-        if (this.breakOnNextMutate(event, context, BP_BREAKONATTRCHANGE))
-            return;
-
-        var breakpoints = context.mutationBreakpoints;
-        var self = this;
-        breakpoints.enumerateBreakpoints(function(bp) {
-            if (bp.checked && bp.node == event.target && bp.type == BP_BREAKONATTRCHANGE) {
-                self.breakWithCause(event, context, BP_BREAKONATTRCHANGE);
-                return true;
-            }
-        });
-    },
-
-    onMutateText: function(event, context)
-    {
-        if (this.breakOnNextMutate(event, context, BP_BREAKONTEXT))
-            return;
-    },
-
-    onMutateNode: function(event, context)
-    {
-        var node = event.target;
-        var removal = event.type == "DOMNodeRemoved";
-
-        if (this.breakOnNextMutate(event, context, removal ?
-            BP_BREAKONREMOVE : BP_BREAKONCHILDCHANGE))
-        {
-            return;
-        }
-
-        var breakpoints = context.mutationBreakpoints;
-        var breaked = false;
-
-        if (removal)
-        {
-            var self = this;
-            breaked = breakpoints.enumerateBreakpoints(function(bp) {
-                if (bp.checked && bp.node == node && bp.type == BP_BREAKONREMOVE) {
-                    self.breakWithCause(event, context, BP_BREAKONREMOVE);
-                    return true;
-                }
-            });
-        }
-
-        if (!breaked)
-        {
-            // Collect all parents of the mutated node.
-            var parents = [];
-            for (var parent = node.parentNode; parent; parent = parent.parentNode)
-                parents.push(parent);
-
-            // Iterate over all parents and see if some of them has a breakpoint.
-            var self = this;
-            breakpoints.enumerateBreakpoints(function(bp)
-            {
-                for (var i=0; i<parents.length; i++)
-                {
-                    if (bp.checked && bp.node == parents[i] && bp.type == BP_BREAKONCHILDCHANGE)
-                    {
-                        self.breakWithCause(event, context, BP_BREAKONCHILDCHANGE);
-                        return true;
-                    }
-                }
-            });
-        }
-
-        if (removal)
-        {
-            // Remove all breakpoints associated with removed node.
-            var invalidate = false;
-            breakpoints.enumerateBreakpoints(function(bp)
-            {
-                if (bp.node == node)
-                {
-                    breakpoints.removeBreakpoint(bp);
-                    invalidate = true;
-                }
-            });
-
-            if (invalidate)
-                context.invalidatePanels("breakpoints");
-        }
-    },
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-    // Context menu items
-
-    getContextMenuItems: function(context, node, target, items)
-    {
-        if (!(node && node.nodeType == Node.ELEMENT_NODE))
-            return;
-
-        var breakpoints = context.mutationBreakpoints;
-
-        var attrBox = Dom.getAncestorByClass(target, "nodeAttr");
-        if (Dom.getAncestorByClass(target, "nodeAttr"))
-        {
-        }
-
-        if (!(Css.nonEditableTags.hasOwnProperty(node.localName)))
-        {
-            items.push(
-                "-",
-                {
-                    label: "html.label.Break_On_Attribute_Change",
-                    tooltiptext: "html.tip.Break_On_Attribute_Change",
-                    type: "checkbox",
-                    checked: breakpoints.findBreakpoint(node, BP_BREAKONATTRCHANGE),
-                    command: Obj.bindFixed(this.onModifyBreakpoint, this, context, node,
-                        BP_BREAKONATTRCHANGE)
-                },
-                {
-                    label: "html.label.Break_On_Child_Addition_or_Removal",
-                    tooltiptext: "html.tip.Break_On_Child_Addition_or_Removal",
-                    type: "checkbox",
-                    checked: breakpoints.findBreakpoint(node, BP_BREAKONCHILDCHANGE),
-                    command: Obj.bindFixed(this.onModifyBreakpoint, this, context, node,
-                        BP_BREAKONCHILDCHANGE)
-                },
-                {
-                    label: "html.label.Break_On_Element_Removal",
-                    tooltiptext: "html.tip.Break_On_Element_Removal",
-                    type: "checkbox",
-                    checked: breakpoints.findBreakpoint(node, BP_BREAKONREMOVE),
-                    command: Obj.bindFixed(this.onModifyBreakpoint, this, context, node,
-                        BP_BREAKONREMOVE)
-                }
-            );
-        }
-    },
-
-    onModifyBreakpoint: function(context, node, type)
-    {
-        var xpath = Xpath.getElementXPath(node);
-        if (FBTrace.DBG_HTML)
-            FBTrace.sysout("html.onModifyBreakpoint " + xpath );
-
-        var breakpoints = context.mutationBreakpoints;
-        var bp = breakpoints.findBreakpoint(node, type);
-
-        // Remove an existing or create new breakpoint.
-        if (bp)
-            breakpoints.removeBreakpoint(bp);
-        else
-            breakpoints.addBreakpoint(node, type);
-
-        Events.dispatch(Firebug.HTMLModule.fbListeners, "onModifyBreakpoint",
-            [context, xpath, type]);
-    }
-};
-
-Firebug.HTMLModule.Breakpoint = function(node, type)
-{
-    this.node = node;
-    this.xpath = Xpath.getElementXPath(node);
-    this.checked = true;
-    this.type = type;
-};
-
-Firebug.HTMLModule.BreakpointRep = domplate(Firebug.Rep,
-{
-    inspectable: false,
-
-    tag:
-        DIV({"class": "breakpointRow focusRow", $disabled: "$bp|isDisabled", _repObject: "$bp",
-            role: "option", "aria-checked": "$bp.checked"},
-            DIV({"class": "breakpointBlockHead"},
-                INPUT({"class": "breakpointCheckbox", type: "checkbox",
-                    _checked: "$bp.checked", tabindex : "-1", onclick: "$onEnable"}),
-                TAG("$bp.node|getNodeTag", {object: "$bp.node"}),
-                DIV({"class": "breakpointMutationType"}, "$bp|getChangeLabel"),
-                SPAN({"class": "closeButton", onclick: "$onRemove"})
-            ),
-            DIV({"class": "breakpointCode"},
-                TAG("$bp.node|getSourceLine", {object: "$bp.node"})
-            )
-        ),
-
-    getNodeTag: function(node)
-    {
-        var rep = Firebug.getRep(node, Firebug.currentContext);
-        return rep.shortTag ? rep.shortTag : rep.tag;
-    },
-
-    getSourceLine: function(node)
-    {
-        return getNodeTag(node, false);
-    },
-
-    getChangeLabel: function(bp)
-    {
-        switch (bp.type)
-        {
-        case BP_BREAKONATTRCHANGE:
-            return Locale.$STR("html.label.Break On Attribute Change");
-        case BP_BREAKONCHILDCHANGE:
-            return Locale.$STR("html.label.Break On Child Addition or Removal");
-        case BP_BREAKONREMOVE:
-            return Locale.$STR("html.label.Break On Element Removal");
-        case BP_BREAKONTEXT:
-            return Locale.$STR("html.label.Break On Text Change");
-        }
-
-        return "";
-    },
-
-    isDisabled: function(bp)
-    {
-        return !bp.checked;
-    },
-
-    onRemove: function(event)
-    {
-        Events.cancelEvent(event);
-
-        var bpPanel = Firebug.getElementPanel(event.target);
-        var context = bpPanel.context;
-
-        if (Css.hasClass(event.target, "closeButton"))
-        {
-            // Remove from list of breakpoints.
-            var row = Dom.getAncestorByClass(event.target, "breakpointRow");
-            context.mutationBreakpoints.removeBreakpoint(row.repObject);
-
-            bpPanel.refresh();
-        }
-    },
-
-    onEnable: function(event)
-    {
-        var checkBox = event.target;
-        var bpRow = Dom.getAncestorByClass(checkBox, "breakpointRow");
-
-        if (checkBox.checked)
-        {
-            Css.removeClass(bpRow, "disabled");
-            bpRow.setAttribute("aria-checked", "true");
-        }
-        else
-        {
-            Css.setClass(bpRow, "disabled");
-            bpRow.setAttribute("aria-checked", "false");
-        }
-
-        var bp = bpRow.repObject;
-        bp.checked = checkBox.checked;
-
-        var bpPanel = Firebug.getElementPanel(event.target);
-        var context = bpPanel.context;
-
-        context.mutationBreakpoints.updateListeners();
-    },
-
-    supportsObject: function(object, type)
-    {
-        return object instanceof Firebug.HTMLModule.Breakpoint;
-    }
-});
-
-// ********************************************************************************************* //
-
-function MutationBreakpointGroup(context)
-{
-    this.breakpoints = [];
-    this.context = context;
-}
-
-MutationBreakpointGroup.prototype = Obj.extend(new Firebug.Breakpoint.BreakpointGroup(),
+// Backwards compatibility
+["AttrTag", "TextTag", "CompleteElement", "SoloElement", "Element", "HTMLDocument",
+"HTMLDocType", "HTMLHtmlElement", "TextElement", "EmptyElement", "XEmptyElement",
+"AttrNode", "TextNode", "CDATANode", "CommentNode"].forEach(function(name)
 {
-    name: "mutationBreakpoints",
-    title: Locale.$STR("html.label.HTML Breakpoints"),
-
-    addBreakpoint: function(node, type)
-    {
-        this.breakpoints.push(new Firebug.HTMLModule.Breakpoint(node, type));
-        this.updateListeners();
-    },
-
-    matchBreakpoint: function(bp, args)
-    {
-        var node = args[0];
-        var type = args[1];
-        return (bp.node == node) && (!bp.type || bp.type == type);
-    },
-
-    removeBreakpoint: function(bp)
-    {
-        Arr.remove(this.breakpoints, bp);
-        this.updateListeners();
-    },
-
-    hasEnabledBreakpoints: function()
-    {
-        return this.breakpoints.some(function(bp)
-        {
-            return bp.checked;
-        });
-    },
-
-    updateListeners: function()
-    {
-        var htmlPanel = this.context.getPanel("html");
-        htmlPanel.updateMutationBreakpointListeners();
-    },
-
-    // Persistence
-    load: function(context)
-    {
-        var panelState = Persist.getPersistedState(context, "html");
-        if (panelState.breakpoints)
-            this.breakpoints = panelState.breakpoints;
-
-        this.enumerateBreakpoints(function(bp)
-        {
-            var elts = Xpath.getElementsByXPath(context.window.document, bp.xpath);
-            bp.node = elts && elts.length ? elts[0] : null;
-        });
-
-        this.updateListeners();
-    },
-
-    store: function(context)
-    {
-        this.enumerateBreakpoints(function(bp)
-        {
-            bp.node = null;
-        });
-
-        var panelState = Persist.getPersistedState(context, "html");
-        panelState.breakpoints = this.breakpoints;
-    },
+    Firebug.HTMLPanel[name] = HTMLReps[name];
 });
 
-function isAncestorIgnored(node)
-{
-    for (var parent = node; parent; parent = parent.parentNode)
-    {
-        if (Firebug.shouldIgnore(parent))
-            return true;
-    }
-
-    return false;
-}
-
-// ********************************************************************************************* //
-// Registration
-
 Firebug.registerPanel(Firebug.HTMLPanel);
-Firebug.registerModule(Firebug.HTMLModule);
-Firebug.registerRep(Firebug.HTMLModule.BreakpointRep);
 
-return Firebug.HTMLModule;
+return HTMLModule;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/html/htmlReps.js b/content/firebug/html/htmlReps.js
new file mode 100644
index 0000000..7cb1f1b
--- /dev/null
+++ b/content/firebug/html/htmlReps.js
@@ -0,0 +1,357 @@
+/* See license.txt for terms of usage */
+/*global define:1*/
+
+define([
+    "firebug/firebug",
+    "firebug/lib/array",
+    "firebug/lib/domplate",
+    "firebug/lib/string",
+    "firebug/lib/xml",
+    "firebug/chrome/reps",
+    "firebug/html/htmlLib",
+],
+function(Firebug, Arr, Domplate, Str, Xml, FirebugReps, HTMLLib) {
+
+"use strict";
+
+// ********************************************************************************************* //
+// Constants
+
+var {domplate, FOR, TAG, DIV, SPAN} = Domplate;
+
+// ********************************************************************************************* //
+
+var AttrTag =
+    SPAN({"class": "nodeAttr editGroup"},
+        " ", SPAN({"class": "nodeName editable"}, "$attr.name"), "="",
+        SPAN({"class": "nodeValue editable", "title": "$attr|getAttrTitle"}, "$attr|getAttrValue"), """
+    );
+
+var TextTag =
+    SPAN({"class": "nodeText editable"},
+        FOR("char", "$object|getNodeTextGroups",
+            SPAN({"class": "$char.class $char.extra"}, "$char.str")
+        )
+    );
+
+// ********************************************************************************************* //
+
+var SourceText = function(lines, owner)
+{
+    this.lines = lines;
+    this.owner = owner;
+};
+
+SourceText.getLineAsHTML = function(lineNo)
+{
+    return Str.escapeForSourceLine(this.lines[lineNo-1]);
+};
+
+// ********************************************************************************************* //
+
+var CompleteElement = domplate(FirebugReps.Element,
+{
+    tag:
+        DIV({"class": "nodeBox open $object|getHidden", _repObject: "$object", role: "presentation"},
+            DIV({"class": "nodeLabel", role: "presentation"},
+                SPAN({"class": "nodeLabelBox repTarget", role: "treeitem", "aria-expanded": "false"},
+                    "<",
+                    SPAN({"class": "nodeTag"}, "$object|getNodeName"),
+                    FOR("attr", "$object|attrIterator", AttrTag),
+                    SPAN({"class": "nodeBracket"}, ">")
+                )
+            ),
+            DIV({"class": "nodeChildBox", role: "group"},
+                FOR("child", "$object|childIterator",
+                    TAG("$child|getNodeTag", {object: "$child"})
+                )
+            ),
+            DIV({"class": "nodeCloseLabel", role:"presentation"},
+                "</",
+                SPAN({"class": "nodeTag"}, "$object|getNodeName"),
+                ">"
+             )
+        ),
+
+    getNodeTag: function(node)
+    {
+        return getNodeTag(node, true);
+    },
+
+    childIterator: function(node)
+    {
+        if (node.contentDocument)
+            return [node.contentDocument.documentElement];
+
+        if (Firebug.showTextNodesWithWhitespace)
+        {
+            return Arr.cloneArray(node.childNodes);
+        }
+        else
+        {
+            var nodes = [];
+            var walker = new HTMLLib.ElementWalker();
+
+            for (var child = walker.getFirstChild(node); child; child = walker.getNextSibling(child))
+            {
+                if (child.nodeType != Node.TEXT_NODE || !HTMLLib.isWhitespaceText(child))
+                    nodes.push(child);
+            }
+
+            return nodes;
+        }
+    }
+});
+
+var SoloElement = domplate(CompleteElement,
+{
+    tag:
+        DIV({"class": "soloElement", onmousedown: "$onMouseDown"},
+            CompleteElement.tag
+        ),
+
+    onMouseDown: function(event)
+    {
+        for (var child = event.target; child; child = child.parentNode)
+        {
+            if (child.repObject)
+            {
+                Firebug.chrome.select(child.repObject);
+                break;
+            }
+        }
+    }
+});
+
+var Element = domplate(FirebugReps.Element,
+{
+    tag:
+    DIV({"class": "nodeBox containerNodeBox $object|getHidden", _repObject: "$object",
+            role: "presentation"},
+        DIV({"class": "nodeLabel", role: "presentation"},
+            DIV({"class": "twisty", role: "presentation"}),
+            SPAN({"class": "nodeLabelBox repTarget", role: "treeitem", "aria-expanded": "false"},
+                "<",
+                SPAN({"class": "nodeTag"}, "$object|getNodeName"),
+                FOR("attr", "$object|attrIterator", AttrTag),
+                SPAN({"class": "nodeBracket editable insertBefore"}, ">")
+            )
+        ),
+        DIV({"class": "nodeChildBox", role: "group"}), /* nodeChildBox is special signal in insideOutBox */
+        DIV({"class": "nodeCloseLabel", role: "presentation"},
+            SPAN({"class": "nodeCloseLabelBox repTarget"},
+                "</",
+                SPAN({"class": "nodeTag"}, "$object|getNodeName"),
+                ">"
+            )
+        )
+    )
+});
+
+var HTMLDocument = domplate(FirebugReps.Element,
+{
+    tag:
+        DIV({"class": "nodeBox documentNodeBox containerNodeBox",
+            _repObject: "$object", role: "presentation"},
+            DIV({"class": "nodeChildBox", role: "group"})
+        )
+});
+
+var HTMLDocType = domplate(FirebugReps.Element,
+{
+    tag:
+        DIV({"class": "nodeBox docTypeNodeBox containerNodeBox",
+            _repObject: "$object", role: "presentation"},
+            DIV({"class": "docType"},
+                "$object|getDocType"
+            )
+        ),
+
+    getDocType: function(doctype)
+    {
+        return "<!DOCTYPE " + doctype.name + (doctype.publicId ? " PUBLIC \"" + doctype.publicId +
+            "\"": "") + (doctype.systemId ? " \"" + doctype.systemId + "\"" : "") + ">";
+    }
+});
+
+var HTMLHtmlElement = domplate(FirebugReps.Element,
+{
+    tag:
+        DIV({"class": "nodeBox htmlNodeBox containerNodeBox $object|getHidden",
+            _repObject: "$object", role: "presentation"},
+            DIV({"class": "nodeLabel", role: "presentation"},
+                DIV({"class": "twisty", role: "presentation"}),
+                SPAN({"class": "nodeLabelBox repTarget", role: "treeitem",
+                    "aria-expanded": "false"},
+                    "<",
+                    SPAN({"class": "nodeTag"}, "$object|getNodeName"),
+                    FOR("attr", "$object|attrIterator", AttrTag),
+                    SPAN({"class": "nodeBracket editable insertBefore"}, ">")
+                )
+            ),
+            DIV({"class": "nodeChildBox", role: "group"}), /* nodeChildBox is special signal in insideOutBox */
+            DIV({"class": "nodeCloseLabel", role: "presentation"},
+                SPAN({"class": "nodeCloseLabelBox repTarget"},
+                    "</",
+                    SPAN({"class": "nodeTag"}, "$object|getNodeName"),
+                    ">"
+                )
+            )
+        )
+});
+
+var TextElement = domplate(FirebugReps.Element,
+{
+    tag:
+        DIV({"class": "nodeBox textNodeBox $object|getHidden", _repObject: "$object", role: "presentation"},
+            DIV({"class": "nodeLabel", role: "presentation"},
+                SPAN({"class": "nodeLabelBox repTarget", role: "treeitem"},
+                    "<",
+                    SPAN({"class": "nodeTag"}, "$object|getNodeName"),
+                    FOR("attr", "$object|attrIterator", AttrTag),
+                    SPAN({"class": "nodeBracket editable insertBefore"}, ">"),
+                    TextTag,
+                    "</",
+                    SPAN({"class": "nodeTag"}, "$object|getNodeName"),
+                    ">"
+                )
+            )
+        )
+});
+
+var EmptyElement = domplate(FirebugReps.Element,
+{
+    tag:
+        DIV({"class": "nodeBox emptyNodeBox $object|getHidden", _repObject: "$object", role: "presentation"},
+            DIV({"class": "nodeLabel", role: "presentation"},
+                SPAN({"class": "nodeLabelBox repTarget", role: "treeitem"},
+                    "<",
+                    SPAN({"class": "nodeTag"}, "$object|getNodeName"),
+                    FOR("attr", "$object|attrIterator", AttrTag),
+                    SPAN({"class": "nodeBracket editable insertBefore"}, ">")
+                )
+            )
+        )
+});
+
+var XEmptyElement = domplate(FirebugReps.Element,
+{
+    tag:
+        DIV({"class": "nodeBox emptyNodeBox $object|getHidden", _repObject: "$object", role: "presentation"},
+            DIV({"class": "nodeLabel", role: "presentation"},
+                SPAN({"class": "nodeLabelBox repTarget", role: "treeitem"},
+                    "<",
+                    SPAN({"class": "nodeTag"}, "$object|getNodeName"),
+                    FOR("attr", "$object|attrIterator", AttrTag),
+                    SPAN({"class": "nodeBracket editable insertBefore"}, "/>")
+                )
+            )
+        )
+});
+
+var AttrNode = domplate(FirebugReps.Element,
+{
+    tag: AttrTag
+});
+
+var TextNode = domplate(FirebugReps.Element,
+{
+    tag:
+        DIV({"class": "nodeBox", _repObject: "$object", role: "presentation"},
+            TextTag
+        )
+});
+
+var CDATANode = domplate(FirebugReps.Element,
+{
+    tag:
+        DIV({"class": "nodeBox", _repObject: "$object", role: "presentation"},
+            "<![CDATA[",
+            SPAN({"class": "nodeText nodeCDATA editable"}, "$object.nodeValue"),
+            "]]>"
+        )
+});
+
+var CommentNode = domplate(FirebugReps.Element,
+{
+    tag:
+        DIV({"class": "nodeBox nodeComment", _repObject: "$object", role: "presentation"},
+            "<!--",
+            SPAN({"class": "nodeComment editable"}, "$object.nodeValue"),
+            "-->"
+        )
+});
+
+// ********************************************************************************************* //
+
+function getEmptyElementTag(node)
+{
+    var isXhtml = Xml.isElementXHTML(node);
+    if (isXhtml)
+        return XEmptyElement.tag;
+    else
+        return EmptyElement.tag;
+}
+
+function getNodeTag(node, expandAll)
+{
+    if (node instanceof window.Element)
+    {
+        if (node instanceof window.HTMLHtmlElement && node.ownerDocument && node.ownerDocument.doctype)
+            return HTMLHtmlElement.tag;
+        else if (node instanceof window.HTMLAppletElement)
+            return getEmptyElementTag(node);
+        else if (Firebug.shouldIgnore(node))
+            return null;
+        else if (HTMLLib.isContainerElement(node))
+            return expandAll ? CompleteElement.tag : Element.tag;
+        else if (HTMLLib.isEmptyElement(node))
+            return getEmptyElementTag(node);
+        else if (Firebug.showCommentNodes && HTMLLib.hasCommentChildren(node))
+            return expandAll ? CompleteElement.tag : Element.tag;
+        else if (HTMLLib.hasNoElementChildren(node))
+            return TextElement.tag;
+        else
+            return expandAll ? CompleteElement.tag : Element.tag;
+    }
+    else if (node instanceof window.Text)
+        return TextNode.tag;
+    else if (node instanceof window.CDATASection)
+        return CDATANode.tag;
+    else if (node instanceof window.Comment && (Firebug.showCommentNodes || expandAll))
+        return CommentNode.tag;
+    else if (node instanceof SourceText)
+        return FirebugReps.SourceText.tag;
+    else if (node instanceof window.Document)
+        return HTMLDocument.tag;
+    else if (node instanceof window.DocumentType)
+        return HTMLDocType.tag;
+    else
+        return FirebugReps.Nada.tag;
+}
+
+// ********************************************************************************************* //
+// Registration
+
+return {
+    getNodeTag: getNodeTag,
+    SourceText: SourceText,
+    AttrTag: AttrTag,
+    TextTag: TextTag,
+    CompleteElement: CompleteElement,
+    SoloElement: SoloElement,
+    Element: Element,
+    HTMLDocument: HTMLDocument,
+    HTMLDocType: HTMLDocType,
+    HTMLHtmlElement: HTMLHtmlElement,
+    TextElement: TextElement,
+    EmptyElement: EmptyElement,
+    XEmptyElement: XEmptyElement,
+    AttrNode: AttrNode,
+    TextNode: TextNode,
+    CDATANode: CDATANode,
+    CommentNode: CommentNode
+};
+
+// ********************************************************************************************* //
+});
diff --git a/content/firebug/html/insideOutBox.js b/content/firebug/html/insideOutBox.js
index be3cb13..5dd7abc 100644
--- a/content/firebug/html/insideOutBox.js
+++ b/content/firebug/html/insideOutBox.js
@@ -232,21 +232,14 @@ Firebug.InsideOutBox.prototype =
             {
                 if (exceptions && child.repObject)
                 {
-                    var shouldBeExpanded = true;
                     var localName = child.repObject.localName;
-                    localName = localName ? localName.toLowerCase() : "";
+                    localName = localName && localName.toLowerCase();
 
-                    for (var i=0; i<exceptions.length; i++)
+                    if (exceptions.indexOf(localName) !== -1 &&
+                        Xml.isElementHTMLOrXHTML(child.repObject))
                     {
-                        if (localName == exceptions[i] &&
-                            (Xml.isElementHTML(child.repObject) || Xml.isElementXHTML(child.repObject)))
-                        {
-                            shouldBeExpanded = false;
-                            break;
-                        }
-                    }
-                    if (!shouldBeExpanded)
                         continue;
+                    }
                 }
 
                 if (Css.hasClass(child, "containerNodeBox"))
diff --git a/content/firebug/html/inspector.js b/content/firebug/html/inspector.js
index 671d79f..988a75d 100644
--- a/content/firebug/html/inspector.js
+++ b/content/firebug/html/inspector.js
@@ -1,24 +1,25 @@
 /* See license.txt for terms of usage */
 
 define([
-    "firebug/lib/object",
     "firebug/firebug",
-    "firebug/chrome/firefox",
-    "firebug/chrome/reps",
-    "firebug/lib/locale",
+    "firebug/lib/trace",
+    "firebug/chrome/module",
+    "firebug/lib/object",
     "firebug/lib/events",
     "firebug/lib/wrapper",
     "firebug/lib/array",
     "firebug/lib/css",
     "firebug/lib/dom",
     "firebug/lib/xml",
-    "firebug/chrome/window",
     "firebug/lib/system",
+    "firebug/chrome/window",
     "firebug/html/highlighterCache",
     "firebug/html/quickInfoBox",
 ],
-function(Obj, Firebug, Firefox, FirebugReps, Locale, Events, Wrapper, Arr, Css, Dom, Xml,
-    Win, System, HighlighterCache, QuickInfoBox) {
+function(Firebug, FBTrace, Module, Obj, Events, Wrapper, Arr, Css, Dom, Xml, System, Win,
+    HighlighterCache, QuickInfoBox) {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
@@ -39,7 +40,7 @@ var frameHighlighter = null;
 /**
  * @module Implements Firebug Inspector logic.
  */
-Firebug.Inspector = Obj.extend(Firebug.Module,
+Firebug.Inspector = Obj.extend(Module,
 {
     dispatchName: "inspector",
     inspecting: false,
@@ -143,7 +144,7 @@ Firebug.Inspector = Obj.extend(Firebug.Module,
             }
 
             this.clearAllHighlights();
-            usingColorArray = Arr.isArray(colorObj);
+            usingColorArray = Array.isArray(colorObj);
 
             if (context && context.window && context.window.document)
             {
@@ -682,7 +683,7 @@ Firebug.Inspector = Obj.extend(Firebug.Module,
      */
     initialize: function()
     {
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
 
         this.onInspectingResizeWindow = Obj.bind(this.onInspectingResizeWindow, this);
         this.onInspectingScroll = Obj.bind(this.onInspectingScroll, this);
@@ -705,7 +706,7 @@ Firebug.Inspector = Obj.extend(Firebug.Module,
 
     shutdown: function()
     {
-        Firebug.Module.shutdown.apply(this, arguments);
+        Module.shutdown.apply(this, arguments);
 
         var panelBar1 = Firebug.chrome.$("fbPanelBar1");
         Events.removeEventListener(panelBar1, "selectPanel", this.onPanelChanged, false);
@@ -1390,6 +1391,19 @@ BoxModelHighlighter.prototype =
 
     getNodes: function(context, isMulti)
     {
+        function create(className, name)
+        {
+            var div = doc.createElementNS("http://www.w3.org/1999/xhtml", "div");
+            hideElementFromInspection(div);
+
+            if (className !== CustomizableBox)
+                div.className = className + name;
+            else
+                div.className = className;
+
+            return div;
+        }
+
         if (context.window)
         {
             var doc = context.window.document;
@@ -1411,20 +1425,7 @@ BoxModelHighlighter.prototype =
             var CustomizableBox = "firebugResetStyles firebugLayoutBox";
             var Line = "firebugResetStyles firebugBlockBackgroundColor firebugLayoutLine firebugLayoutLine";
 
-            function create(className, name)
-            {
-                var div = doc.createElementNS("http://www.w3.org/1999/xhtml", "div");
-                hideElementFromInspection(div);
-
-                if (className !== CustomizableBox)
-                    div.className = className + name;
-                else
-                    div.className = className;
-
-                return div;
-            }
-
-            nodes =
+            var nodes =
             {
                 parent: create(Box, "Parent"),
                 rulerH: create(Ruler, "H"),
@@ -1494,6 +1495,7 @@ function attachStyles(context, doc)
     else
     {
         style = Css.createStyleSheet(doc, highlightCssUrl);
+        style.classList.add("firebugResetStyles");
         highlightStyleCache.set(doc, style);
     }
 
diff --git a/content/firebug/html/layout.js b/content/firebug/html/layout.js
index 6c88deb..8a85dbd 100644
--- a/content/firebug/html/layout.js
+++ b/content/firebug/html/layout.js
@@ -1,8 +1,10 @@
 /* See license.txt for terms of usage */
 
 define([
-    "firebug/lib/object",
     "firebug/firebug",
+    "firebug/chrome/panel",
+    "firebug/lib/trace",
+    "firebug/lib/object",
     "firebug/lib/domplate",
     "firebug/lib/locale",
     "firebug/lib/events",
@@ -10,9 +12,11 @@ define([
     "firebug/lib/dom",
     "firebug/lib/xml",
     "firebug/chrome/menu",
-    "firebug/editor/editor",
+    "firebug/editor/inlineEditor",
+    "firebug/chrome/measureBox",
 ],
-function(Obj, Firebug, Domplate, Locale, Events, Css, Dom, Xml, Menu) {
+function(Firebug, Panel, FBTrace, Obj, Domplate, Locale, Events, Css, Dom, Xml, Menu,
+    InlineEditor, MeasureBox) {
 
 "use strict"
 
@@ -30,7 +34,7 @@ var {domplate, DIV, SPAN} = Domplate;
  * The layout data editing is done through {@LayoutEditor} object.
  */
 function LayoutPanel() {}
-LayoutPanel.prototype = Obj.extend(Firebug.Panel,
+LayoutPanel.prototype = Obj.extend(Panel,
 /** @lends LayoutPanel */
 {
     name: "layout",
@@ -264,7 +268,7 @@ LayoutPanel.prototype = Obj.extend(Firebug.Panel,
         this.onMouseOut = Obj.bind(this.onMouseOut, this);
         this.onAfterPaint = Obj.bindFixed(this.onMozAfterPaint, this);
 
-        Firebug.Panel.initialize.apply(this, arguments);
+        Panel.initialize.apply(this, arguments);
     },
 
     initializeNode: function(oldPanelNode)
@@ -272,7 +276,7 @@ LayoutPanel.prototype = Obj.extend(Firebug.Panel,
         Events.addEventListener(this.panelNode, "mouseover", this.onMouseOver, false);
         Events.addEventListener(this.panelNode, "mouseout", this.onMouseOut, false);
 
-        Firebug.Panel.initializeNode.apply(this, arguments);
+        Panel.initializeNode.apply(this, arguments);
     },
 
     destroyNode: function()
@@ -280,7 +284,7 @@ LayoutPanel.prototype = Obj.extend(Firebug.Panel,
         Events.removeEventListener(this.panelNode, "mouseover", this.onMouseOver, false);
         Events.removeEventListener(this.panelNode, "mouseout", this.onMouseOut, false);
 
-        Firebug.Panel.destroyNode.apply(this, arguments);
+        Panel.destroyNode.apply(this, arguments);
     },
 
     show: function(state)
@@ -469,17 +473,18 @@ LayoutPanel.prototype = Obj.extend(Firebug.Panel,
 
     getMaxCharWidth: function(args, node)
     {
-        Firebug.MeasureBox.startMeasuring(node);
+        MeasureBox.startMeasuring(node);
+
         var maxWidth = Math.max(
-            Firebug.MeasureBox.measureText(args.marginLeft + "").width,
-            Firebug.MeasureBox.measureText(args.marginRight + "").width,
-            Firebug.MeasureBox.measureText(args.borderLeft + "").width,
-            Firebug.MeasureBox.measureText(args.borderRight + "").width,
-            Firebug.MeasureBox.measureText(args.paddingLeft + "").width,
-            Firebug.MeasureBox.measureText(args.paddingRight + "").width
+            MeasureBox.measureText(String(args.marginLeft)).width,
+            MeasureBox.measureText(String(args.marginRight)).width,
+            MeasureBox.measureText(String(args.borderLeft)).width,
+            MeasureBox.measureText(String(args.borderRight)).width,
+            MeasureBox.measureText(String(args.paddingLeft)).width,
+            MeasureBox.measureText(String(args.paddingRight)).width
         );
 
-        Firebug.MeasureBox.stopMeasuring();
+        MeasureBox.stopMeasuring();
         return maxWidth;
     },
 
@@ -513,7 +518,7 @@ function LayoutEditor(doc)
 /**
  * @editor Represents an inline editor that is used by {@LayoutPanel} to modify layout data.
  */
-LayoutEditor.prototype = domplate(Firebug.InlineEditor.prototype,
+LayoutEditor.prototype = domplate(InlineEditor.prototype,
 /** @lends LayoutEditor */
 {
     saveEdit: function(target, value, previousValue)
diff --git a/content/firebug/html/quickInfoBox.css b/content/firebug/html/quickInfoBox.css
new file mode 100644
index 0000000..45fe63d
--- /dev/null
+++ b/content/firebug/html/quickInfoBox.css
@@ -0,0 +1,4 @@
+/* See license.txt for terms of usage */
+
+ at import url(chrome://firebug/skin/quickInfoBox.css);
+ at import url(chrome://firebug-os/skin/quickInfoBox.css);
diff --git a/content/firebug/html/quickInfoBox.js b/content/firebug/html/quickInfoBox.js
index 39c40fa..4c2fb21 100644
--- a/content/firebug/html/quickInfoBox.js
+++ b/content/firebug/html/quickInfoBox.js
@@ -2,32 +2,81 @@
 
 define([
     "firebug/firebug",
-    "firebug/chrome/firefox",
+    "firebug/lib/trace",
     "firebug/lib/locale",
     "firebug/lib/events",
     "firebug/lib/dom",
     "firebug/lib/options",
+    "firebug/lib/domplate",
+    "firebug/lib/object",
+    "firebug/lib/css",
+    "firebug/chrome/module",
+    "firebug/chrome/firefox",
 ],
-function(Firebug, Firefox, Locale, Events, Dom, Options) {
+function(Firebug, FBTrace, Locale, Events, Dom, Options, Domplate, Obj, Css, Module, Firefox) {
+
+"use strict"
 
 // ********************************************************************************************* //
 // Constants
 
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-const Cu = Components.utils;
+var Cc = Components.classes;
+var Ci = Components.interfaces;
+var Cu = Components.utils;
 
 var domAttribs = ["nodeName", "id", "name", "offsetWidth", "offsetHeight"];
 var cssAttribs = ["position"];
 var compAttribs = [
     "width", "height", "zIndex", "position", "top", "right", "bottom", "left",
     "margin-top", "margin-right", "margin-bottom", "margin-left", "color",
-    "backgroundColor", "fontFamily", "cssFloat", "display", "visibility"];
+    "backgroundColor", "fontFamily", "cssFloat", "display", "visibility"
+];
+
+// Tracing
+var Trace = FBTrace.to("DBG_QUICKINFOBOX");
+var TraceError = FBTrace.to("DBG_ERRORS");
+
+// ********************************************************************************************* //
+// Domplate
+
+var {domplate, DIV, TABLE, TBODY, TR, TD, SPAN} = Domplate;
+
+var tableTag =
+    TABLE({"class": "fbQuickInfoTable", cellpadding: 0, cellspacing: 0},
+        TBODY(
+            TR({"class": "pin"},
+                TD({"class": "", align: "right"},
+                    DIV({"class": "fbQuickInfoPin $pin button", onclick: "$onClickPin"}),
+                    DIV({"class": "fbQuickInfoClose button", onclick: "$onClickClose"})
+                )
+            )
+        )
+    );
+
+var titleTag =
+    TR(
+        TD({"class": "fbQuickInfoBoxTitle"},
+            SPAN("$title")
+        )
+    );
+
+var rowTag =
+    TR({"class": "row"},
+        TD({"class": ""},
+            SPAN({"class": "fbQuickInfoName"}, "$name: "),
+            SPAN({"class": "fbQuickInfoValue"}, "$value")
+        )
+    );
 
 // ********************************************************************************************* //
 // Implementation
 
-var QuickInfoBox =
+/**
+ * Displays the most important DOM properties and computed CSS styles for the currently
+ * inspected element. It can be freely positioned at the monitor via drag & drop.
+ */
+var QuickInfoBox = Obj.extend(Module,
+/** @lends QuickInfoBox */
 {
     boxEnabled: undefined,
     dragging: false,
@@ -36,65 +85,126 @@ var QuickInfoBox =
     prevX: null,
     prevY: null,
 
-    show: function(element)
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Module
+
+    initialize: function()
     {
-        if (FBTrace.DBG_QUICKINFOBOX)
-            FBTrace.sysout("quickInfoBox.show;");
+        Module.initialize.apply(this, arguments);
+
+        this.qiPanel = Firebug.chrome.$("fbQuickInfoPanel");
+
+        this.onContentLoadedListener = this.onContentLoaded.bind(this);
+        this.onMouseDownListener = this.onMouseDown.bind(this);
+        this.onMouseOverListener = this.onMouseOver.bind(this);
+        this.onMouseOutListener = this.onMouseOut.bind(this);
+        this.onMouseMoveListener = this.onMouseMove.bind(this);
+        this.onMouseUpListener = this.onMouseUp.bind(this);
+
+        var frame = this.getContentFrame();
+        Events.addEventListener(frame, "load", this.onContentLoadedListener, true);
+
+        Events.addEventListener(this.qiPanel, "mousedown", this.onMouseDownListener, true);
+        Events.addEventListener(this.qiPanel, "mouseover", this.onMouseOverListener, true);
+        Events.addEventListener(this.qiPanel, "mouseout", this.onMouseOutListener, true);
+    },
+
+    shutdown: function()
+    {
+        Module.shutdown.apply(this, arguments);
+
+        var frame = this.getContentFrame();
+        Events.removeEventListener(frame, "load", this.onContentLoadedListener, true);
+
+        Events.removeEventListener(this.qiPanel, "mousedown", this.onMouseDownListener, true);
+        Events.removeEventListener(this.qiPanel, "mouseover", this.onMouseOverListener, true);
+        Events.removeEventListener(this.qiPanel, "mouseout", this.onMouseOutListener, true);
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+    onContentLoaded: function(event)
+    {
+        var doc = this.getContentDoc();
+        doc.body.classList.add("fbQuickInfoPanelBody");
+
+        Css.appendStylesheet(doc, "chrome://firebug/content/html/quickInfoBox.css");
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Show/hide
 
+    show: function(element)
+    {
         if (!this.boxEnabled || !element)
             return;
 
         this.needsToHide = false;
 
-        var qiBox = Firebug.chrome.$("fbQuickInfoPanel");
-        if (qiBox.state === "closed")
+        if (this.qiPanel.state === "closed")
         {
             var content = Firefox.getElementById("content");
             this.storedX = this.storedX || content.tabContainer.boxObject.screenX + 5;
             this.storedY = this.storedY || content.tabContainer.boxObject.screenY + 35;
 
-            // Dynamically set noautohide to avoid mozilla bug 545265.
+            // Dynamically set noautohide to avoid Mozilla bug 545265.
             if (!this.noautohideAdded)
             {
+                var self = this;
                 this.noautohideAdded = true;
-                qiBox.addEventListener("popupshowing", function runOnce()
+                this.qiPanel.addEventListener("popupshowing", function runOnce()
                 {
-                    qiBox.removeEventListener("popupshowing", runOnce, false);
-                    qiBox.setAttribute("noautohide", true);
+                    self.qiPanel.removeEventListener("popupshowing", runOnce, false);
+                    self.qiPanel.setAttribute("noautohide", true);
                 }, false);
             }
 
-            qiBox.openPopupAtScreen(this.storedX, this.storedY, false);
+            this.qiPanel.openPopupAtScreen(this.storedX, this.storedY, false);
         }
 
-        qiBox.removeChild(qiBox.firstChild);
-        var vbox = document.createElement("vbox");
-        qiBox.appendChild(vbox);
+        var doc = this.getContentDoc();
+        var parentNode = doc.body;
+
+        // The tableTag template doesn't have its own object and so, we specify
+        // all event handlers and properties through the input object.
+        var input = {
+            onClickPin: this.onClickPin.bind(this),
+            pin: Options.get("pinQuickInfoBox") ? "pin" : "",
+            onClickClose: this.onClickClose.bind(this),
+        }
 
-        var needsTitle = this.addRows(element, vbox, domAttribs);
-        var needsTitle2 = this.addRows(element.style, vbox, cssAttribs);
+        // Render the basic quick-box layout. It's a table where every row represents
+        // a CSS property or a section title. The pin icon displayed at the top-right
+        // corner also gets one row.
+        var table = tableTag.replace(input, parentNode, this);
+        var tbody = table.firstChild;
 
-        var lab;
+        var needsTitle = this.addRows(element, tbody, domAttribs);
+        var needsTitle2 = this.addRows(element.style, tbody, cssAttribs);
+
+        // Properly create section titles.
         if (needsTitle || needsTitle2)
-        {
-            lab = document.createElement("label");
-            lab.setAttribute("class", "fbQuickInfoBoxTitle");
-            lab.setAttribute("value", Locale.$STR("quickInfo"));
-            vbox.insertBefore(lab, vbox.firstChild);
-        }
+            titleTag.insertRows({title: Locale.$STR("quickInfo")}, tbody.firstChild, this);
 
-        lab = document.createElement("label");
-        lab.setAttribute("class", "fbQuickInfoBoxTitle");
-        lab.setAttribute("value", Locale.$STR("computedStyle"));
-        vbox.appendChild(lab);
+        titleTag.insertRows({title: Locale.$STR("computedStyle")}, tbody.lastChild, this);
 
-        this.addRows(element, vbox, compAttribs, true);
+        // Generate content (a row == CSS property)
+        this.addRows(element, tbody, compAttribs, true);
+
+        // Always update size of the panel according to the content size. Some elements might
+        // have more styles than others and so, require more space. We always need
+        // to avoid scroll-bars.
+        // Keep the default width (specified in firebugOverlay.xul for fbQuickInfoPanel)
+        // and change only the height.
+        this.qiPanel.sizeTo(this.qiPanel.popupBoxObject.width, doc.documentElement.clientHeight);
     },
 
     hide: function()
     {
-        if (FBTrace.DBG_QUICKINFOBOX)
-            FBTrace.sysout("quickInfoBox.hide;");
+        // If the preference says pin == true then do not hide.
+        // xxxHonza: the box should be hidden when the user switches out of the HTML panel.
+        if (Options.get("pinQuickInfoBox"))
+            return;
 
         // if mouse is over panel defer hiding to mouseout to not cause flickering
         if (this.mouseover || this.dragging)
@@ -103,90 +213,29 @@ var QuickInfoBox =
             return;
         }
 
-        var qiBox = Firebug.chrome.$("fbQuickInfoPanel");
-
         this.prevX = null;
         this.prevY = null;
         this.needsToHide = false;
 
-        qiBox.hidePopup();
+        this.qiPanel.hidePopup();
     },
 
-    handleEvent: function(event)
-    {
-        switch (event.type)
-        {
-            case "mousemove":
-                if (!this.dragging)
-                    return;
-
-                var diffX, diffY,
-                    boxX = this.qiBox.screenX,
-                    boxY = this.qiBox.screenY,
-                    x = event.screenX,
-                    y = event.screenY;
-
-                diffX = x - this.prevX;
-                diffY = y - this.prevY;
-
-                this.qiBox.moveTo(boxX + diffX, boxY + diffY);
-
-                this.prevX = x;
-                this.prevY = y;
-                this.storedX = boxX;
-                this.storedY = boxY;
-                break;
-
-            case "mousedown":
-                this.qiPanel = Firebug.chrome.$("fbQuickInfoPanel");
-                this.qiBox = this.qiPanel.boxObject;
-                Events.addEventListener(this.qiPanel, "mousemove", this, true);
-                Events.addEventListener(this.qiPanel, "mouseup", this, true);
-                this.dragging = true;
-                this.prevX = event.screenX;
-                this.prevY = event.screenY;
-                break;
-
-            case "mouseup":
-                Events.removeEventListener(this.qiPanel, "mousemove", this, true);
-                Events.removeEventListener(this.qiPanel, "mouseup", this, true);
-                this.qiPanel = this.qiBox = null;
-                this.prevX = this.prevY = null;
-                this.dragging = false;
-                break;
-
-            // this is a hack to find when mouse enters and leaves panel
-            // it requires that #fbQuickInfoPanel have border
-            case "mouseover":
-                if (this.dragging)
-                    return;
-                this.mouseover = true;
-                break;
-
-            case "mouseout":
-                if (this.dragging)
-                    return;
-                this.mouseover = false;
-                // if hiding was defered because mouse was over panel hide it
-                if (this.needsToHide && event.target.nodeName == "panel")
-                    this.hide();
-                break;
-        }
-    },
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-    addRows: function(domBase, vbox, attribs, computedStyle)
+    addRows: function(domBase, parentNode, attribs, computedStyle)
     {
         if (!domBase)
             return;
 
+        // Iterate over all attributes and generate HTML content of the info box.
         var needsTitle = false;
         for (var i=0; i<attribs.length; i++)
         {
             var value;
             if (computedStyle)
             {
-                var cs = Dom.getNonFrameBody(domBase).ownerDocument.defaultView.getComputedStyle(
-                    domBase, null);
+                var defaultView = Dom.getNonFrameBody(domBase).ownerDocument.defaultView;
+                var cs = defaultView.getComputedStyle(domBase, null);
 
                 value = cs.getPropertyValue(attribs[i]);
 
@@ -198,35 +247,121 @@ var QuickInfoBox =
                 value = domBase[attribs[i]];
             }
 
-            if (value)
-            {
-                needsTitle = true;
-                var hbox = document.createElement("hbox");
-                var lab = document.createElement("label");
-                lab.setAttribute("class", "fbQuickInfoName");
-                lab.setAttribute("value", attribs[i]);
-                hbox.appendChild(lab);
-                var desc = document.createElement("label");
-                desc.setAttribute("class", "fbQuickInfoValue");
-                desc.appendChild(document.createTextNode(": " + value));
-                hbox.appendChild(desc);
-                vbox.appendChild(hbox);
-            }
+            if (!value)
+                continue;
+
+            // There is at least one value displayed so, the title should be generated.
+            needsTitle = true;
+
+            var input = {name: attribs[i], value: value}
+            rowTag.insertRows(input, parentNode.lastChild, rowTag);
         }
 
         return needsTitle;
     },
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Events
+
+    onClickPin: function(event)
+    {
+        var target = event.target;
+        if (!Css.hasClass(target, "fbQuickInfoPin"))
+            return;
+
+        // The state of the pin needs to be updated in preferences.
+        Options.togglePref("pinQuickInfoBox");
+
+        // Update also the icon state.
+        Css.toggleClass(target, "pin");
+    },
+
+    onClickClose: function(event)
+    {
+        var target = event.target;
+        if (!Css.hasClass(target, "fbQuickInfoClose"))
+            return;
+
+        this.qiPanel.hidePopup();
+    },
+
+    onMouseDown: function(event)
+    {
+        var target = event.target;
+        var node = target.firstChild ? target.firstChild.nodeType : target.nodeType;
+
+        // skip dragging when user click on button or on text
+        if (Css.hasClass(target, "button") || node == Node.TEXT_NODE)
+            return;
+
+        Events.addEventListener(this.qiPanel, "mousemove", this.onMouseMoveListener, true);
+        Events.addEventListener(this.qiPanel, "mouseup", this.onMouseUpListener, true);
+
+        this.dragging = true;
+        this.prevX = event.screenX;
+        this.prevY = event.screenY;
+    },
+
+    // this is a hack to find when mouse enters and leaves panel
+    // it requires that #fbQuickInfoPanel have border
+    onMouseOver: function(event)
+    {
+        if (this.dragging)
+            return;
+
+        this.mouseover = true;
+    },
+
+    onMouseOut: function(event)
+    {
+        if (this.dragging)
+            return;
+
+        this.mouseover = false;
+
+        // if hiding was deferred because mouse was over panel hide it
+        if (this.needsToHide && event.target.nodeName == "panel")
+            this.hide();
+    },
+
+    onMouseMove: function(event)
+    {
+        if (!this.dragging)
+            return;
+
+        var box = this.qiPanel.boxObject;
+        var boxX = box.screenX;
+        var boxY = box.screenY;
+        var x = event.screenX;
+        var y = event.screenY;
+        var diffX = x - this.prevX;
+        var diffY = y - this.prevY;
+
+        this.qiPanel.moveTo(boxX + diffX, boxY + diffY);
+
+        this.prevX = x;
+        this.prevY = y;
+        this.storedX = boxX;
+        this.storedY = boxY;
+    },
+
+    onMouseUp: function(event)
+    {
+        Events.removeEventListener(this.qiPanel, "mousemove", this.onMouseMoveListener, true);
+        Events.removeEventListener(this.qiPanel, "mouseup", this.onMouseUpListener, true);
+
+        this.prevX = this.prevY = null;
+        this.dragging = false;
+    },
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
     /**
      * Toggle the quick info box.
      */
     toggleQuickInfoBox: function()
     {
-        var qiBox = Firebug.chrome.$("fbQuickInfoPanel");
-
-        if (qiBox.state == "open")
+        if (this.qiPanel.state == "open")
             QuickInfoBox.hide();
 
         QuickInfoBox.boxEnabled = !QuickInfoBox.boxEnabled;
@@ -235,25 +370,34 @@ var QuickInfoBox =
     },
 
     /**
-     * Pass all quick info box events to QuickInfoBox.handleEvent() for handling.
-     * @param {Event} event Event to handle
+     * Hide the quick info box.
      */
-    quickInfoBoxHandler: function(event)
+    hideQuickInfoBox: function()
     {
-        QuickInfoBox.handleEvent(event);
+        if (this.qiPanel.state === "open")
+            QuickInfoBox.hide();
     },
 
-    /**
-     * Hide the quick info box.
-     */
-    hideQuickInfoBox: function()
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // Helpers
+
+    getContentFrame: function()
     {
-        var qiBox = Firebug.chrome.$("fbQuickInfoPanel");
+        if (!this.qiPanel)
+        {
+            TraceError.sysout("quickInfoBox.getContentFrame; ERROR no panel!");
+            return;
+        }
 
-        if (qiBox.state === "open")
-            QuickInfoBox.hide();
+        return this.qiPanel.getElementsByClassName("fbQuickInfoPanelContent")[0];
+    },
+
+    getContentDoc: function()
+    {
+        var contentFrame = this.getContentFrame();
+        return contentFrame.contentWindow.document;
     },
-};
+});
 
 // ********************************************************************************************* //
 // Helpers
@@ -270,8 +414,7 @@ function rgbToHex(value)
 // ********************************************************************************************* //
 // Registration
 
-// XUL commands need global access.
-Firebug.QuickInfoBox = QuickInfoBox;
+Firebug.registerModule(QuickInfoBox);
 
 return QuickInfoBox;
 
diff --git a/content/firebug/js/breakpoint.js b/content/firebug/js/breakpoint.js
index 7219f31..ac92501 100644
--- a/content/firebug/js/breakpoint.js
+++ b/content/firebug/js/breakpoint.js
@@ -1,6 +1,9 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
+    "firebug/chrome/panel",
+    "firebug/chrome/rep",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/domplate",
@@ -19,18 +22,18 @@ define([
     "firebug/editor/editor",
     "firebug/console/autoCompleter"
 ],
-function(Obj, Firebug, Domplate, FirebugReps, Locale, Events, SourceLink,
+function(Module, Panel, Rep, Obj, Firebug, Domplate, FirebugReps, Locale, Events, SourceLink,
     StackFrame, Css, Dom, Str, Arr, Persist, Menu, FBS) {
 
 // ********************************************************************************************* //
 // Constants
 
-const animationDuration = 0.8;
+var animationDuration = 0.8;
 
 // ********************************************************************************************* //
 // Breakpoints
 
-Firebug.Breakpoint = Obj.extend(Firebug.Module,
+Firebug.Breakpoint = Obj.extend(Module,
 {
     dispatchName: "breakpoints",
 
@@ -49,8 +52,10 @@ Firebug.Breakpoint = Obj.extend(Firebug.Module,
         var breakable = Firebug.chrome.getGlobalAttribute("cmd_firebug_toggleBreakOn", "breakable");
 
         if (FBTrace.DBG_BP)
-            FBTrace.sysout("breakpoint.toggleBreakOnNext; currentBreakable "+breakable+
+        {
+            FBTrace.sysout("breakpoint.toggleBreakOnNext; currentBreakable " + breakable +
                 " in " + panel.context.getName());
+        }
 
         // Toggle button's state.
         breakable = (breakable == "true" ? "false" : "true");
@@ -61,11 +66,7 @@ Firebug.Breakpoint = Obj.extend(Firebug.Module,
         var enabled = (breakable == "true" ? false : true);
         panel.breakOnNext(enabled);
 
-        // Make sure the correct tooltip (coming from the current panel) is used.
-        this.updateBreakOnNextTooltips(panel);
-
-        // Light up the tab whenever break on next is selected
-        this.updatePanelTab(panel, enabled);
+        this.updatePanelState(panel);
 
         return enabled;
     },
@@ -83,7 +84,8 @@ Firebug.Breakpoint = Obj.extend(Firebug.Module,
 
     updatePanelState: function(panel)
     {
-        if (!panel)  // there is no selectedPanel?
+        // there is no selectedPanel?
+        if (!panel)
             return;
 
         var breakButton = Firebug.chrome.$("fbBreakOnNextButton");
@@ -176,6 +178,10 @@ Firebug.Breakpoint = Obj.extend(Firebug.Module,
         // which means already active (throbbing).
         var breakable = armed ? "false" : "true";
         Firebug.chrome.setGlobalAttribute("cmd_firebug_toggleBreakOn", "breakable", breakable);
+
+        // Set the button as 'checked', so it has visual border (see issue 6567).
+        var checked = armed ? "true" : "false";
+        Firebug.chrome.setGlobalAttribute("cmd_firebug_toggleBreakOn", "checked", checked);
     },
 
     updatePanelTab: function(panel, armed)
@@ -259,7 +265,7 @@ Firebug.Breakpoint = Obj.extend(Firebug.Module,
 // ********************************************************************************************* //
 
 with (Domplate) {
-Firebug.Breakpoint.BreakpointListRep = domplate(Firebug.Rep,
+Firebug.Breakpoint.BreakpointListRep = domplate(Rep,
 {
     tag:
         DIV({role : "list"},
@@ -322,7 +328,7 @@ Firebug.Breakpoint.BreakpointListRep = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-Firebug.Breakpoint.BreakpointRep = domplate(Firebug.Rep,
+Firebug.Breakpoint.BreakpointRep = domplate(Rep,
 {
     tag:
         DIV({"class": "breakpointRow focusRow", $disabled: "$bp|isDisabled", role: "option",
@@ -470,7 +476,7 @@ Firebug.Breakpoint.BreakpointRep = domplate(Firebug.Rep,
 
 Firebug.Breakpoint.BreakpointsPanel = function() {};
 
-Firebug.Breakpoint.BreakpointsPanel.prototype = Obj.extend(Firebug.Panel,
+Firebug.Breakpoint.BreakpointsPanel.prototype = Obj.extend(Panel,
 {
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
     // extends Panel
@@ -485,14 +491,14 @@ Firebug.Breakpoint.BreakpointsPanel.prototype = Obj.extend(Firebug.Panel,
     {
         this.groupOpened = [];
 
-        Firebug.Panel.initialize.apply(this, arguments);
+        Panel.initialize.apply(this, arguments);
     },
 
     destroy: function(state)
     {
         state.groupOpened = this.groupOpened;
 
-        Firebug.Panel.destroy.apply(this, arguments);
+        Panel.destroy.apply(this, arguments);
     },
 
     show: function(state)
@@ -1067,7 +1073,7 @@ Firebug.Breakpoint.BreakNotification = function(doc, cause)
     this.cause = cause;
 };
 
-Firebug.Breakpoint.BreakNotification.prototype = domplate(Firebug.Rep,
+Firebug.Breakpoint.BreakNotification.prototype = domplate(Rep,
 /** @lends Firebug.ScriptPanel.Notification */
 {
     tag:
diff --git a/content/firebug/js/callstack.js b/content/firebug/js/callstack.js
index d90f39d..400fd6d 100644
--- a/content/firebug/js/callstack.js
+++ b/content/firebug/js/callstack.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/panel",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/chrome/reps",
@@ -14,7 +15,7 @@ define([
     "firebug/lib/options",
     "firebug/chrome/menu"
 ],
-function(Obj, Firebug, FirebugReps, JavaScriptTool, Events, Wrapper, StackFrame,
+function(Panel, Obj, Firebug, FirebugReps, JavaScriptTool, Events, Wrapper, StackFrame,
     Css, Arr, Dom, Options, Menu) {
 
 // ********************************************************************************************* //
@@ -32,7 +33,7 @@ const Ci = Components.interfaces;
  * panel.
  */
 Firebug.CallstackPanel = function() {};
-Firebug.CallstackPanel.prototype = Obj.extend(Firebug.Panel,
+Firebug.CallstackPanel.prototype = Obj.extend(Panel,
 /** @lends Firebug.CallstackPanel */
 {
     name: "callstack",
@@ -43,7 +44,7 @@ Firebug.CallstackPanel.prototype = Obj.extend(Firebug.Panel,
 
     initialize: function(context, doc)
     {
-        Firebug.Panel.initialize.apply(this, arguments);
+        Panel.initialize.apply(this, arguments);
 
         Firebug.connection.addListener(this);
     },
@@ -52,7 +53,7 @@ Firebug.CallstackPanel.prototype = Obj.extend(Firebug.Panel,
     {
         Firebug.connection.removeListener(this);
 
-        Firebug.Panel.destroy.apply(this, arguments);
+        Panel.destroy.apply(this, arguments);
     },
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/content/firebug/js/debugger.js b/content/firebug/js/debugger.js
index b5512f4..37920c1 100644
--- a/content/firebug/js/debugger.js
+++ b/content/firebug/js/debugger.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/activableModule",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/chrome/firefox",
@@ -22,7 +23,7 @@ define([
     "firebug/debugger/debuggerLib",
     "firebug/console/errors",
 ],
-function(Obj, Firebug, Firefox, CompilationUnit, Xpcom, FirebugReps, Locale,
+function(ActivableModule, Obj, Firebug, Firefox, CompilationUnit, Xpcom, FirebugReps, Locale,
     Wrapper, Url, SourceLink, StackFrame, Css, Win, Str, Arr, Debug, FBS, Events, DebuggerLib) {
 
 // ********************************************************************************************* //
@@ -68,7 +69,7 @@ var jsd = Cc["@mozilla.org/js/jsd/debugger-service;1"].getService(Ci.jsdIDebugge
 
 // ************************************************************************************************
 
-Firebug.Debugger = Obj.extend(Firebug.ActivableModule,
+Firebug.Debugger = Obj.extend(ActivableModule,
 {
     dispatchName: "debugger",
     fbs: FBS, // access to firebug-service in chromebug under browser.xul.Dom.Firebug.Debugger.fbs
@@ -2388,20 +2389,14 @@ Firebug.Debugger = Obj.extend(Firebug.ActivableModule,
 
         this.onFunctionCall = Obj.bind(this.onFunctionCall, this);
 
-        Firebug.ActivableModule.initialize.apply(this, arguments);
+        ActivableModule.initialize.apply(this, arguments);
     },
 
     shutdown: function()
     {
-        if (FBTrace.DBG_ACTIVATION)
-            FBTrace.sysout("shutdown");
-
-        this.unregisterClient(Firebug.JSDebugClient);
-        FBS.unregisterDebugger(this);
-
         //Firebug.connection.unregisterTool(this.asTool);
 
-        Firebug.ActivableModule.shutdown.apply(this, arguments);
+        ActivableModule.destroy.apply(this, arguments);
     },
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -2451,7 +2446,7 @@ Firebug.Debugger = Obj.extend(Firebug.ActivableModule,
 
     initializeUI: function()
     {
-        Firebug.ActivableModule.initializeUI.apply(this, arguments);
+        ActivableModule.initializeUI.apply(this, arguments);
         this.obeyPrefs();
         this.filterButton = Firebug.chrome.$("fbScriptFilterMenu");  // TODO move to script.js
         this.filterMenuUpdate();
@@ -2475,7 +2470,7 @@ Firebug.Debugger = Obj.extend(Firebug.ActivableModule,
 
         context.jsDebuggerCalledUs = false;
 
-        Firebug.ActivableModule.initContext.apply(this, arguments);
+        ActivableModule.initContext.apply(this, arguments);
     },
 
     showContext: function(browser, context)
@@ -2583,9 +2578,9 @@ Firebug.Debugger = Obj.extend(Firebug.ActivableModule,
 
     destroyContext: function(context, persistedState)
     {
-        Firebug.ActivableModule.destroyContext.apply(this, arguments);
+        ActivableModule.destroyContext.apply(this, arguments);
 
-        if (context && context.stopped)
+        if (context.stopped)
         {
             // the abort will call resume, but the nestedEventLoop would continue the load...
             this.abort(context);
@@ -2593,7 +2588,7 @@ Firebug.Debugger = Obj.extend(Firebug.ActivableModule,
 
         if (persistedState)
         {
-            if (context && context.dynamicURLhasBP)
+            if (context.dynamicURLhasBP)
                 persistedState.dynamicURLhasBP = context.dynamicURLhasBP;
             else
                 delete persistedState.dynamicURLhasBP;
@@ -2613,6 +2608,12 @@ Firebug.Debugger = Obj.extend(Firebug.ActivableModule,
             return new SourceLink.SourceLink(sourceFile.href, 0, "js");
     },
 
+    shutdown: function()
+    {
+        this.unregisterClient(Firebug.JSDebugClient);
+        FBS.unregisterDebugger(this);
+    },
+
     /**
      * 1.3.1 safe for multiple calls
      */
@@ -2714,10 +2715,8 @@ Firebug.Debugger = Obj.extend(Firebug.ActivableModule,
         //var paused = FBS.pause(this.debuggerName);
 
         if (FBTrace.DBG_ACTIVATION)
-        {
-            FBTrace.sysout("debugger.onSuspendFirebug paused: "+/*paused+*/" isAlwaysEnabled " +
+            FBTrace.sysout("debugger.onSuspendFirebug paused: "+paused+" isAlwaysEnabled " +
                 Firebug.Debugger.isAlwaysEnabled());
-        }
 
         // JSD activation is not per browser-tab, so FBS.pause can return 'not-paused' when
         // Firebug is activated on another tab.
@@ -2737,10 +2736,8 @@ Firebug.Debugger = Obj.extend(Firebug.ActivableModule,
         //var unpaused = FBS.unPause();
 
         if (FBTrace.DBG_ACTIVATION)
-        {
-            FBTrace.sysout("debugger.onResumeFirebug unpaused: "/*+unpaused*/+" isAlwaysEnabled " +
+            FBTrace.sysout("debugger.onResumeFirebug unpaused: "+unpaused+" isAlwaysEnabled " +
                 Firebug.Debugger.isAlwaysEnabled());
-        }
     },
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -2906,9 +2903,9 @@ Firebug.JSDebugClient =
     {
         // A debugger client (an instance of Firebug.JSDebugClient) asked to pause JSD.
         // Note that there is one instance of Firebug.JSDebugClient per browser (XUL) window.
-        // If the debugger is 'on' in this browser window and the request comes from
-        // another browser window (another debugger) JSD should *not* be paused (see issue 4609).
-        // So, reject if the request comes from another browser window and Firebug
+        // If the debugger is 'on' in this browser window JSD and the request comes from
+        // another window (debugger) JSD should *not* be paused (see issue 4609).
+        // So, reject only if the request comes from another browser window and Firebug
         // is resumed in this window.
         if (debuggerName != Firebug.Debugger.debuggerName && !Firebug.getSuspended())
         {
@@ -2925,28 +2922,6 @@ Firebug.JSDebugClient =
         if (FBTrace.DBG_ACTIVATION)
             FBTrace.sysout("Firebug.JSDebugClient onPauseJSDRequested rejection: " +
                 rejection.length + ", jsDebuggerOn: " + Firebug.jsDebuggerOn);
-    },
-
-    /**
-     * FBS is asking whether we can disable JSD. The question is dispatched to all browser
-     * windows in the current process through registered JSDebugClient instances.
-     *
-     * The XUL window (in the current scope) needs to decide whether it's ok or not.
-     * (see also Issue 6942);
-     */
-    onDisableJSDRequested: function(rejections)
-    {
-        // Do not reject if the debugger (the Script panel) is actually disabled anyway.
-        if (!Firebug.Debugger.isAlwaysEnabled())
-            return;
-
-        // Do not reject if there is no active context in this browser window.
-        if (Firebug.TabWatcher.contexts.length == 0)
-            return;
-
-        // JSD can't be disabled at this moment there are contexts i.e. active Script panels
-        // in this browser window.
-        rejections.push(true);
     }
 };
 
diff --git a/content/firebug/js/scriptPanel.js b/content/firebug/js/scriptPanel.js
index cd5e3b1..a8dae7d 100644
--- a/content/firebug/js/scriptPanel.js
+++ b/content/firebug/js/scriptPanel.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/rep",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/chrome/firefox",
@@ -22,16 +23,17 @@ define([
     "firebug/chrome/menu",
     "firebug/trace/debug",
     "firebug/lib/keywords",
-    "firebug/js/fbs",
+    "firebug/chrome/panelNotification",
+    "firebug/lib/options",
     "firebug/editor/editorSelector",
     "firebug/chrome/infotip",
     "firebug/chrome/searchBox",
     "firebug/js/sourceBox",
     "firebug/js/watchPanel",
 ],
-function (Obj, Firebug, Firefox, FirebugReps, Domplate, JavaScriptTool, CompilationUnit,
-    Locale, Events, Url, SourceLink, StackFrame, Css, Dom, Win, Search, Persist,
-    System, Menu, Debug, Keywords, FBS) {
+function (Rep, Obj, Firebug, Firefox, FirebugReps, Domplate, JavaScriptTool, CompilationUnit,
+    Locale, Events, Url, SourceLink, StackFrame, Css, Dom, Win, Search, Persist, System, Menu,
+    Debug, Keywords, PanelNotification, Options) {
 
 // ********************************************************************************************* //
 // Script panel
@@ -140,6 +142,8 @@ Firebug.ScriptPanel.prototype = Obj.extend(Firebug.SourceBoxPanel,
     updateSourceBox: function(sourceBox)
     {
         this.location = sourceBox.repObject;
+
+        this.onUpdateSourceBox(sourceBox);
     },
 
     /**
@@ -230,7 +234,7 @@ Firebug.ScriptPanel.prototype = Obj.extend(Firebug.SourceBoxPanel,
 
             // If the source link is selected, clear it so the next link will scroll and highlight.
             if (sourceLink == this.selection)
-                delete this.selection;
+                this.selection = null;
         }
     },
 
@@ -633,22 +637,26 @@ Firebug.ScriptPanel.prototype = Obj.extend(Firebug.SourceBoxPanel,
     {
         var scrollingElement = event.target;
         this.reView(scrollingElement);
-        var searchBox = Firebug.chrome.$("fbSearchBox");
-        searchBox.placeholder = Locale.$STR("Use hash plus number to go to line");
     },
 
     onKeyPress: function(event)
     {
         var ch = String.fromCharCode(event.charCode);
-        var searchBox = Firebug.chrome.$("fbSearchBox");
 
         if (ch == "l" && Events.isControl(event))
         {
+            var searchBox = Firebug.chrome.$("fbSearchBox");
             searchBox.value = "#";
             searchBox.focus();
 
             Events.cancelEvent(event);
         }
+
+        if (ch == "w" && Events.isAlt(event))
+        {
+            this.addSelectionWatch();
+            Events.cancelEvent(event);
+        }
     },
 
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -656,6 +664,7 @@ Firebug.ScriptPanel.prototype = Obj.extend(Firebug.SourceBoxPanel,
 
     name: "script",
     searchable: true,
+    searchPlaceholder: "Use_hash_plus_number_to_go_to_line",
     breakable: true,
     enableA11y: true,
     order: 40,
@@ -674,15 +683,13 @@ Firebug.ScriptPanel.prototype = Obj.extend(Firebug.SourceBoxPanel,
         this.panelSplitter = Firebug.chrome.$("fbPanelSplitter");
         this.sidePanelDeck = Firebug.chrome.$("fbSidePanelDeck");
 
-        FBS.registerPanel(this);
-
         Firebug.SourceBoxPanel.initialize.apply(this, arguments);
     },
 
     destroy: function(state)
     {
         // We want the location (compilationUnit) to persist, not the selection (eg stackFrame).
-        delete this.selection;
+        this.selection = null;
 
         var sourceBox = this.selectedSourceBox;
         if (sourceBox)
@@ -716,19 +723,20 @@ Firebug.ScriptPanel.prototype = Obj.extend(Firebug.SourceBoxPanel,
         // Make sure listeners are removed.
         this.detachListeners(this.context, Firebug.chrome);
 
-        FBS.unregisterPanel(this);
-
         Firebug.SourceBoxPanel.destroy.apply(this, arguments);
     },
 
     initializeNode: function(oldPanelNode)
     {
+        // xxxHonza: is this tooltip still used?
         this.tooltip = this.document.createElement("div");
         Css.setClass(this.tooltip, "scriptTooltip");
-        this.tooltip.setAttribute('aria-live', 'polite');
+        this.tooltip.setAttribute("aria-live", "polite");
         Css.obscure(this.tooltip, true);
         this.panelNode.appendChild(this.tooltip);
 
+        this.initializeNotificationBox();
+
         Events.addEventListener(this.panelNode, "mousedown", this.onMouseDown, true);
         Events.addEventListener(this.panelNode, "contextmenu", this.onContextMenu, false);
         Events.addEventListener(this.panelNode, "mouseover", this.onMouseOver, false);
@@ -738,6 +746,24 @@ Firebug.ScriptPanel.prototype = Obj.extend(Firebug.SourceBoxPanel,
         Firebug.SourceBoxPanel.initializeNode.apply(this, arguments);
     },
 
+    initializeNotificationBox: function()
+    {
+        var box = this.panelNode.getElementsByClassName("panelNotificationBox");
+        if (box.length > 0)
+            return;
+
+        var prefName = Options.prefDomain + ".cache.responseLimit";
+        var config = {
+            message: Locale.$STR("script.SourceLimited"),
+            prefName: prefName,
+            buttonTooltip: Locale.$STRF("LimitPrefsTitle", [prefName])
+        };
+
+        // Render panel notification box (hidden by default).
+        this.notificationBox = PanelNotification.render(this.panelNode, config);
+        Css.setClass(this.notificationBox, "panelNotificationBox collapsed");
+    },
+
     destroyNode: function()
     {
         if (this.tooltipTimeout)
@@ -761,7 +787,7 @@ Firebug.ScriptPanel.prototype = Obj.extend(Firebug.SourceBoxPanel,
     {
         // Fill the panel node with a warning if needed
         var aLocation = this.getDefaultLocation();
-        var jsEnabled = Firebug.Options.getPref("javascript", "enabled");
+        var jsEnabled = Options.getPref("javascript", "enabled");
 
         if (FBTrace.DBG_PANELS)
         {
@@ -840,9 +866,11 @@ Firebug.ScriptPanel.prototype = Obj.extend(Firebug.SourceBoxPanel,
             return;
 
         var active = !this.showWarning();
-
         if (active)
         {
+            // The box might have been removed by the warning message.
+            this.initializeNotificationBox();
+
             Events.addEventListener(this.panelNode.ownerDocument, "keypress", this.onKeyPress, true);
             Events.addEventListener(this.resizeEventTarget, "resize", this.onResize, true);
 
@@ -923,16 +951,20 @@ Firebug.ScriptPanel.prototype = Obj.extend(Firebug.SourceBoxPanel,
         this.showToolbarButtons("fbLocationList", active);
 
         Firebug.chrome.$("fbRerunButton").setAttribute("tooltiptext",
-            Locale.$STRF("firebug.labelWithShortcut", [Locale.$STR("script.Rerun"), "Shift+F8"]));
+            Locale.$STRF("firebug.labelWithShortcut", [Locale.$STR("script.Rerun"),
+                Locale.getFormattedKey(window, "shift", null, "VK_F8")]));
         Firebug.chrome.$("fbContinueButton").setAttribute("tooltiptext",
-            Locale.$STRF("firebug.labelWithShortcut", [Locale.$STR("script.Continue"), "F8"]));
+            Locale.$STRF("firebug.labelWithShortcut", [Locale.$STR("script.Continue"),
+                Locale.getFormattedKey(window, null, null, "VK_F8")]));
         Firebug.chrome.$("fbStepIntoButton").setAttribute("tooltiptext",
-            Locale.$STRF("firebug.labelWithShortcut", [Locale.$STR("script.Step_Into"), "F11"]));
+            Locale.$STRF("firebug.labelWithShortcut", [Locale.$STR("script.Step_Into"),
+                Locale.getFormattedKey(window, null, null, "VK_F11")]));
         Firebug.chrome.$("fbStepOverButton").setAttribute("tooltiptext",
-            Locale.$STRF("firebug.labelWithShortcut", [Locale.$STR("script.Step_Over"), "F10"]));
+            Locale.$STRF("firebug.labelWithShortcut", [Locale.$STR("script.Step_Over"),
+                Locale.getFormattedKey(window, null, null, "VK_F10")]));
         Firebug.chrome.$("fbStepOutButton").setAttribute("tooltiptext",
-            Locale.$STRF("firebug.labelWithShortcut",
-                [Locale.$STR("script.Step_Out"), "Shift+F11"]));
+            Locale.$STRF("firebug.labelWithShortcut", [Locale.$STR("script.Step_Out"),
+                Locale.getFormattedKey(window, "shift", null, "VK_F11")]));
 
         // Additional debugger panels are visible only, if debugger is active.
         this.panelSplitter.collapsed = !active;
@@ -959,6 +991,24 @@ Firebug.ScriptPanel.prototype = Obj.extend(Firebug.SourceBoxPanel,
         delete this.infoTipExpr;
     },
 
+    onUpdateSourceBox: function(sourceBox)
+    {
+        var url = sourceBox.repObject.url;
+        if (!url)
+            return;
+
+        var limited = this.context.sourceCache.isLimited(url);
+        if (!limited)
+            return;
+
+        // Show the notification box, so the user knows the script content has
+        // been limited in the cache.
+        Css.removeClass(this.notificationBox, "collapsed");
+        var view = this.notificationBox.ownerDocument.defaultView;
+        var cs = view.getComputedStyle(this.notificationBox);
+        this.selectedSourceBox.style.top = cs.height;
+    },
+
     ableWatchSidePanel: function(context)
     {
         // TODO if (commandline is not active, then we should not show the new watch feature)
@@ -1249,7 +1299,7 @@ Firebug.ScriptPanel.prototype = Obj.extend(Firebug.SourceBoxPanel,
         if (!allSources.length)
             return [];
 
-        var filter = Firebug.Options.get("scriptsFilter");
+        var filter = Options.get("scriptsFilter");
         this.showEvents = (filter == "all" || filter == "events");
         this.showEvals = (filter == "all" || filter == "evals");
 
@@ -1389,13 +1439,13 @@ Firebug.ScriptPanel.prototype = Obj.extend(Firebug.SourceBoxPanel,
 
     optionMenu: function(label, option)
     {
-        var checked = Firebug.Options.get(option);
+        var checked = Options.get(option);
         return {
             label: label, type: "checkbox", checked: checked,
             command: function()
             {
                 var checked = this.hasAttribute("checked");
-                Firebug.Options.set(option, checked);
+                Options.set(option, checked);
             }
         };
     },
@@ -1427,6 +1477,7 @@ Firebug.ScriptPanel.prototype = Obj.extend(Firebug.SourceBoxPanel,
                 {
                     label: "AddWatch",
                     tooltiptext: "watch.tip.Add_Watch",
+                    acceltext: Locale.getFormattedKey(window, "alt", "W"),
                     command: Obj.bind(this.addSelectionWatch, this)
                 }
             );
@@ -1484,35 +1535,35 @@ Firebug.ScriptPanel.prototype = Obj.extend(Firebug.SourceBoxPanel,
                         tooltiptext: "script.tip.Rerun",
                         id: "contextMenuRerun",
                         command: Obj.bindFixed(debuggr.rerun, debuggr, this.context),
-                        acceltext: "Shift+F8"
+                        acceltext: Locale.getFormattedKey(window, "shift", null, "VK_F8")
                     },
                     {
                         label: "script.Continue",
                         tooltiptext: "script.tip.Continue",
                         id: "contextMenuContinue",
                         command: Obj.bindFixed(debuggr.resume, debuggr, this.context),
-                        acceltext: "F8"
+                        acceltext: Locale.getFormattedKey(window, null, null, "VK_F8")
                     },
                     {
                         label: "script.Step_Over",
                         tooltiptext: "script.tip.Step_Over",
                         id: "contextMenuStepOver",
                         command: Obj.bindFixed(debuggr.stepOver, debuggr, this.context),
-                        acceltext: "F10"
+                        acceltext: Locale.getFormattedKey(window, null, null, "VK_F10")
                     },
                     {
                         label: "script.Step_Into",
                         tooltiptext: "script.tip.Step_Into",
                         id: "contextMenuStepInto",
                         command: Obj.bindFixed(debuggr.stepInto, debuggr, this.context),
-                        acceltext: "F11"
+                        acceltext: Locale.getFormattedKey(window, null, null, "VK_F11")
                     },
                     {
                         label: "script.Step_Out",
                         tooltiptext: "script.tip.Step_Out",
                         id: "contextMenuStepOut",
                         command: Obj.bindFixed(debuggr.stepOut, debuggr, this.context),
-                        acceltext: "Shift+F11"
+                        acceltext: Locale.getFormattedKey(window, "shift", null, "VK_F11")
                     },
                     {
                         label: "firebug.RunUntil",
@@ -1819,7 +1870,7 @@ with (Domplate) {
 /**
  * @domplate Displays various warning messages within the Script panel.
  */
-Firebug.ScriptPanel.WarningRep = domplate(Firebug.Rep,
+Firebug.ScriptPanel.WarningRep = domplate(Rep,
 {
     tag:
         DIV({"class": "disabledPanelBox"},
@@ -1845,7 +1896,7 @@ Firebug.ScriptPanel.WarningRep = domplate(Firebug.Rep,
 
     onEnableScript: function(event)
     {
-        Firebug.Options.setPref("javascript", "enabled", true);
+        Options.setPref("javascript", "enabled", true);
 
         Firebug.TabWatcher.reloadPageFromMemory(Firebug.currentContext);
     },
@@ -1965,7 +2016,7 @@ var WarningRep = Firebug.ScriptPanel.WarningRep;
 
 // ********************************************************************************************* //
 
-Firebug.ScriptPanel.BreakpointInfoTip = domplate(Firebug.Rep,
+Firebug.ScriptPanel.BreakpointInfoTip = domplate(Rep,
 {
     tag:
         DIV("$expr"),
diff --git a/content/firebug/js/sourceBox.js b/content/firebug/js/sourceBox.js
index 5be6454..3a20d23 100644
--- a/content/firebug/js/sourceBox.js
+++ b/content/firebug/js/sourceBox.js
@@ -1,6 +1,8 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/activablePanel",
+    "firebug/chrome/measureBox",
     "firebug/lib/object",
     "firebug/firebug",
     "arch/compilationunit",
@@ -10,7 +12,8 @@ define([
     "firebug/lib/dom",
     "firebug/lib/string",
 ],
-function(Obj, Firebug, CompilationUnit, Events, SourceLink, Css, Dom, Str) {
+function(ActivablePanel, MeasureBox, Obj, Firebug, CompilationUnit, Events, SourceLink, Css, Dom,
+    Str) {
 
 // ********************************************************************************************* //
 
@@ -103,7 +106,7 @@ Firebug.SourceBoxDecorator.prototype =
  */
 Firebug.SourceBoxPanel = function() {};
 
-var SourceBoxPanelBase = Obj.extend(Firebug.MeasureBox, Firebug.ActivablePanel);
+var SourceBoxPanelBase = Obj.extend(MeasureBox, ActivablePanel);
 Firebug.SourceBoxPanel = Obj.extend(SourceBoxPanelBase,
 /** @lends Firebug.SourceBoxPanel */
 {
@@ -113,7 +116,7 @@ Firebug.SourceBoxPanel = Obj.extend(SourceBoxPanelBase,
         this.sourceBoxes = {};
         this.decorator = this.getDecorator();
 
-        Firebug.ActivablePanel.initialize.apply(this, arguments);
+        ActivablePanel.initialize.apply(this, arguments);
     },
 
     initializeNode: function(panelNode)
@@ -122,7 +125,7 @@ Firebug.SourceBoxPanel = Obj.extend(SourceBoxPanelBase,
         Events.addEventListener(this.resizeEventTarget, "resize", this.onResize, true);
         this.attachToCache();
 
-        Firebug.ActivablePanel.initializeNode.apply(this, arguments);
+        ActivablePanel.initializeNode.apply(this, arguments);
     },
 
     destroyNode: function()
@@ -140,7 +143,7 @@ Firebug.SourceBoxPanel = Obj.extend(SourceBoxPanelBase,
 
         this.detachFromCache();
 
-        Firebug.ActivablePanel.destroyNode.apply(this, arguments);
+        ActivablePanel.destroyNode.apply(this, arguments);
     },
 
     attachToCache: function()
@@ -246,7 +249,7 @@ Firebug.SourceBoxPanel = Obj.extend(SourceBoxPanelBase,
     disablePanel: function(module)
     {
         this.sourceBoxes = {};  // clear so we start fresh if enabled
-        Firebug.ActivablePanel.disablePanel.apply(this, arguments);
+        ActivablePanel.disablePanel.apply(this, arguments);
     },
 
     getSourceLinesFrom: function(selection)
@@ -392,7 +395,7 @@ Firebug.SourceBoxPanel = Obj.extend(SourceBoxPanelBase,
 
         // then clear it so the next link will scroll and highlight.
         if (sourceLink == this.selection)
-            delete this.selection;
+            this.selection = null;
     },
 
     showSourceBox: function(sourceBox, lineNo)
diff --git a/content/firebug/js/sourceCache.js b/content/firebug/js/sourceCache.js
index 926df09..a1fac60 100644
--- a/content/firebug/js/sourceCache.js
+++ b/content/firebug/js/sourceCache.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/eventSource",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/xpcom",
@@ -8,7 +9,7 @@ define([
     "firebug/lib/http",
     "firebug/lib/string"
 ],
-function(Obj, Firebug, Xpcom, Url, Http, Str) {
+function(EventSource, Obj, Firebug, Xpcom, Url, Http, Str) {
 
 // ********************************************************************************************* //
 // Constants
@@ -40,7 +41,7 @@ Firebug.SourceCache = function(context)
     this.cache = {};
 };
 
-Firebug.SourceCache.prototype = Obj.extend(new Firebug.Listener(),
+Firebug.SourceCache.prototype = Obj.extend(new EventSource(),
 {
     isCached: function(url)
     {
diff --git a/content/firebug/js/tabCache.js b/content/firebug/js/tabCache.js
index 4145afc..1096a8b 100644
--- a/content/firebug/js/tabCache.js
+++ b/content/firebug/js/tabCache.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/activableModule",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/xpcom",
@@ -15,10 +16,11 @@ define([
     "firebug/net/jsonViewer",
     "firebug/trace/traceModule",
     "firebug/trace/traceListener",
+    "firebug/lib/options",
     "firebug/js/sourceCache"
 ],
-function(Obj, Firebug, Xpcom, HttpRequestObserver, HttpResponseObserver, Locale, Events,
-    Url, Http, Str, Win, JSONViewerModel, TraceModule, TraceListener) {
+function(ActivableModule, Obj, Firebug, Xpcom, HttpRequestObserver, HttpResponseObserver, Locale,
+    Events, Url, Http, Str, Win, JSONViewerModel, TraceModule, TraceListener, Options) {
 
 // ********************************************************************************************* //
 // Constants
@@ -28,9 +30,6 @@ const Ci = Components.interfaces;
 
 const ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
 
-// Maximum cached size of a single response (bytes)
-var responseSizeLimit = 1024 * 1024 * 5;
-
 // List of text content types. These content-types are cached.
 var contentTypes =
 {
@@ -86,7 +85,7 @@ var contentTypes =
  * observer, so that HTTP communication can be intercepted and all incoming data stored
  * within a cache.
  */
-Firebug.TabCacheModel = Obj.extend(Firebug.ActivableModule,
+Firebug.TabCacheModel = Obj.extend(ActivableModule,
 {
     dispatchName: "tabCache",
     contentTypes: contentTypes,
@@ -94,7 +93,7 @@ Firebug.TabCacheModel = Obj.extend(Firebug.ActivableModule,
 
     initialize: function()
     {
-        Firebug.ActivableModule.initialize.apply(this, arguments);
+        ActivableModule.initialize.apply(this, arguments);
 
         this.traceListener = new TraceListener("tabCache.", "DBG_CACHE", false);
         TraceModule.addListener(this.traceListener);
@@ -102,16 +101,13 @@ Firebug.TabCacheModel = Obj.extend(Firebug.ActivableModule,
 
     initializeUI: function(owner)
     {
-        Firebug.ActivableModule.initializeUI.apply(this, arguments);
+        ActivableModule.initializeUI.apply(this, arguments);
 
         if (FBTrace.DBG_CACHE)
             FBTrace.sysout("tabCache.initializeUI;");
 
-        // Read maximum size limit for cached response from preferences.
-        responseSizeLimit = Firebug.Options.get("cache.responseLimit");
-
         // Read additional text MIME types from preferences.
-        var mimeTypes = Firebug.Options.get("cache.mimeTypes");
+        var mimeTypes = Options.get("cache.mimeTypes");
         if (mimeTypes)
         {
             var list = mimeTypes.split(" ");
@@ -303,6 +299,10 @@ Firebug.TabCache = function(context)
         FBTrace.sysout("tabCache.TabCache Created for: " + context.getName());
 
     Firebug.SourceCache.call(this, context);
+
+    // Set of HTTP responses (URLs) that has been limited in the cache.
+    // Used by the UI to notify the user.
+    this.limitedResponses = {};
 };
 
 Firebug.TabCache.prototype = Obj.extend(Firebug.SourceCache.prototype,
@@ -347,11 +347,19 @@ Firebug.TabCache.prototype = Obj.extend(Firebug.SourceCache.prototype,
 
         // Size of each response is limited.
         var limitNotReached = true;
+        var responseSizeLimit = Options.get("cache.responseLimit");
         if (response.size + responseText.length >= responseSizeLimit)
         {
             limitNotReached = false;
             responseText = responseText.substr(0, responseSizeLimit - response.size);
-            FBTrace.sysout("tabCache.storePartialResponse Max size limit reached for: " + url);
+
+            this.limitedResponses[url] = true;
+
+            if (FBTrace.DBG_CACHE)
+            {
+                FBTrace.sysout("tabCache.storePartialResponse; Maximum response limit " +
+                    "reached for: " + url);
+            }
         }
 
         response.size += responseText.length;
@@ -364,6 +372,11 @@ Firebug.TabCache.prototype = Obj.extend(Firebug.SourceCache.prototype,
         return limitNotReached;
     },
 
+    isLimited: function(url)
+    {
+        return this.limitedResponses[url];
+    },
+
     getResponse: function(request)
     {
         var url = Http.safeGetRequestName(request);
diff --git a/content/firebug/js/watchPanel.js b/content/firebug/js/watchPanel.js
index 56eafc4..c252ee9 100644
--- a/content/firebug/js/watchPanel.js
+++ b/content/firebug/js/watchPanel.js
@@ -286,7 +286,8 @@ Firebug.WatchPanel.prototype = Obj.extend(Firebug.DOMBasePanel.prototype,
 
         this.context.setTimeout(Obj.bindFixed(function()
         {
-            this.showToolbox(null);
+            var watchRow = this.panelNode.getElementsByClassName("watchRow")[rowIndex];
+            this.showToolbox(watchRow);
         }, this));
     },
 
diff --git a/content/firebug/lib/array.js b/content/firebug/lib/array.js
index fb0d79d..b94c603 100644
--- a/content/firebug/lib/array.js
+++ b/content/firebug/lib/array.js
@@ -15,28 +15,23 @@ var Arr = {};
 // ********************************************************************************************* //
 // Arrays
 
-Arr.isArray = Array.isArray || function(obj)
-{
-    return Object.prototype.toString.call(obj) === "[object Array]";
-};
+Arr.isArray = Array.isArray;
 
 Arr.isArrayLike = function(obj)
 {
     try
     {
-        if (typeof obj !== "object")
+        if (!obj || typeof obj !== "object")
             return false;
         if (!isFinite(obj.length))
             return false;
-        if (Arr.isArray(obj))
-            return true;
-        if (typeof obj.callee === "function") // arguments
+        if (Array.isArray(obj))
             return true;
         if (typeof obj.splice === "function") // jQuery etc.
             return true;
         var str = Object.prototype.toString.call(obj);
         if (str === "[object HTMLCollection]" || str === "[object NodeList]" ||
-            str === "[object DOMTokenList]")
+            str === "[object DOMTokenList]" || str === "[object Arguments]")
         {
             return true;
         }
@@ -170,15 +165,13 @@ Arr.unique = function(ar, sorted)
     }
     else
     {
-        // Keep a map whose ","-prefixed keys represent the values that have
-        // occurred so far in the array (this avoids overwriting e.g. __proto__).
-        var map = {};
+        var set = new Set();
         for (var i = 0; i < len; ++i)
         {
-            if (!map.hasOwnProperty("," + ar[i]))
+            if (!set.has(ar[i]))
             {
                 ret.push(ar[i]);
-                map["," + ar[i]] = 1;
+                set.add(ar[i]);
             }
         }
     }
diff --git a/content/firebug/lib/css.js b/content/firebug/lib/css.js
index d884646..5c690d9 100644
--- a/content/firebug/lib/css.js
+++ b/content/firebug/lib/css.js
@@ -31,32 +31,36 @@ var cssColorNames = null;
 var imageRules = null;
 var domUtils = Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils);
 
-Css.getCSSKeywordsByProperty = function(nodeType, propName, avoid)
+function buildKeywordMap(nodeType)
 {
-    if (!cssKeywordMap[nodeType])
+    if (cssKeywordMap[nodeType])
+        return;
+    cssKeywordMap[nodeType] = {};
+
+    for (var name in Css.cssInfo[nodeType])
     {
-        cssKeywordMap[nodeType] = {};
+        var list = [];
 
-        for (var name in Css.cssInfo[nodeType])
+        var types = Css.cssInfo[nodeType][name];
+        for (var i = 0; i < types.length; ++i)
         {
-            var list = [];
-
-            var types = Css.cssInfo[nodeType][name];
-            for (var i = 0; i < types.length; ++i)
-            {
-                var keywords = Css.cssKeywords[types[i]];
-                if (keywords)
-                    list.push.apply(list, keywords);
-                else
-                    list.push(types[i]);
-            }
-
-            cssKeywordMap[nodeType][name] = list;
+            var keywords = Css.cssKeywords[types[i]];
+            if (keywords)
+                list.push.apply(list, keywords);
+            else
+                list.push(types[i]);
         }
+
+        cssKeywordMap[nodeType][name] = list;
     }
+}
 
+Css.getCSSKeywordsByProperty = function(nodeType, propName, avoid)
+{
     propName = propName.toLowerCase();
 
+    buildKeywordMap(nodeType);
+
     if (avoid)
         return getCSSPropertyKeywordsExcludingCategories(nodeType, propName, avoid);
 
@@ -303,8 +307,11 @@ Css.getElementCSSSelector = function(element)
     if (element.id)
         label += "#" + element.id;
 
-    if (element.classList && element.classList.length > 0)
-        label += "." + element.classList.item(0);
+    if (element.classList)
+    {
+        for (var i=0, len=element.classList.length; i<len; ++i)
+            label += "." + element.classList[i];
+    }
 
     return label;
 };
@@ -1128,7 +1135,7 @@ Css.cssInfo.html =
 
 Css.cssInfo.svg =
 {
-    "alignment-baseline": ["svgAlignmentBaseline"],
+    "alignment-baseline": ["alignmentBaseline"],
     "baseline-shift": ["baselineShift"],
     "clip": ["auto", "length"],
     "clip-path": ["url()", "none"],
@@ -2882,6 +2889,13 @@ Css.nonDeletableTags =
     "BODY": 1, "body": 1
 };
 
+// lib/xml can't depend on lib/svg, so inject the relevant function from here.
+Xml.getPresentationalSVGProperties = function()
+{
+    buildKeywordMap("svg");
+    return cssKeywordMap["svg"];
+};
+
 // ********************************************************************************************* //
 // Registration
 
diff --git a/content/firebug/lib/dom.js b/content/firebug/lib/dom.js
index 954e845..47284ea 100644
--- a/content/firebug/lib/dom.js
+++ b/content/firebug/lib/dom.js
@@ -859,7 +859,7 @@ Dom.getDOMMembers = function(object)
 
     if (object instanceof Window)
         { return domMemberCache.Window; }
-    else if (object instanceof Document || object instanceof XMLDocument)
+    else if (object instanceof Document)
         { return domMemberCache.Document; }
     else if (object instanceof Location)
         { return domMemberCache.Location; }
@@ -901,6 +901,8 @@ Dom.getDOMMembers = function(object)
         { return domMemberCache.Node; }
     else if (object instanceof Event || object instanceof Dom.EventCopy)
         { return domMemberCache.Event; }
+    else if (Array.isArray(object))
+        { return domMemberCache.Array; }
 
     return null;
 };
@@ -1697,6 +1699,7 @@ domMemberMap.Window =
 
     "speechSynthesis",
     "requestAnimationFrame",
+    "cancelAnimationFrame",
 ];
 
 domMemberMap.Location =
@@ -2455,6 +2458,11 @@ domMemberMap.Event =
     "stopPropagation"
 ];
 
+domMemberMap.Array = Object.getOwnPropertyNames(Array.prototype).filter(function(name)
+{
+    return name !== "length";
+});
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 Dom.domConstantMap =
@@ -2753,6 +2761,16 @@ Dom.domInlineEventHandlersMap =
     "onmozpointerlockchange": 1,
     "onmozpointerlockerror": 1,
     "onuserproximity": 1,
+    "ongotpointercapture": 1,
+    "onlostpointercapture": 1,
+    "onpointercancel": 1,
+    "onpointerdown": 1,
+    "onpointerenter": 1,
+    "onpointerleave": 1,
+    "onpointermove": 1,
+    "onpointerout": 1,
+    "onpointerover": 1,
+    "onpointerup": 1,
     "onwheel": 1
 };
 
diff --git a/content/firebug/lib/domplate.js b/content/firebug/lib/domplate.js
index 7692705..f4ed7ff 100644
--- a/content/firebug/lib/domplate.js
+++ b/content/firebug/lib/domplate.js
@@ -240,10 +240,7 @@ DomplateTag.prototype =
             return ' ' + name + '="' + __escape__(value) + '"';
         }
 
-        function isArray(it)
-        {
-            return Object.prototype.toString.call(it) === "[object Array]";
-        }
+        var isArray = Array.isArray;
 
         function __loop__(iter, outputs, fn)
         {
@@ -1049,7 +1046,13 @@ FBL.$break = function()
 
 // ********************************************************************************************* //
 
+/**
+ * @object Domplate Renderer object implements API for template rendering.
+ * Every Domplate template inherits this APIs (through extend API) and should use
+ * them every time it's rendered into DOM.
+ */
 var Renderer =
+/** @lends Renderer */
 {
     renderHTML: function(args, outputs, self)
     {
@@ -1069,7 +1072,16 @@ var Renderer =
         }
     },
 
-    insertRows: function(args, before, self)
+    /**
+     * This method is used when rendering (inserting) table rows into an existing
+     * table (i.e. tbody) element.
+     *
+     * @param {Object} args Template input object (can be null).
+     * @param {Node} after The row after which the new row will be inserted.
+     *      If <tbody> element is passed the new row will be inserted at the end.
+     * @param {Template} self Reference to the template object (can be null).
+     */
+    insertRows: function(args, after, self)
     {
         if (!args)
             args = {};
@@ -1079,21 +1091,22 @@ var Renderer =
         var outputs = [];
         var html = this.renderHTML(args, outputs, self);
 
-        var doc = before.ownerDocument;
+        var doc = after.ownerDocument;
         var table = doc.createElement("table");
         table.innerHTML = html;
 
         var tbody = table.firstChild;
-        var parent = before.localName.toLowerCase() == "tr" ? before.parentNode : before;
-        var after = before.localName.toLowerCase() == "tr" ? before.nextSibling : null;
+        var localName = after.localName.toLowerCase();
+        var parent = (localName == "tr") ? after.parentNode : after;
+        var referenceElement = (localName == "tr") ? after.nextSibling : null;
 
         var firstRow = tbody.firstChild;
         var lastRow = null;
         while (tbody.firstChild)
         {
             lastRow = tbody.firstChild;
-            if (after)
-                parent.insertBefore(lastRow, after);
+            if (referenceElement)
+                parent.insertBefore(lastRow, referenceElement);
             else
                 parent.appendChild(lastRow);
         }
@@ -1111,7 +1124,6 @@ var Renderer =
         //
         // This fails when applied to a non-loop element as non-loop elements
         // do not generate to proper path to bounce up and down the tree.
-        //
         var offset = 0;
         if (this.tag.isLoop)
         {
diff --git a/content/firebug/lib/dragdrop.js b/content/firebug/lib/dragdrop.js
index 9c680f8..5d11fdd 100644
--- a/content/firebug/lib/dragdrop.js
+++ b/content/firebug/lib/dragdrop.js
@@ -2,10 +2,11 @@
 
 define([
     "firebug/lib/object",
-    "firebug/firebug",
     "firebug/lib/events",
 ],
-function(Obj, Firebug, Events) {
+function(Obj, Events) {
+
+"use strict";
 
 // ********************************************************************************************* //
 
@@ -208,7 +209,7 @@ var DragDrop = {};
 DragDrop.Tracker = Tracker;
 
 // ********************************************************************************************* //
-// Registration in Firebug namespace
+// Registration
 
 return DragDrop;
 
diff --git a/content/firebug/lib/events.js b/content/firebug/lib/events.js
index d892b3f..b10a4a6 100644
--- a/content/firebug/lib/events.js
+++ b/content/firebug/lib/events.js
@@ -3,21 +3,23 @@
 
 define([
     "firebug/lib/trace",
-    "firebug/lib/xpcom",
-    "firebug/lib/wrapper" // dependency will go away with jsd2
+    "firebug/lib/xpcom"
 ],
-function(FBTrace, Xpcom, Wrapper) {
+function(FBTrace, Xpcom) {
+
 "use strict";
 
 // ********************************************************************************************* //
 // Constants
 
-const Cu = Components.utils;
-const Ci = Components.interfaces;
+var Cu = Components.utils;
+
 var elService = Xpcom.CCSV("@mozilla.org/eventlistenerservice;1", "nsIEventListenerService");
-var Events = {};
 
 // ********************************************************************************************* //
+// Implementation
+
+var Events = {};
 
 Events.dispatch = function(listeners, name, args)
 {
@@ -320,18 +322,6 @@ const eventTypes =
         "DOMFocusOut"
     ],
 
-    // xxxHonza: As Simon says, XUL events must die!
-    /*xul: [
-        "popupshowing",
-        "popupshown",
-        "popuphiding",
-        "popuphidden",
-        "close",
-        "command",
-        "broadcast",
-        "commandupdate"
-    ],*/
-
     clipboard: [
         "cut",
         "copy",
@@ -425,6 +415,87 @@ Events.detachFamilyListeners = function(family, object, listener)
         object.removeEventListener(types[i], listener, false);
 };
 
+// Table of non-bubbling event types. It's mostly okay if this gets slightly out
+// of date - most event types that don't bubble are only listened to on child
+// nodes, and therefore won't incorrectly appear in any UI.
+var nonBubbling = {
+    abort: 1,
+    begin: 1,
+    beginEvent: 1,
+    blur: 1,
+    canplay: 1,
+    canplaythrough: 1,
+    durationchange: 1,
+    emptied: 1,
+    end: 1,
+    ended: 1,
+    endEvent: 1,
+    error: 1,
+    focus: 1,
+    invalid: 1,
+    load: 1,
+    loadeddata: 1,
+    loadedmetadata: 1,
+    loadend: 1,
+    loadstart: 1,
+    mouseenter: 1,
+    mouseleave: 1,
+    pagehide: 1,
+    pageshow: 1,
+    pause: 1,
+    play: 1,
+    playing: 1,
+    progress: 1,
+    ratechange: 1,
+    readystatechange: 1,
+    repeat: 1,
+    repeatEvent: 1,
+    scroll: 1,
+    seeked: 1,
+    seeking: 1,
+    select: 1,
+    show: 1,
+    stalled: 1,
+    suspend: 1,
+    SVGLoad: 1,
+    SVGUnload: 1,
+    timeupdate: 1,
+    volumechange: 1,
+    waiting: 1,
+};
+
+// Return true if a type of DOM event bubbles.
+Events.eventTypeBubbles = function(type)
+{
+    // N.B.: Technically "scroll" is a special case here, since it only bubbles
+    // from document to window. But since we are only interested in elements we
+    // can ignore that.
+    return !nonBubbling.hasOwnProperty(type);
+};
+
+// Regex for event types that bubble from elements to document and window.
+// It's okay if this gets slightly out of date - it would only imply that some
+// event types in the event panel aren't listed on the nodes but as part of
+// "document" or "window" instead.
+var reBubblesToDocument = new RegExp("^(" +
+    "animation(start|end|iteration)|" +
+    "transitionend|" +
+    "click|dblclick|wheel|mouse(down|up|move)|" +
+    "composition(start|end|update)|" +
+    "keydown|keypress|keyup|input|contextmenu|" +
+    "DOM(AttrModified|NodeRemoved|NodeRemovedFromDocument|SubtreeModified|" +
+        "CharacterDataModified|NodeInserted|NodeInsertedIntoDocument)|" +
+    "drag(|end|enter|leave|over|start)|" +
+    "drop|copy|cut|paste|" +
+    "touch(cancel|enter|leave|move|start)" +
+")$");
+
+// Return true iff a type of event can bubble up from nodes to document and window.
+Events.eventTypeBubblesToDocument = function(type)
+{
+    return reBubblesToDocument.test(type);
+};
+
 // ********************************************************************************************* //
 // Event Listeners (+ support for tracking)
 
@@ -456,7 +527,7 @@ Events.addEventListener = function(parent, eventId, listener, capturing)
 
         frames.shift();
 
-        var pid = (parent.location ? parent.location + "" : typeof parent);
+        var pid = (parent && parent.location ? String(parent.location) : typeof parent);
 
         listeners.push({
             parentId: pid,
@@ -518,36 +589,31 @@ Events.getEventListenersForTarget = function(target)
 {
     var listeners = elService.getListenerInfoFor(target, {});
     var ret = [];
-    for (var i = 0; i < listeners.length; ++i)
+    for (var i = 0; i < listeners.length; i++)
     {
         var rawListener = listeners[i];
         var listener = {
             type: rawListener.type,
+            func: rawListener.listenerObject,
             capturing: rawListener.capturing,
             allowsUntrusted: rawListener.allowsUntrusted,
-            func: null
+            target: target,
         };
-        if ("listenerObject" in rawListener)
-        {
-            listener.func = rawListener.listenerObject;
-        }
-        else
-        {
-            var debugObject = rawListener.getDebugObject();
-            listener.func = (debugObject instanceof Ci.jsdIValue && Wrapper.unwrapIValue(debugObject));
-        }
 
         // Skip chrome event listeners.
         if (!listener.func || rawListener.inSystemEventGroup)
             continue;
+
         var funcGlobal = Cu.getGlobalForObject(listener.func);
         if (!(funcGlobal instanceof Window))
             continue;
+
         if (funcGlobal.document.nodePrincipal.subsumes(document.nodePrincipal))
             continue;
 
         ret.push(listener);
     }
+
     return ret;
 };
 
diff --git a/content/firebug/lib/fonts.js b/content/firebug/lib/fonts.js
index 0615e60..7ecd665 100644
--- a/content/firebug/lib/fonts.js
+++ b/content/firebug/lib/fonts.js
@@ -7,6 +7,8 @@ define([
 ],
 function(FBTrace, Dom, Url) {
 
+"use strict";
+
 // ********************************************************************************************* //
 // Constants
 
diff --git a/content/firebug/lib/http.js b/content/firebug/lib/http.js
index 4715f0a..5675f92 100644
--- a/content/firebug/lib/http.js
+++ b/content/firebug/lib/http.js
@@ -9,6 +9,8 @@ define([
 ],
 function(Xpcom, FBTrace, Deprecated, StackFrame, Str) {
 
+"use strict";
+
 // ********************************************************************************************* //
 // Constants
 
diff --git a/content/firebug/lib/json.js b/content/firebug/lib/json.js
index c7df225..c81ad32 100644
--- a/content/firebug/lib/json.js
+++ b/content/firebug/lib/json.js
@@ -1,10 +1,13 @@
 /* See license.txt for terms of usage */
+/*global define:1*/
 
 define([
     "firebug/lib/trace"
 ],
 function(FBTrace) {
 
+"use strict";
+
 // ********************************************************************************************* //
 // Constants
 
@@ -15,81 +18,191 @@ var Json = {};
 
 Json.parseJSONString = function(jsonString, originURL)
 {
+    var regex, matches;
     if (FBTrace.DBG_JSONVIEWER)
         FBTrace.sysout("jsonviewer.parseJSON; " + jsonString);
 
-    // See if this is a Prototype style *-secure request.
-    var regex = new RegExp(/\s*\/\*-secure-([\s\S]*)\*\/\s*$/);
-    var matches = regex.exec(jsonString);
-
-    if (matches)
+    var first = firstNonWs(jsonString);
+    if (first !== "[" && first !== "{")
     {
-        jsonString = matches[1];
+        // This (probably) isn't pure JSON. Let's try to strip various sorts
+        // of XSSI protection/wrapping and see if that works better.
+
+        // Prototype-style secure requests
+        regex = /^\s*\/\*-secure-([\s\S]*)\*\/\s*$/;
+        matches = regex.exec(jsonString);
+        if (matches)
+        {
+            jsonString = matches[1];
 
-        if (jsonString[0] == "\\" && jsonString[1] == "n")
-            jsonString = jsonString.substr(2);
+            if (jsonString[0] === "\\" && jsonString[1] === "n")
+                jsonString = jsonString.substr(2);
 
-        if (jsonString[jsonString.length-2] == "\\" && jsonString[jsonString.length-1] == "n")
-            jsonString = jsonString.substr(0, jsonString.length-2);
-    }
+            if (jsonString[jsonString.length-2] === "\\" && jsonString[jsonString.length-1] === "n")
+                jsonString = jsonString.substr(0, jsonString.length-2);
+        }
 
-    if (jsonString.indexOf("&&&START&&&"))
-    {
-        regex = new RegExp(/&&&START&&& (.+) &&&END&&&/);
+        // Google-style (?) delimiters
+        if (jsonString.indexOf("&&&START&&&") !== -1)
+        {
+            regex = /&&&START&&&([\s\S]*)&&&END&&&/;
+            matches = regex.exec(jsonString);
+            if (matches)
+                jsonString = matches[1];
+        }
+
+        // while(1);, for(;;);, and )]}'
+        regex = /^\s*(\)\]\}[^\n]*\n|while\s*\(1\);|for\s*\(;;\);)([\s\S]*)/;
         matches = regex.exec(jsonString);
         if (matches)
-            jsonString = matches[1];
+            jsonString = matches[2];
+
+        // JSONP
+        regex = /^\s*([A-Za-z0-9_$.]+\s*(?:\[.*\]|))\s*\(([\s\S]*)\)/;
+        matches = regex.exec(jsonString);
+        if (matches)
+            jsonString = matches[2];
     }
 
     try
     {
-        var s = Components.utils.Sandbox(originURL);
-
-        // throw on the extra parentheses
-        return Components.utils.evalInSandbox("(" + jsonString + ")", s);
-    }
-    catch(e)
-    {
-        if (FBTrace.DBG_JSONVIEWER)
-            FBTrace.sysout("jsonviewer.parseJSON FAILS on "+originURL+" for \""+jsonString+
-                "\" with EXCEPTION "+e, e);
+        return JSON.parse(jsonString);
     }
+    catch (exc) {}
 
-    // Let's try to parse it as JSONP.
-    var reJSONP = /^\s*([A-Za-z0-9_.]+\s*(?:\[.*\]|))\s*\(.*\)/;
-    var m = reJSONP.exec(jsonString);
-    if (!m || !m[1])
+    // Give up if we don't have valid start, to avoid some unnecessary overhead.
+    first = firstNonWs(jsonString);
+    if (first !== "[" && first !== "{" && isNaN(first) && first !== '"')
         return null;
 
-    if (FBTrace.DBG_JSONVIEWER)
-        FBTrace.sysout("jsonviewer.parseJSONP; " + jsonString);
-
-    var callbackName = m[1];
-
-    if (FBTrace.DBG_JSONVIEWER)
-        FBTrace.sysout("jsonviewer.parseJSONP; Look like we have a JSONP callback: " + callbackName);
-
-    // Replace the original callback (it can be e.g. foo.bar[1]) with simple function name.
-    jsonString = jsonString.replace(callbackName, "callback");
+    // Remove JavaScript comments, quote non-quoted identifiers, and merge
+    // multi-line structures like |{"a": 1} \n {"b": 2}| into a single JSON
+    // object [{"a": 1}, {"b": 2}].
+    jsonString = pseudoJsonToJson(jsonString);
 
     try
     {
-        var s = Components.utils.Sandbox(originURL);
-        s["callback"] = function(object) { return object; };
-        return Components.utils.evalInSandbox(jsonString, s);
+        return JSON.parse(jsonString);
     }
-    catch(ex)
+    catch (exc)
     {
         if (FBTrace.DBG_JSONVIEWER)
-            FBTrace.sysout("jsonviewer.parseJSON EXCEPTION", e);
+        {
+            FBTrace.sysout("jsonviewer.parseJSON FAILS on "+originURL+" with EXCEPTION " + exc,
+                {e: exc, json: jsonString});
+        }
     }
 
     return null;
 };
 
-Json.parseJSONPString = function(jsonString, originURL)
+function firstNonWs(str)
 {
-};
+    for (var i = 0, len = str.length; i < len; i++)
+    {
+        var ch = str[i];
+        if (ch !== " " && ch !== "\n" && ch !== "\t" && ch !== "\r")
+            return ch;
+    }
+    return "";
+}
+
+function pseudoJsonToJson(json)
+{
+    var ret = "";
+    var at = 0, lasti = 0, lastch = "", hasMultipleParts = false;
+    for (var i = 0, len = json.length; i < len; ++i)
+    {
+        var ch = json[i];
+        if (/\s/.test(ch))
+            continue;
+
+        if (ch === '"')
+        {
+            // Consume a string.
+            ++i;
+            while (i < len)
+            {
+                if (json[i] === "\\")
+                    ++i;
+                else if (json[i] === '"')
+                    break;
+                ++i;
+            }
+        }
+        else if (ch === "'")
+        {
+            // Convert an invalid string into a valid one.
+            ret += json.slice(at, i) + "\"";
+            at = i + 1;
+            ++i;
+            while (i < len)
+            {
+                if (json[i] === "\\")
+                    ++i;
+                else if (json[i] === "'")
+                    break;
+                ++i;
+            }
+            if (i < len)
+            {
+                ret += json.slice(at, i) + "\"";
+                at = i + 1;
+            }
+        }
+        else if ((ch === "[" || ch === "{") && (lastch === "]" || lastch === "}"))
+        {
+            // Multiple JSON messages in one... Make it into a single array by
+            // inserting a comma and setting the "multiple parts" flag.
+            ret += json.slice(at, i) + ",";
+            hasMultipleParts = true;
+            at = i;
+        }
+        else if (lastch === "," && (ch === "]" || ch === "}"))
+        {
+            // Trailing commas in arrays/objects.
+            ret += json.slice(at, lasti);
+            at = i;
+        }
+        else if (lastch === "/" && lasti === i-1)
+        {
+            // Some kind of comment; remove it.
+            if (ch === "/")
+            {
+
+                ret += json.slice(at, i-1);
+                at = i + json.slice(i).search(/\n|\r|$/);
+                i = at - 1;
+            }
+            else if (ch === "*")
+            {
+                ret += json.slice(at, i-1);
+                at = json.indexOf("*/", i+1) + 2;
+                if (at === 1)
+                    at = len;
+                i = at - 1;
+            }
+            ch = "\0";
+        }
+        else if (/[a-zA-Z$_]/.test(ch) && lastch !== ":")
+        {
+            // Non-quoted identifier. Quote it.
+            ret += json.slice(at, i) + "\"";
+            at = i;
+            i = i + json.slice(i).search(/[^a-zA-Z0-9$_]|$/);
+            ret += json.slice(at, i) + "\"";
+            at = i;
+        }
+
+        lastch = ch;
+        lasti = i;
+    }
+
+    ret += json.slice(at);
+    if (hasMultipleParts)
+        ret = "[" + ret + "]";
+    return ret;
+}
 
 // ********************************************************************************************* //
 
diff --git a/content/firebug/lib/keywords.js b/content/firebug/lib/keywords.js
index 59f7807..63a5fb0 100644
--- a/content/firebug/lib/keywords.js
+++ b/content/firebug/lib/keywords.js
@@ -5,12 +5,14 @@ define([
 ],
 function(FBTrace) {
 
+"use strict";
+
 // ********************************************************************************************* //
 // Debug APIs
 
 var Keywords = {};
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 // JavaScript Parsing
 
 Keywords.jsKeywords =
diff --git a/content/firebug/lib/locale.js b/content/firebug/lib/locale.js
index 472a2ed..42bfab4 100644
--- a/content/firebug/lib/locale.js
+++ b/content/firebug/lib/locale.js
@@ -1,13 +1,16 @@
 /* See license.txt for terms of usage */
 
-define([], function() {
+define([
+],
+function() {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Module
 
 // The entire localization support is implemented as a Mozilla Module so that it can be
 // used before Firebug is fully loaded.
-
 return Components.utils["import"]("resource://firebug/locale.js").Locale;
 
 // ********************************************************************************************* //
diff --git a/content/firebug/lib/object.js b/content/firebug/lib/object.js
index 8b3ccd2..df4bd67 100644
--- a/content/firebug/lib/object.js
+++ b/content/firebug/lib/object.js
@@ -8,6 +8,8 @@ define([
 ],
 function(FBTrace, Xpcom, Arr, Str) {
 
+"use strict";
+
 // ********************************************************************************************* //
 // Constants
 
@@ -43,8 +45,16 @@ Obj.extend = function()
     var newOb = {};
     for (var i = 0, len = arguments.length; i < len; ++i)
     {
-        for (var prop in arguments[i])
-            newOb[prop] = arguments[i][prop];
+        var ob = arguments[i];
+        for (var prop in ob)
+        {
+            // Use property descriptor to clone also getters and setters.
+            var pd = Object.getOwnPropertyDescriptor(ob, prop);
+            if (pd)
+                Object.defineProperty(newOb, prop, pd);
+            else
+                newOb[prop] = ob[prop];
+        }
     }
 
     return newOb;
@@ -111,6 +121,7 @@ Obj.hasProperties = function(ob, nonEnumProps, ownPropsOnly)
             return false;
         }
 
+        var props;
         if (nonEnumProps)
             props = Object.getOwnPropertyNames(ob);
         else
diff --git a/content/firebug/lib/options.js b/content/firebug/lib/options.js
index 172faed..e7c63aa 100644
--- a/content/firebug/lib/options.js
+++ b/content/firebug/lib/options.js
@@ -4,7 +4,9 @@ define([
     "firebug/lib/events",
     "firebug/lib/trace"
 ],
-function factoryOptions(Events, FBTrace) {
+function (Events, FBTrace) {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
diff --git a/content/firebug/lib/persist.js b/content/firebug/lib/persist.js
index 8539c1a..54047b6 100644
--- a/content/firebug/lib/persist.js
+++ b/content/firebug/lib/persist.js
@@ -5,6 +5,8 @@ define([
 ],
 function(FBTrace) {
 
+"use strict";
+
 // ********************************************************************************************* //
 // Constants
 
@@ -80,23 +82,23 @@ Persist.restoreSelection = function(panel, panelState)
     if (!panel.selection)  // Couldn't restore the selection, so select the default object
         panel.select(null);
 
-    if (needRetry)
+    function overrideDefaultWithPersistedSelection()
     {
-        function overrideDefaultWithPersistedSelection()
+        if (panel.selection == panel.getDefaultSelection() && panelState.persistedSelection)
         {
-            if (panel.selection == panel.getDefaultSelection() && panelState.persistedSelection)
-            {
-                var selection = panelState.persistedSelection(panel.context);
-                if (selection)
-                    panel.select(selection);
-            }
-
-            if (FBTrace.DBG_INITIALIZE)
-                FBTrace.sysout("lib.overrideDefaultsWithPersistedValues "+panel.name+
-                    " panel.location: "+panel.location+" panel.selection: "+panel.selection+
-                    " panelState:", panelState);
+            var selection = panelState.persistedSelection(panel.context);
+            if (selection)
+                panel.select(selection);
         }
 
+        if (FBTrace.DBG_INITIALIZE)
+            FBTrace.sysout("lib.overrideDefaultsWithPersistedValues "+panel.name+
+                " panel.location: "+panel.location+" panel.selection: "+panel.selection+
+                " panelState:", panelState);
+    }
+
+    if (needRetry)
+    {
         // If we couldn't restore the selection, wait a bit and try again
         panel.context.setTimeout(overrideDefaultWithPersistedSelection,
             overrideDefaultsWithPersistedValuesTimeout);
diff --git a/content/firebug/lib/search.js b/content/firebug/lib/search.js
index 2bee814..c180c64 100644
--- a/content/firebug/lib/search.js
+++ b/content/firebug/lib/search.js
@@ -6,6 +6,8 @@ define([
 ],
 function(FBTrace, Options) {
 
+"use strict";
+
 // ********************************************************************************************* //
 // Constants
 
@@ -342,6 +344,16 @@ Search.ReversibleRegExp = function(regex, flags)
         }
         return ret;
     };
+
+    this.fakeMatch = function(text, reverse, caseSensitive)
+    {
+        var ret = [text];
+        ret.index = 0;
+        ret.input = text;
+        ret.reverse = reverse;
+        ret.caseSensitive = caseSensitive;
+        return ret;
+    };
 };
 
 return Search;
diff --git a/content/firebug/lib/string.js b/content/firebug/lib/string.js
index 488383f..215172f 100644
--- a/content/firebug/lib/string.js
+++ b/content/firebug/lib/string.js
@@ -4,9 +4,12 @@ define([
     "firebug/lib/trace",
     "firebug/lib/options",
     "firebug/lib/deprecated",
-    "firebug/lib/xpcom"
+    "firebug/lib/xpcom",
+    "firebug/lib/system",
 ],
-function(FBTrace, Options, Deprecated, Xpcom) {
+function(FBTrace, Options, Deprecated, Xpcom, System) {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
@@ -424,7 +427,7 @@ Str.cropString = function(text, limit, alterText)
         alterText = "...";
 
     // Make sure it's a string.
-    text = text + "";
+    text = String(text);
 
     // Use default limit if necessary.
     if (!limit)
@@ -449,7 +452,7 @@ Str.cropStringEx = function(text, limit, alterText, pivot)
         alterText = "...";
 
     // Make sure it's a string.
-    text = text + "";
+    text = String(text);
 
     // Use default limit if necessary.
     if (!limit)
@@ -491,10 +494,10 @@ Str.cropStringEx = function(text, limit, alterText, pivot)
 
 Str.lineBreak = function()
 {
-    if (navigator.appVersion.indexOf("Win") != -1)
+    if (System.isWin(window))
         return "\r\n";
 
-    if (navigator.appVersion.indexOf("Mac") != -1)
+    if (System.isMac(window))
         return "\r";
 
     return "\n";
@@ -688,6 +691,8 @@ Str.toFixedLocaleString = function(number, decimals)
     return formattedNumber;
 };
 
+// xxxsz: May be refactored when Firefox implements the ECMAScript Internationalization API
+// See https://bugzil.la/853301
 Str.formatNumber = Deprecated.deprecated("use <number>.toLocaleString() instead",
     function(number) { return number.toLocaleString(); });
 
@@ -853,6 +858,34 @@ Str.formatIP = function(address, port)
     return result;
 };
 
+/**
+ * Capitalizes the first letter of a string or each word in it
+ *
+ * @param {String} string String to format
+ * @param {Boolean} [capitalizeEachWord=false] If true, the first character of each word will be
+ *     transformed to uppercase, otherwise only the very first character of the string
+ * @param {Boolean} [restToLowerCase=true] If true, the rest of the string will be transformed
+ *     to lower case, otherwise it will stay untouched
+ * @returns {String} Converted string
+ */
+Str.capitalize = function(string, capitalizeEachWord, restToLowerCase)
+{
+    function capitalizeFirstLetter(string)
+    {
+        var rest = string.slice(1);
+
+        if (restToLowerCase !== false)
+            rest = rest.toLowerCase();
+
+        return string.charAt(0).toUpperCase() + rest;
+    }
+
+    if (!capitalizeEachWord)
+        return capitalizeFirstLetter(string, restToLowerCase);
+
+    return string.split(" ").map(capitalizeFirstLetter).join(" ");
+};
+
 // ********************************************************************************************* //
 // Conversions
 
diff --git a/content/firebug/lib/system.js b/content/firebug/lib/system.js
index df46848..d8dedaa 100644
--- a/content/firebug/lib/system.js
+++ b/content/firebug/lib/system.js
@@ -8,11 +8,14 @@ define([
 ],
 function(FBTrace, Arr, Debug, Xpcom) {
 
+"use strict";
+
 // ********************************************************************************************* //
 // Constants
 
 var Ci = Components.interfaces;
 var Cc = Components.classes;
+var Cu = Components.utils;
 
 var ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
 
@@ -139,6 +142,19 @@ System.getStringDataFromClipboard = function()
 };
 
 // ********************************************************************************************* //
+// OS Checkers
+
+System.isMac = function(win)
+{
+    return win.navigator.platform.search("Mac") != -1;
+}
+
+System.isWin = function(win)
+{
+    return win.navigator.platform.search("Win") != -1;
+}
+
+// ********************************************************************************************* //
 // Firebug Version Comparator
 
 /**
@@ -169,6 +185,37 @@ System.checkFirebugVersion = function(expectedVersion)
 };
 
 // ********************************************************************************************* //
+// JS Modules
+
+/**
+ * Allows importing a JS module (Firefox platform) and specify alternative locations
+ * to keep backward compatibility in case when the module location changes.
+ * It helps Firebug to support multiple Firefox versions.
+ *
+ * @param {Array} locations List of URLs to try when importing the module.
+ * @returns Scope of the imported module or an empty scope if module wasn't successfully loaded.
+ */
+System.importModule = function(locations)
+{
+    for (var i=0; i<locations.length; i++)
+    {
+        try
+        {
+            var moduleUrl = locations[i];
+            var scope = {};
+            Cu["import"](moduleUrl, scope);
+            return scope;
+        }
+        catch (err)
+        {
+        }
+    }
+
+    // Module wasn't loaded return an empty scope.
+    return {};
+};
+
+// ********************************************************************************************* //
 
 return System;
 
diff --git a/content/firebug/lib/tool.js b/content/firebug/lib/tool.js
index 07c1aaf..e9cbb00 100644
--- a/content/firebug/lib/tool.js
+++ b/content/firebug/lib/tool.js
@@ -4,7 +4,10 @@ define([
 ],
 function() {
 
+"use strict";
+
 // ********************************************************************************************* //
+// Implementation
 
 var FirebugTool = function(name)
 {
@@ -27,7 +30,9 @@ FirebugTool.prototype =
         this.active = !!active;
     }
 };
+
 // ********************************************************************************************* //
+// Registration
 
 return FirebugTool;
 
diff --git a/content/firebug/lib/trace.js b/content/firebug/lib/trace.js
index da1735f..cf54d01 100644
--- a/content/firebug/lib/trace.js
+++ b/content/firebug/lib/trace.js
@@ -1,14 +1,21 @@
 /* See license.txt for terms of usage */
 
-define([], function() {
+define([
+],
+function() {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
 
 const Cu = Components.utils;
 
-var scope = {};
-Cu["import"]("resource://firebug/fbtrace.js", scope);
+var fbTraceScope = {};
+Cu["import"]("resource://firebug/fbtrace.js", fbTraceScope);
+
+var prefLoaderScope = {};
+Cu["import"]("resource://firebug/prefLoader.js", prefLoaderScope);
 
 //xxxHonza: duplicated from modules/firebug-trace-service.js
 var TraceAPI = ["dump", "sysout", "setScope", "matchesNode", "time", "timeEnd"];
@@ -39,26 +46,46 @@ function TraceWrapper(tracer, option)
         var method = TraceAPI[i];
         this[method] = createMethodWrapper(method);
     }
+
+    /**
+     * Use to check whether scoped tracer is on/off.
+     */
+    this.__defineGetter__("active", function()
+    {
+        return tracer[option];
+    });
 }
 
 // ********************************************************************************************* //
+// Scoped Logging
 
-var tracer = scope.FBTrace;
+var tracer = fbTraceScope.FBTrace;
 
 /**
  * Support for scoped logging.
  * 
- * Example:
- * FBTrace = FBTrace.to("DBG_NET");
- * 
- * // This log will be displayed only if DBG_NET option is on
- * FBTrace.sysout("net.initialiaze");
+ * // The log will be displayed only if DBG_MYMODULE option is on. 'DBG_MYMODULE' preference
+ * // will be automatically created and appear in the FBTrace console (after restart).
+ * FBTrace = FBTrace.to("DBG_MYMODULE");
+ * FBTrace.sysout("mymodule.initialiaze");
  */
 tracer.to = function(option)
 {
+    // Automatically create corresponding DBG_ + <option> preference so, it appears
+    // in the FBTrace Console window and can be checked on/off
+    // Note that FBTrace Console is already initialized and do not refresh if a new
+    // pref is created. So, the option appears after restart.
+    // xxxHonza: FIX ME
+    var value = prefLoaderScope.PrefLoader.getPref(option);
+    if (typeof(value) != "boolean")
+        prefLoaderScope.PrefLoader.setPref(option, false);
+
     return new TraceWrapper(this, option);
 };
 
+// ********************************************************************************************* //
+// Registration
+
 return tracer;
 
 // ********************************************************************************************* //
diff --git a/content/firebug/lib/url.js b/content/firebug/lib/url.js
index 3176615..b5a98b7 100644
--- a/content/firebug/lib/url.js
+++ b/content/firebug/lib/url.js
@@ -6,6 +6,8 @@ define([
 ],
 function (FBTrace, Str) {
 
+"use strict";
+
 // ********************************************************************************************* //
 // Constants
 
diff --git a/content/firebug/lib/wrapper.js b/content/firebug/lib/wrapper.js
index 7a3d327..12bf2f6 100644
--- a/content/firebug/lib/wrapper.js
+++ b/content/firebug/lib/wrapper.js
@@ -1,6 +1,10 @@
 /* See license.txt for terms of usage */
 
-define([], function() {
+define([
+],
+function() {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
@@ -104,7 +108,9 @@ Wrapper.unwrapIValueObject = function(scope, viewChrome)
  */
 Wrapper.cloneIntoContentScope = function(global, obj)
 {
-    var newObj = Cu.createObjectIn(global);
+    if (!obj || typeof obj !== "object")
+        return obj;
+    var newObj = (Array.isArray(obj) ? Cu.createArrayIn(global) : Cu.createObjectIn(global));
     for (var prop in obj)
     {
         var desc = Object.getOwnPropertyDescriptor(obj, prop);
@@ -123,21 +129,9 @@ Wrapper.cloneIntoContentScope = function(global, obj)
 
 Wrapper.ignoreVars =
 {
-    // We are forced to ignore Java-related variables, because
-    // trying to access them causes browser freeze
-    "sun": 1,
-    "Packages": 1,
-    "JavaArray": 1,
-    "JavaMember": 1,
-    "JavaObject": 1,
-    "JavaClass": 1,
-    "JavaPackage": 1,
-
     // internal firebug things XXXjjb todo we should privatize these
     "_firebug": 1,
-    "_firebugUnwrappedDebuggerObject": 1,
     "__fb_scopedVars": 1,
-    "_FirebugCommandLine": 1,
 };
 
 Wrapper.shouldIgnore = function(name)
@@ -151,6 +145,7 @@ function isPrimitive(obj)
 }
 
 // ********************************************************************************************* //
+// Registration
 
 return Wrapper;
 
diff --git a/content/firebug/lib/xml.js b/content/firebug/lib/xml.js
index ccc757c..a52ff70 100644
--- a/content/firebug/lib/xml.js
+++ b/content/firebug/lib/xml.js
@@ -2,9 +2,12 @@
 
 define([
     "firebug/lib/trace",
-    "firebug/lib/string"
+    "firebug/lib/string",
+    "firebug/editor/codemirror/html-hint-data",
 ],
-function(FBTrace, Str) {
+function(FBTrace, Str, HtmlData) {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
@@ -14,6 +17,294 @@ var Cc = Components.classes;
 
 var Xml = {};
 
+// ********************************************************************************************* //
+// Tag and attribute data
+
+var tagAttributes = {};
+var tagAttributesMap = {};
+var commonAttributes = {};
+var commonAttributesMap = {};
+
+// Set up HTML attributes from the CodeMirror data
+commonAttributesMap.html = HtmlData.globalAttributes;
+commonAttributes.html = Object.keys(commonAttributesMap.html).sort();
+tagAttributesMap.html = {};
+tagAttributes.html = {};
+for (var tag in HtmlData.specificAttributes)
+{
+    var attrs = HtmlData.specificAttributes[tag].attrs;
+    tagAttributesMap.html[tag] = attrs;
+    tagAttributes.html[tag] = Object.keys(attrs).sort();
+}
+
+// SVG data, taken from: http://www.w3.org/TR/SVG/attindex.html
+// and removing attributes unimplemented in Firefox, going by the commented-out lines in:
+// http://dxr.mozilla.org/mozilla-central/source/content/base/src/nsTreeSanitizer.cpp
+// (Up to date as of Firefox 27, but it doesn't seem to change much.)
+
+tagAttributes.svg =
+{
+    "a": ["class", "externalResourcesRequired", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "style", "systemLanguage", "target", "transform", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space"],
+    "altGlyph": ["class", "dx", "dy", "externalResourcesRequired", "format", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "rotate", "style", "systemLanguage", "x", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "y"],
+    "altGlyphDef": ["id", "xml:base", "xml:lang", "xml:space"],
+    "altGlyphItem": ["id", "xml:base", "xml:lang", "xml:space"],
+    "animate": ["accumulate", "additive", "attributeName", "attributeType", "begin", "by", "calcMode", "dur", "end", "externalResourcesRequired", "fill", "from", "id", "keySplines", "keyTimes", "max", "min", "onbegin", "onend", "onload", "onrepeat", "repeatCount", "repeatDur", "requiredExtensions", "requiredFeatures", "restart", "systemLanguage", "to", "values", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:lang" [...]
+    "animateColor": ["accumulate", "additive", "attributeName", "attributeType", "begin", "by", "calcMode", "dur", "end", "externalResourcesRequired", "fill", "from", "id", "keySplines", "keyTimes", "max", "min", "onbegin", "onend", "onload", "onrepeat", "repeatCount", "repeatDur", "requiredExtensions", "requiredFeatures", "restart", "systemLanguage", "to", "values", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml: [...]
+    "animateMotion": ["accumulate", "additive", "begin", "by", "calcMode", "dur", "end", "externalResourcesRequired", "fill", "from", "id", "keyPoints", "keySplines", "keyTimes", "max", "min", "onbegin", "onend", "onload", "onrepeat", "path", "repeatCount", "repeatDur", "requiredExtensions", "requiredFeatures", "restart", "rotate", "systemLanguage", "to", "values", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:la [...]
+    "animateTransform": ["accumulate", "additive", "attributeName", "attributeType", "begin", "by", "calcMode", "dur", "end", "externalResourcesRequired", "fill", "from", "id", "keySplines", "keyTimes", "max", "min", "onbegin", "onend", "onload", "onrepeat", "repeatCount", "repeatDur", "requiredExtensions", "requiredFeatures", "restart", "systemLanguage", "to", "type", "values", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml: [...]
+    "circle": ["class", "cx", "cy", "externalResourcesRequired", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "r", "requiredExtensions", "requiredFeatures", "style", "systemLanguage", "transform", "xml:base", "xml:lang", "xml:space"],
+    "clipPath": ["class", "clipPathUnits", "externalResourcesRequired", "id", "requiredExtensions", "requiredFeatures", "style", "systemLanguage", "transform", "xml:base", "xml:lang", "xml:space"],
+    "color-profile": ["id", "name", "rendering-intent", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space"],
+    "cursor": ["externalResourcesRequired", "id", "requiredExtensions", "requiredFeatures", "systemLanguage", "x", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "y"],
+    "defs": ["class", "externalResourcesRequired", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "style", "systemLanguage", "transform", "xml:base", "xml:lang", "xml:space"],
+    "desc": ["class", "id", "style", "xml:base", "xml:lang", "xml:space"],
+    "ellipse": ["class", "cx", "cy", "externalResourcesRequired", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "rx", "ry", "style", "systemLanguage", "transform", "xml:base", "xml:lang", "xml:space"],
+    "feBlend": ["class", "height", "id", "in", "in2", "mode", "result", "style", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "feColorMatrix": ["class", "height", "id", "in", "result", "style", "type", "values", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "feComponentTransfer": ["class", "height", "id", "in", "result", "style", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "feComposite": ["class", "height", "id", "in", "in2", "k1", "k2", "k3", "k4", "operator", "result", "style", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "feConvolveMatrix": ["bias", "class", "divisor", "edgeMode", "height", "id", "in", "kernelMatrix", "kernelUnitLength", "order", "preserveAlpha", "result", "style", "targetX", "targetY", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "feDiffuseLighting": ["class", "diffuseConstant", "height", "id", "in", "kernelUnitLength", "result", "style", "surfaceScale", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "feDisplacementMap": ["class", "height", "id", "in", "in2", "result", "scale", "style", "width", "x", "xChannelSelector", "xml:base", "xml:lang", "xml:space", "y", "yChannelSelector"],
+    "feDistantLight": ["azimuth", "elevation", "id", "xml:base", "xml:lang", "xml:space"],
+    "feFlood": ["class", "height", "id", "result", "style", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "feFuncA": ["amplitude", "exponent", "id", "intercept", "offset", "slope", "tableValues", "type", "xml:base", "xml:lang", "xml:space"],
+    "feFuncB": ["amplitude", "exponent", "id", "intercept", "offset", "slope", "tableValues", "type", "xml:base", "xml:lang", "xml:space"],
+    "feFuncG": ["amplitude", "exponent", "id", "intercept", "offset", "slope", "tableValues", "type", "xml:base", "xml:lang", "xml:space"],
+    "feFuncR": ["amplitude", "exponent", "id", "intercept", "offset", "slope", "tableValues", "type", "xml:base", "xml:lang", "xml:space"],
+    "feGaussianBlur": ["class", "height", "id", "in", "result", "stdDeviation", "style", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "feImage": ["class", "externalResourcesRequired", "height", "id", "preserveAspectRatio", "result", "style", "width", "x", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "y"],
+    "feMerge": ["class", "height", "id", "result", "style", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "feMergeNode": ["id", "xml:base", "xml:lang", "xml:space"],
+    "feMorphology": ["class", "height", "id", "in", "operator", "radius", "result", "style", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "feOffset": ["class", "dx", "dy", "height", "id", "in", "result", "style", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "fePointLight": ["id", "x", "xml:base", "xml:lang", "xml:space", "y", "z"],
+    "feSpecularLighting": ["class", "height", "id", "in", "kernelUnitLength", "result", "specularConstant", "specularExponent", "style", "surfaceScale", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "feSpotLight": ["id", "limitingConeAngle", "pointsAtX", "pointsAtY", "pointsAtZ", "specularExponent", "x", "xml:base", "xml:lang", "xml:space", "y", "z"],
+    "feTile": ["class", "height", "id", "in", "result", "style", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "feTurbulence": ["baseFrequency", "class", "height", "id", "numOctaves", "result", "seed", "stitchTiles", "style", "type", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "filter": ["class", "externalResourcesRequired", "filterRes", "filterUnits", "height", "id", "primitiveUnits", "style", "width", "x", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "y"],
+    "font": ["class", "externalResourcesRequired", "id", "style", "xml:base", "xml:lang", "xml:space"],
+    "font-face": ["font-family", "font-size", "font-stretch", "font-style", "font-variant", "font-weight", "hanging", "id", "slope", "xml:base", "xml:lang", "xml:space"],
+    "font-face-format": ["id", "string", "xml:base", "xml:lang", "xml:space"],
+    "font-face-name": ["id", "name", "xml:base", "xml:lang", "xml:space"],
+    "font-face-src": ["id", "xml:base", "xml:lang", "xml:space"],
+    "font-face-uri": ["id", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space"],
+    "foreignObject": ["class", "externalResourcesRequired", "height", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "style", "systemLanguage", "transform", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "g": ["class", "externalResourcesRequired", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "style", "systemLanguage", "transform", "xml:base", "xml:lang", "xml:space"],
+    "glyph": ["class", "d", "id", "lang", "orientation", "style", "xml:base", "xml:lang", "xml:space"],
+    "glyphRef": ["class", "dx", "dy", "format", "id", "style", "x", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "y"],
+    "hkern": ["id", "xml:base", "xml:lang", "xml:space"],
+    "image": ["class", "externalResourcesRequired", "height", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "preserveAspectRatio", "requiredExtensions", "requiredFeatures", "style", "systemLanguage", "transform", "width", "x", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "y"],
+    "linearGradient": ["class", "externalResourcesRequired", "gradientTransform", "gradientUnits", "id", "spreadMethod", "style", "x1", "x2", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "y1", "y2"],
+    "line": ["class", "externalResourcesRequired", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "style", "systemLanguage", "transform", "x1", "x2", "xml:base", "xml:lang", "xml:space", "y1", "y2"],
+    "marker": ["class", "externalResourcesRequired", "id", "markerHeight", "markerUnits", "markerWidth", "orient", "preserveAspectRatio", "refX", "refY", "style", "viewBox", "xml:base", "xml:lang", "xml:space"],
+    "mask": ["class", "externalResourcesRequired", "height", "id", "maskContentUnits", "maskUnits", "requiredExtensions", "requiredFeatures", "style", "systemLanguage", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "metadata": ["id", "xml:base", "xml:lang", "xml:space"],
+    "missing-glyph": ["class", "d", "id", "style", "xml:base", "xml:lang", "xml:space"],
+    "mpath": ["externalResourcesRequired", "id", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space"],
+    "path": ["class", "d", "externalResourcesRequired", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "pathLength", "requiredExtensions", "requiredFeatures", "style", "systemLanguage", "transform", "xml:base", "xml:lang", "xml:space"],
+    "pattern": ["class", "externalResourcesRequired", "height", "id", "patternContentUnits", "patternTransform", "patternUnits", "preserveAspectRatio", "requiredExtensions", "requiredFeatures", "style", "systemLanguage", "viewBox", "width", "x", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "y"],
+    "polygon": ["class", "externalResourcesRequired", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "points", "requiredExtensions", "requiredFeatures", "style", "systemLanguage", "transform", "xml:base", "xml:lang", "xml:space"],
+    "polyline": ["class", "externalResourcesRequired", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "points", "requiredExtensions", "requiredFeatures", "style", "systemLanguage", "transform", "xml:base", "xml:lang", "xml:space"],
+    "radialGradient": ["class", "cx", "cy", "externalResourcesRequired", "fx", "fy", "gradientTransform", "gradientUnits", "id", "r", "spreadMethod", "style", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space"],
+    "rect": ["class", "externalResourcesRequired", "height", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "rx", "ry", "style", "systemLanguage", "transform", "width", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "script": ["externalResourcesRequired", "id", "type", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space"],
+    "set": ["attributeName", "attributeType", "begin", "dur", "end", "externalResourcesRequired", "fill", "id", "max", "min", "onbegin", "onend", "onload", "onrepeat", "repeatCount", "repeatDur", "requiredExtensions", "requiredFeatures", "restart", "systemLanguage", "to", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space"],
+    "stop": ["class", "id", "offset", "style", "xml:base", "xml:lang", "xml:space"],
+    "style": ["id", "media", "title", "type", "xml:base", "xml:lang", "xml:space"],
+    "svg": ["class", "externalResourcesRequired", "height", "id", "onabort", "onactivate", "onclick", "onerror", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onresize", "onscroll", "onunload", "onzoom", "preserveAspectRatio", "requiredExtensions", "requiredFeatures", "style", "systemLanguage", "version", "viewBox", "width", "x", "xml:base", "xml:lang", "xml:space", "y", "zoomAndPan"],
+    "switch": ["class", "externalResourcesRequired", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "style", "systemLanguage", "transform", "xml:base", "xml:lang", "xml:space"],
+    "symbol": ["class", "externalResourcesRequired", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "preserveAspectRatio", "style", "viewBox", "xml:base", "xml:lang", "xml:space"],
+    "text": ["class", "dx", "dy", "externalResourcesRequired", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "rotate", "style", "systemLanguage", "transform", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "textPath": ["class", "externalResourcesRequired", "id", "method", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "spacing", "startOffset", "style", "systemLanguage", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space"],
+    "title": ["class", "id", "style", "xml:base", "xml:lang", "xml:space"],
+    "tref": ["class", "dx", "dy", "externalResourcesRequired", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "rotate", "style", "systemLanguage", "x", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "y"],
+    "tspan": ["class", "dx", "dy", "externalResourcesRequired", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "rotate", "style", "systemLanguage", "x", "xml:base", "xml:lang", "xml:space", "y"],
+    "use": ["class", "externalResourcesRequired", "height", "id", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "style", "systemLanguage", "transform", "width", "x", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "y"],
+    "view": ["externalResourcesRequired", "id", "preserveAspectRatio", "viewBox", "viewTarget", "xml:base", "xml:lang", "xml:space", "zoomAndPan"],
+    "vkern": ["id", "xml:base", "xml:lang", "xml:space"],
+};
+
+tagAttributesMap.svg = {};
+for (var attribute in tagAttributes.svg)
+    tagAttributesMap.svg[attribute] = {};
+
+tagAttributesMap.svg.animateTransform.type = ["translate", "scale", "rotate", "skewX", "skewY"];
+tagAttributesMap.svg.feColorMatrix.type = ["matrix", "saturate", "hueRotate", "luminanceToAlpha"];
+tagAttributesMap.svg.feTurbulence.type = ["fractalNoise", "turbulence"];
+tagAttributesMap.svg.feTurbulence.stitchTiles = ["stitch", "noStitch"];
+tagAttributesMap.svg.feConvolveMatrix.edgeMode = ["duplicate", "wrap", "none"];
+tagAttributesMap.svg.feConvolveMatrix.preserveAlpha = ["false", "true"];
+tagAttributesMap.svg.feComposite.operator = ["over", "in", "out", "atop", "xor", "arithmetic"];
+tagAttributesMap.svg.feMorphology.operator = ["erode", "dilate"];
+tagAttributesMap.svg.feBlend.mode = ["normal", "multiply", "screen", "darken", "lighten"];
+tagAttributesMap.svg.script.type = ["text/javascript", "application/ecmascript"];
+tagAttributesMap.svg.style.type = ["text/css"];
+tagAttributesMap.svg.style.media = tagAttributesMap.html.style.media;
+tagAttributesMap.svg.svg.contentStyleType = ["text/css"];
+tagAttributesMap.svg.svg.contentScriptType = ["text/javascript", "application/ecmascript"];
+tagAttributesMap.svg["font-face"]["font-variant"] = ["normal", "small-caps"];
+tagAttributesMap.svg["font-face"]["font-weight"] = ["all", "normal", "bold",
+    "100", "200", "300", "400", "500", "600", "700", "800", "900"];
+tagAttributesMap.svg["font-face"]["font-stretch"] = ["all", "normal",
+    "semi-condensed", "condensed", "extra-condensed", "ultra-condensed",
+    "semi-expanded", "expanded", "extra-expanded", "ultra-expanded"];
+tagAttributesMap.svg.filter.filterUnits = ["userSpaceOnUse", "objectBoundingBox"];
+tagAttributesMap.svg.filter.primitiveUnits = ["userSpaceOnUse", "objectBoundingBox"];
+tagAttributesMap.svg.glyph["arabic-form"] = ["initial", "medial", "terminal", "isolated"];
+tagAttributesMap.svg.glyph.orientation = ["h", "v"];
+tagAttributesMap.svg.radialGradient.gradientUnits = ["userSpaceOnUse", "objectBoundingBox"];
+tagAttributesMap.svg.linearGradient.gradientUnits = ["userSpaceOnUse", "objectBoundingBox"];
+tagAttributesMap.svg.pattern.patternUnits = ["userSpaceOnUse", "objectBoundingBox"];
+tagAttributesMap.svg.pattern.patternContentUnits = ["userSpaceOnUse", "objectBoundingBox"];
+tagAttributesMap.svg.mask.maskUnits = ["userSpaceOnUse", "objectBoundingBox"];
+tagAttributesMap.svg.mask.maskContentUnits = ["userSpaceOnUse", "objectBoundingBox"];
+tagAttributesMap.svg.marker.markerUnits = ["strokeWidth", "userSpaceOnUse"];
+tagAttributesMap.svg.textPath.method = ["align", "stretch"];
+tagAttributesMap.svg.clipPath.clipPathUnits = ["userSpaceOnUse", "objectBoundingBox"];
+tagAttributesMap.svg["color-profile"]["rendering-intent"] = ["auto", "perceptual",
+    "relative-colorimetric", "saturation", "absolute-colorimetric"];
+tagAttributesMap.svg.feFuncA.type =
+tagAttributesMap.svg.feFuncR.type =
+tagAttributesMap.svg.feFuncG.type =
+tagAttributesMap.svg.feFuncB.type =
+    ["identity", "table", "discrete", "linear", "gamma"];
+
+(function()
+{
+    // Add some attributes values en masse where specifying them for each
+    // tag name would have been annoying.
+    var commonAttributes = {
+        "transform": ["matrix()", "translate()", "scale()", "rotate()", "skewX()", "skewY()"],
+        "in": ["SourceGraphic", "SourceAlpha", "BackgroundImage", "BackgroundAlpha", "FillPaint", "StrokePaint"],
+        "in2": ["SourceGraphic", "SourceAlpha", "BackgroundImage", "BackgroundAlpha", "FillPaint", "StrokePaint"],
+        "externalResourcesRequired": ["true", "false"],
+        "fill": ["freeze", "remove"],
+        "calcMode": ["discrete", "linear", "paced", "spline"],
+        "additive": ["replace", "sum"],
+        "accumulate": ["none", "sum"],
+        "attributeType": ["CSS", "XML", "auto"]
+    };
+    for (var attribute in commonAttributes)
+    {
+        for (var tagName in tagAttributes.svg)
+        {
+            if (tagAttributes.svg[tagName].indexOf(attribute) !== -1)
+            {
+                tagAttributesMap.svg[tagName] = tagAttributesMap.svg[tagName] || {};
+                tagAttributesMap.svg[tagName][attribute] = commonAttributes[attribute];
+            }
+        }
+    }
+})();
+
+commonAttributes.svg = [];
+commonAttributesMap.svg = {};
+
+var presentationalSVG =
+{
+    a: 1,
+    altGlyph: 1,
+    animate: 1,
+    animateColor: 1,
+    circle: 1,
+    clipPath: 1,
+    defs: 1,
+    ellipse: 1,
+    feBlend: 1,
+    feColorMatrix: 1,
+    feComponentTransfer: 1,
+    feComposite: 1,
+    feConvolveMatrix: 1,
+    feDiffuseLighting: 1,
+    feDisplacementMap: 1,
+    feFlood: 1,
+    feGaussianBlur: 1,
+    feImage: 1,
+    feMerge: 1,
+    feMorphology: 1,
+    feOffset: 1,
+    feSpecularLighting: 1,
+    feTile: 1,
+    feTurbulence: 1,
+    filter: 1,
+    font: 1,
+    foreignObject: 1,
+    g: 1,
+    glyph: 1,
+    glyphRef: 1,
+    image: 1,
+    line: 1,
+    linearGradient: 1,
+    marker: 1,
+    mask: 1,
+    "missing-glyph": 1,
+    path: 1,
+    pattern: 1,
+    polygon: 1,
+    polyline: 1,
+    radialGradient: 1,
+    rect: 1,
+    stop: 1,
+    svg: 1,
+    "switch": 1,
+    symbol: 1,
+    text: 1,
+    textPath: 1,
+    tref: 1,
+    tspan: 1,
+    use: 1
+};
+
+Xml.isPresentationalSVG = function(nodeType, tagName)
+{
+    return (nodeType === "svg" && presentationalSVG.hasOwnProperty(tagName));
+};
+
+// Note: Xml.getPresentationalSVGProperties gets injected from lib/css,
+// because we can't have dependency cycles.
+
+Xml.getAttributesForTagName = function(nodeType, tagName)
+{
+    if (!tagAttributes.hasOwnProperty(nodeType))
+        return [];
+
+    var ret = [];
+    if (tagAttributes[nodeType].hasOwnProperty(tagName))
+        ret = ret.concat(tagAttributes[nodeType][tagName]);
+    ret = ret.concat(commonAttributes[nodeType]);
+    if (Xml.isPresentationalSVG(nodeType, tagName) &&
+        Xml.getPresentationalSVGProperties)
+    {
+        var presentational = Xml.getPresentationalSVGProperties();
+        ret = ret.concat(Object.keys(presentational));
+    }
+    return ret;
+};
+
+Xml.getValuesForAttribute = function(nodeType, tagName, attribute)
+{
+    if (!tagAttributes.hasOwnProperty(nodeType))
+        return [];
+
+    if (commonAttributesMap[nodeType].hasOwnProperty(attribute))
+        return commonAttributesMap[nodeType][attribute] || [];
+    if (tagAttributes[nodeType].hasOwnProperty(tagName) &&
+        tagAttributesMap[nodeType][tagName].hasOwnProperty(attribute))
+    {
+        return tagAttributesMap[nodeType][tagName][attribute] || [];
+    }
+    if (Xml.isPresentationalSVG(nodeType, tagName) &&
+        Xml.getPresentationalSVGProperties)
+    {
+        var presentational = Xml.getPresentationalSVGProperties();
+        if (presentational.hasOwnProperty(attribute))
+            return presentational[attribute];
+    }
+    return [];
+};
+
 // ************************************************************************************************
 // HTML and XML Serialization
 
@@ -51,6 +342,11 @@ var isElementXHTML = Xml.isElementXHTML = function(node)
     return node.nodeName != node.nodeName.toUpperCase() && node.namespaceURI == 'http://www.w3.org/1999/xhtml';
 };
 
+var isElementHTMLOrXHTML = Xml.isElementHTMLOrXHTML = function(node)
+{
+    return node.namespaceURI == "http://www.w3.org/1999/xhtml";
+};
+
 var isElementMathML = Xml.isElementMathML = function(node)
 {
     return node.namespaceURI == 'http://www.w3.org/1998/Math/MathML';
@@ -201,7 +497,7 @@ Xml.getElementXML = function(element)
                     continue;
                 }
 
-                xml.push(' ', attr.nodeName, '="', Str.escapeForElementAttribute(attr.nodeValue),'"');
+                xml.push(' ', attr.nodeName, '="', Str.escapeForElementAttribute(attr.value),'"');
             }
 
             if (elt.firstChild)
@@ -289,7 +585,7 @@ Xml.isVisible = function(elt)
 
     try
     {
-        return (!isElementHTML(elt) && !isElementXHTML(elt)) ||
+        return !isElementHTMLOrXHTML(elt) ||
             elt.offsetWidth > 0 ||
             elt.offsetHeight > 0 ||
             elt.localName in invisibleTags;
@@ -341,6 +637,7 @@ var invisibleTags = Xml.invisibleTags =
 };
 
 // ********************************************************************************************* //
+// Registration
 
 return Xml;
 
diff --git a/content/firebug/lib/xpath.js b/content/firebug/lib/xpath.js
index 8a35419..6f69528 100644
--- a/content/firebug/lib/xpath.js
+++ b/content/firebug/lib/xpath.js
@@ -5,6 +5,8 @@ define([
 ],
 function(Str) {
 
+"use strict";
+
 // ********************************************************************************************* //
 // Constants
 
@@ -237,6 +239,7 @@ Xpath.getRuleMatchingElements = function(rule, doc)
 };
 
 // ********************************************************************************************* //
+// Registration
 
 return Xpath;
 
diff --git a/content/firebug/lib/xpcom.js b/content/firebug/lib/xpcom.js
index 472ea3f..d94dc0c 100644
--- a/content/firebug/lib/xpcom.js
+++ b/content/firebug/lib/xpcom.js
@@ -1,6 +1,10 @@
 /* See license.txt for terms of usage */
 
-define([], function() {
+define([
+],
+function() {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
@@ -78,6 +82,7 @@ Xpcom.QI = function(obj, iface)
 };
 
 // ********************************************************************************************* //
+// Registration
 
 return Xpcom;
 
diff --git a/content/firebug/main.js b/content/firebug/main.js
index f25596f..360e6aa 100644
--- a/content/firebug/main.js
+++ b/content/firebug/main.js
@@ -13,7 +13,7 @@ var prefDomain = "extensions.firebug";
 // xxxHonza: I am getting the following exception sometimes:
 // Console Firebug.getModuleLoaderConfig is not a function"
 // This could be be the reason why users can't open Firebug even if clicking on the start button.
-// Looks like 'moduleConfig.js' is not loaded yet?
+// Looks like 'moduleConfig.js' is not loaded yet? (reported as Issue 6731)
 if (typeof(Firebug.getModuleLoaderConfig) != "function")
 {
     FBTrace.sysout("main; ERROR Firebug.getModuleLoaderConfig is not a function!");
diff --git a/content/firebug/moduleConfig.js b/content/firebug/moduleConfig.js
index d833c5c..1354401 100644
--- a/content/firebug/moduleConfig.js
+++ b/content/firebug/moduleConfig.js
@@ -1,7 +1,5 @@
 /* See license.txt for terms of usage */
 
-var Firebug = Firebug || {};
-
 // ********************************************************************************************* //
 
 /**
@@ -44,7 +42,6 @@ Firebug.getModuleLoaderConfig = function(baseConfig)
         "firebug/firefox/start-button/startButtonOverlay",
         "firebug/firefox/external-editors/externalEditors",
         "firebug/chrome/panelActivation",
-        //"firebug/console/memoryProfiler", xxxHonza: removed from 1.10 (issue 5599)
         "firebug/chrome/tableRep",
         "firebug/html/htmlPanel",
         "firebug/dom/domSidePanel",
diff --git a/content/firebug/net/fontViewer.js b/content/firebug/net/fontViewer.js
index ad0fc96..69999b5 100644
--- a/content/firebug/net/fontViewer.js
+++ b/content/firebug/net/fontViewer.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/domplate",
@@ -17,10 +18,13 @@ define([
     "firebug/net/netUtils",
     "firebug/lib/options"
 ],
-function(Obj, Firebug, Domplate, Locale, Xpcom, Events, Win, Css, Dom, Str, Fonts, Url, Http,
-    NetUtils, Options) {
+function(Module, Obj, Firebug, Domplate, Locale, Xpcom, Events, Win, Css, Dom, Str, Fonts, Url,
+    Http, NetUtils, Options) {
 
 // ********************************************************************************************* //
+// Constants
+
+var {domplate, FOR, TAG, DIV, SPAN, TD, TR, TABLE, TBODY, P, UL, LI, PRE, A, STYLE} = Domplate;
 
 // List of font content types
 var contentTypes =
@@ -39,7 +43,7 @@ var contentTypes =
 // ********************************************************************************************* //
 // Model implementation
 
-Firebug.FontViewerModel = Obj.extend(Firebug.Module,
+Firebug.FontViewerModel = Obj.extend(Module,
 {
     dispatchName: "fontViewer",
     contentTypes: contentTypes,
@@ -157,7 +161,6 @@ Firebug.FontViewerModel = Obj.extend(Firebug.Module,
 
 // ********************************************************************************************* //
 
-with (Domplate) {
 Firebug.FontViewerModel.Preview = domplate(
 {
     bodyTag:
@@ -693,7 +696,6 @@ Firebug.FontViewerModel.Preview = domplate(
             this.insertMetaDataFormatted(body, fontObject.metadata);
     }
 });
-};
 
 // ********************************************************************************************* //
 // Registration
diff --git a/content/firebug/net/httpActivityObserver.js b/content/firebug/net/httpActivityObserver.js
index 4882934..836bebd 100644
--- a/content/firebug/net/httpActivityObserver.js
+++ b/content/firebug/net/httpActivityObserver.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/xpcom",
     "firebug/lib/object",
     "firebug/lib/trace",
@@ -9,7 +10,7 @@ define([
     "firebug/net/netProgress",
     "firebug/net/netUtils"
 ],
-function(Xpcom, Obj, FBTrace, Http, Win, NetProgress, NetUtils) {
+function(Module, Xpcom, Obj, FBTrace, Http, Win, NetProgress, NetUtils) {
 
 // ********************************************************************************************* //
 // Constants
@@ -301,7 +302,7 @@ function getActivitySubtypeDescription(a)
 // ********************************************************************************************* //
 
 // https://bugzilla.mozilla.org/show_bug.cgi?id=669730
-var HttpActivityObserverModule = Obj.extend(Firebug.Module,
+var HttpActivityObserverModule = Obj.extend(Module,
 {
     dispatchName: "HttpActivityObserverModule",
 
diff --git a/content/firebug/net/jsonViewer.js b/content/firebug/net/jsonViewer.js
index 77bb079..a9d087a 100644
--- a/content/firebug/net/jsonViewer.js
+++ b/content/firebug/net/jsonViewer.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/domplate",
@@ -12,15 +13,19 @@ define([
     "firebug/lib/string",
     "firebug/lib/json",
     "firebug/dom/toggleBranch",
-    "firebug/lib/array",
     "firebug/lib/system",
     "firebug/dom/domPanel",
     "firebug/chrome/reps"
 ],
-function(Obj, Firebug, Domplate, Locale, Events, Css, Dom, Http, Str, Json,
-    ToggleBranch, Arr, System) {
+function(Module, Obj, Firebug, Domplate, Locale, Events, Css, Dom, Http, Str, Json,
+    ToggleBranch, System) {
+
+"use strict";
 
 // ********************************************************************************************* //
+// Constants
+
+var {domplate, SPAN, DIV} = Domplate;
 
 // List of JSON content types.
 var contentTypes =
@@ -40,7 +45,7 @@ var contentTypes =
 // ********************************************************************************************* //
 // Model implementation
 
-Firebug.JSONViewerModel = Obj.extend(Firebug.Module,
+Firebug.JSONViewerModel = Obj.extend(Module,
 {
     dispatchName: "jsonViewer",
     contentTypes: contentTypes,
@@ -121,9 +126,18 @@ Firebug.JSONViewerModel = Obj.extend(Firebug.Module,
         // responses (and post data) (with "{") can be parsed unnecessarily,
         // which represents a little overhead, but this happens only if the request
         // is actually expanded by the user in the UI (Net & Console panels).
-        var responseText = data ? Str.trimLeft(data) : null;
-        if (responseText && responseText.charAt(0) === "{")
-            return true;
+        // Do a manual string search instead of checking (data.strip()[0] === "{")
+        // to improve performance/memory usage.
+        var len = data ? data.length : 0;
+        for (var i = 0; i < len; i++)
+        {
+            var ch = data.charAt(i);
+            if (ch === "{")
+                return true;
+            if (ch === " " || ch === "\t" || ch === "\n" || ch === "\r")
+                continue;
+            break;
+        }
 
         if (!contentType)
             return false;
@@ -159,7 +173,6 @@ Firebug.JSONViewerModel = Obj.extend(Firebug.Module,
 
 // ********************************************************************************************* //
 
-with (Domplate) {
 Firebug.JSONViewerModel.Preview = domplate(
 {
     bodyTag:
@@ -208,13 +221,12 @@ Firebug.JSONViewerModel.Preview = domplate(
             body.jsonTree = new JSONTreePlate();
 
         var input = {file: file, sorted: Firebug.sortJsonPreview};
-        parentNode = this.bodyTag.replace(input, body, this);
+        var parentNode = this.bodyTag.replace(input, body, this);
         parentNode = parentNode.getElementsByClassName("jsonPreviewBody").item(0);
 
         body.jsonTree.render(file.jsonObject, parentNode, context);
     }
 });
-};
 
 // ********************************************************************************************* //
 
@@ -265,7 +277,7 @@ JSONTreePlate.prototype = Obj.extend(Firebug.DOMBasePanel.prototype,
         function sortName(a, b) { return a.name > b.name ? 1 : -1; }
 
         // Sort only if it isn't an array (issue 4382).
-        if (Firebug.sortJsonPreview && !Arr.isArray(object, this.context.window))
+        if (Firebug.sortJsonPreview && !Array.isArray(object, this.context.window))
             members.sort(sortName);
 
         return members;
diff --git a/content/firebug/net/netCacheReader.js b/content/firebug/net/netCacheReader.js
index 7b446d8..704531a 100644
--- a/content/firebug/net/netCacheReader.js
+++ b/content/firebug/net/netCacheReader.js
@@ -2,6 +2,7 @@
 
 define([
     "firebug/firebug",
+    "firebug/chrome/module",
     "firebug/lib/object",
     "firebug/lib/locale",
     "firebug/lib/trace",
@@ -11,7 +12,7 @@ define([
     "firebug/net/netUtils",
     "firebug/lib/domplate",
 ],
-function(Firebug, Obj, Locale, FBTrace, Dom, Css, NetMonitor, NetUtils, Domplate) {
+function(Firebug, Module, Obj, Locale, FBTrace, Dom, Css, NetMonitor, NetUtils, Domplate) {
 
 "use strict"
 
@@ -50,7 +51,7 @@ var cacheBodyTag =
  * within the Net panel. Note that opening the cache descriptor during the page load can
  * influence the caching logic (see issue 6385).
  */
-var NetCacheReader = Obj.extend(Firebug.Module,
+var NetCacheReader = Obj.extend(Module,
 /** @lends NetCacheReader */
 {
     dispatchName: "netCacheReader",
@@ -63,7 +64,7 @@ var NetCacheReader = Obj.extend(Firebug.Module,
 
     initialize: function()
     {
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
 
         // Register a listener so, we can create a custom info tab within request info body.
         NetMonitor.NetInfoBody.addListener(this);
@@ -71,7 +72,7 @@ var NetCacheReader = Obj.extend(Firebug.Module,
 
     shutdown: function()
     {
-        Firebug.Module.shutdown.apply(this, arguments);
+        Module.shutdown.apply(this, arguments);
 
         NetMonitor.NetInfoBody.removeListener(this);
     },
diff --git a/content/firebug/net/netDebugger.js b/content/firebug/net/netDebugger.js
index 45fdeb1..2bee928 100644
--- a/content/firebug/net/netDebugger.js
+++ b/content/firebug/net/netDebugger.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/rep",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/domplate",
@@ -12,11 +13,13 @@ define([
     "firebug/lib/array",
     "firebug/net/netUtils",
 ],
-function(Obj, Firebug, Domplate, Locale, Events, Url, Css, Dom, Arr, NetUtils) {
+function(Rep, Obj, Firebug, Domplate, Locale, Events, Url, Css, Dom, Arr, NetUtils) {
 
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, DIV, SPAN, TR, P, A, INPUT} = Domplate;
+
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cr = Components.results;
@@ -137,8 +140,7 @@ Breakpoint.prototype =
 // ********************************************************************************************* //
 // Breakpoint UI
 
-with (Domplate) {
-var BreakpointRep = domplate(Firebug.Rep,
+var BreakpointRep = domplate(Rep,
 {
     inspectable: false,
 
@@ -240,7 +242,6 @@ var BreakpointRep = domplate(Firebug.Rep,
         return object instanceof Breakpoint;
     }
 });
-};
 
 // ********************************************************************************************* //
 // Registration
diff --git a/content/firebug/net/netMonitor.js b/content/firebug/net/netMonitor.js
index 38fcbf2..262156c 100644
--- a/content/firebug/net/netMonitor.js
+++ b/content/firebug/net/netMonitor.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/activableModule",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/chrome/firefox",
@@ -19,9 +20,9 @@ define([
     "firebug/trace/traceListener",
     "firebug/trace/traceModule"
 ],
-function(Obj, Firebug, Firefox, Options, Win, Str, Persist, NetHttpActivityObserver,
-    HttpRequestObserver, NetProgress, Http, NetUtils, NetDebugger, Events, Locale,
-    TraceListener, TraceModule) {
+function(ActivableModule, Obj, Firebug, Firefox, Options, Win, Str, Persist,
+    NetHttpActivityObserver, HttpRequestObserver, NetProgress, Http, NetUtils, NetDebugger,
+    Events, Locale, TraceListener, TraceModule) {
 
 // ********************************************************************************************* //
 // Constants
@@ -46,11 +47,11 @@ var contentLoad = NetProgress.prototype.contentLoad;
 
 /**
  * @module Represents a module object for the Net panel. This object is derived
- * from <code>Firebug.ActivableModule</code> in order to support activation (enable/disable).
+ * from {@link ActivableModule} in order to support activation (enable/disable).
  * This allows to avoid (performance) expensive features if the functionality is not necessary
  * for the user.
  */
-Firebug.NetMonitor = Obj.extend(Firebug.ActivableModule,
+Firebug.NetMonitor = Obj.extend(ActivableModule,
 /** @lends Firebug.NetMonitor */
 {
     dispatchName: "netMonitor",
@@ -62,7 +63,7 @@ Firebug.NetMonitor = Obj.extend(Firebug.ActivableModule,
 
     initialize: function()
     {
-        Firebug.ActivableModule.initialize.apply(this, arguments);
+        ActivableModule.initialize.apply(this, arguments);
 
         this.traceNetListener = new TraceListener("net.", "DBG_NET", true);
         this.traceActivityListener = new TraceListener("activityObserver.",
@@ -78,7 +79,7 @@ Firebug.NetMonitor = Obj.extend(Firebug.ActivableModule,
 
     initializeUI: function()
     {
-        Firebug.ActivableModule.initializeUI.apply(this, arguments);
+        ActivableModule.initializeUI.apply(this, arguments);
 
         // Initialize max limit for logged requests.
         Firebug.NetMonitor.updateMaxLimit();
@@ -104,7 +105,7 @@ Firebug.NetMonitor = Obj.extend(Firebug.ActivableModule,
 
     shutdown: function()
     {
-        Firebug.ActivableModule.shutdown.apply(this, arguments);
+        ActivableModule.shutdown.apply(this, arguments);
 
         TraceModule.removeListener(this.traceNetListener);
         TraceModule.removeListener(this.traceActivityListener);
@@ -116,7 +117,7 @@ Firebug.NetMonitor = Obj.extend(Firebug.ActivableModule,
 
     initContext: function(context, persistedState)
     {
-        Firebug.ActivableModule.initContext.apply(this, arguments);
+        ActivableModule.initContext.apply(this, arguments);
 
         if (FBTrace.DBG_NET)
             FBTrace.sysout("net.initContext for: " + context.getName());
@@ -179,7 +180,7 @@ Firebug.NetMonitor = Obj.extend(Firebug.ActivableModule,
 
     showContext: function(browser, context)
     {
-        Firebug.ActivableModule.showContext.apply(this, arguments);
+        ActivableModule.showContext.apply(this, arguments);
 
         if (FBTrace.DBG_NET)
             FBTrace.sysout("net.showContext; " + (context ? context.getName() : "NULL") +
@@ -211,7 +212,7 @@ Firebug.NetMonitor = Obj.extend(Firebug.ActivableModule,
 
     destroyContext: function(context, persistedState)
     {
-        Firebug.ActivableModule.destroyContext.apply(this, arguments);
+        ActivableModule.destroyContext.apply(this, arguments);
 
         if (FBTrace.DBG_NET)
             FBTrace.sysout("net.destroyContext for: " +
diff --git a/content/firebug/net/netPanel.js b/content/firebug/net/netPanel.js
index 9834fec..e9a5a57 100644
--- a/content/firebug/net/netPanel.js
+++ b/content/firebug/net/netPanel.js
@@ -24,6 +24,8 @@ define([
     "firebug/net/netProgress",
     "firebug/css/cssReps",
     "firebug/net/timeInfoTip",
+    "firebug/chrome/panelNotification",
+    "firebug/chrome/activablePanel",
     "firebug/js/breakpoint",
     "firebug/net/xmlViewer",
     "firebug/net/svgViewer",
@@ -39,13 +41,14 @@ define([
 ],
 function(Obj, Firebug, Firefox, Domplate, Xpcom, Locale,
     Events, Options, Url, SourceLink, Http, Css, Dom, Win, Search, Str,
-    Arr, System, Menu, NetUtils, NetProgress, CSSInfoTip, TimeInfoTip) {
-
-with (Domplate) {
+    Arr, System, Menu, NetUtils, NetProgress, CSSInfoTip, TimeInfoTip,
+    PanelNotification, ActivablePanel) {
 
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, DIV, TR, P, UL, A} = Domplate;
+
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cr = Components.results;
@@ -53,17 +56,18 @@ const Cr = Components.results;
 var layoutInterval = 300;
 var panelName = "net";
 var NetRequestEntry = Firebug.NetMonitor.NetRequestEntry;
+var NetRequestTable = Firebug.NetMonitor.NetRequestTable;
 
 // ********************************************************************************************* //
 
 /**
  * @panel Represents a Firebug panel that displays info about HTTP activity associated with
- * the current page. This class is derived from <code>Firebug.ActivablePanel</code> in order
+ * the current page. This class is derived from {@ActivablePanel} in order
  * to support activation (enable/disable). This allows to avoid (performance) expensive
  * features if the functionality is not necessary for the user.
  */
 function NetPanel() {}
-NetPanel.prototype = Obj.extend(Firebug.ActivablePanel,
+NetPanel.prototype = Obj.extend(ActivablePanel,
 /** @lends NetPanel */
 {
     name: panelName,
@@ -84,7 +88,7 @@ NetPanel.prototype = Obj.extend(Firebug.ActivablePanel,
         this.queue = [];
         this.onContextMenu = Obj.bind(this.onContextMenu, this);
 
-        Firebug.ActivablePanel.initialize.apply(this, arguments);
+        ActivablePanel.initialize.apply(this, arguments);
 
         // Listen for set filters, so the panel is properly updated when needed
         Firebug.NetMonitor.addListener(this);
@@ -93,7 +97,8 @@ NetPanel.prototype = Obj.extend(Firebug.ActivablePanel,
     destroy: function(state)
     {
         Firebug.NetMonitor.removeListener(this);
-        Firebug.ActivablePanel.destroy.apply(this, arguments);
+
+        ActivablePanel.destroy.apply(this, arguments);
     },
 
     initializeNode : function()
@@ -104,7 +109,7 @@ NetPanel.prototype = Obj.extend(Firebug.ActivablePanel,
         this.resizeEventTarget = Firebug.chrome.$('fbContentBox');
         Events.addEventListener(this.resizeEventTarget, "resize", this.onResizer, true);
 
-        Firebug.ActivablePanel.initializeNode.apply(this, arguments);
+        ActivablePanel.initializeNode.apply(this, arguments);
     },
 
     destroyNode : function()
@@ -112,7 +117,7 @@ NetPanel.prototype = Obj.extend(Firebug.ActivablePanel,
         Events.removeEventListener(this.panelNode, "contextmenu", this.onContextMenu, false);
         Events.removeEventListener(this.resizeEventTarget, "resize", this.onResizer, true);
 
-        Firebug.ActivablePanel.destroyNode.apply(this, arguments);
+        ActivablePanel.destroyNode.apply(this, arguments);
     },
 
     loadPersistedContent: function(state)
@@ -183,7 +188,7 @@ NetPanel.prototype = Obj.extend(Firebug.ActivablePanel,
 
     savePersistedContent: function(state)
     {
-        Firebug.ActivablePanel.savePersistedContent.apply(this, arguments);
+        ActivablePanel.savePersistedContent.apply(this, arguments);
 
         state.pageTitle = NetUtils.getPageTitle(this.context);
     },
@@ -279,9 +284,9 @@ NetPanel.prototype = Obj.extend(Firebug.ActivablePanel,
     {
         var header = Dom.getAncestorByClass(target, "netHeaderRow");
         if (header)
-            return Firebug.NetMonitor.NetRequestTable;
+            return NetRequestTable;
 
-        return Firebug.ActivablePanel.getPopupObject.apply(this, arguments);
+        return ActivablePanel.getPopupObject.apply(this, arguments);
     },
 
     supportsObject: function(object, type)
@@ -865,18 +870,28 @@ NetPanel.prototype = Obj.extend(Firebug.ActivablePanel,
     {
         if (!this.table)
         {
-            var limitInfo = {
+            var prefName = Options.prefDomain + ".net.logLimit";
+            var config = {
                 totalCount: 0,
-                limitPrefsTitle: Locale.$STRF("LimitPrefsTitle",
-                    [Options.prefDomain+".net.logLimit"])
+                prefName: prefName,
+                buttonTooltip: Locale.$STRF("LimitPrefsTitle", [prefName])
             };
 
-            this.table = Firebug.NetMonitor.NetRequestTable.tableTag.append({}, this.panelNode);
+            // Render notification box
+            var limitBox = NetRequestTable.limitTag.append({}, this.panelNode);
+            this.limitRow = PanelNotification.render(limitBox, config);
+
+            // Render basic Net panel table (a row == one HTTP request)
+            this.table = NetRequestTable.tableTag.append({}, this.panelNode);
             var tbody = this.table.querySelector(".netTableBody");
-            this.limitRow = Firebug.NetMonitor.NetLimit.createRow(tbody, limitInfo);
-            this.summaryRow = NetRequestEntry.summaryTag.insertRows({}, this.table.lastChild.lastChild)[0];
 
-            NetRequestEntry.footerTag.insertRows({}, this.summaryRow);
+            // xxxHonza: Fake first row (shold be renamed, but it's a hack anyway).
+            // There is no way to insert a row befor the current first row in a table.
+            // See Domplate.insertRows() comment for more details.
+            NetRequestEntry.footerTag.insertRows({}, tbody);
+
+            // Render summary row
+            this.summaryRow = NetRequestEntry.summaryTag.insertRows({}, tbody)[0];
 
             // Update visibility of columns according to the preferences
             var hiddenCols = Options.get("net.hiddenColumns");
@@ -942,8 +957,7 @@ NetPanel.prototype = Obj.extend(Firebug.ActivablePanel,
 
             // Allow customization of request entries in the list. A row is represented
             // by <TR> HTML element.
-            Events.dispatch(Firebug.NetMonitor.NetRequestTable.fbListeners,
-                "onCreateRequestEntry", [this, row]);
+            Events.dispatch(NetRequestTable.fbListeners, "onCreateRequestEntry", [this, row]);
 
             row = row.nextSibling;
         }
@@ -1332,9 +1346,9 @@ NetPanel.prototype = Obj.extend(Firebug.ActivablePanel,
         if (noInfo || !this.limitRow)
             return;
 
-        this.limitRow.limitInfo.totalCount++;
+        this.limitRow.config.totalCount++;
 
-        Firebug.NetMonitor.NetLimit.updateCounter(this.limitRow);
+        PanelNotification.updateCounter(this.limitRow);
 
         //if (netProgress.currentPhase == file.phase)
         //  netProgress.currentPhase = null;
@@ -1381,17 +1395,16 @@ NetPanel.prototype = Obj.extend(Firebug.ActivablePanel,
         // Make sure the basic structure of the table panel is there.
         this.initLayout();
 
-        // Get the last request row before summary row.
-        var lastRow = this.summaryRow.previousSibling;
-
-        // Insert an activation message (if the last row isn't the message already);
-        if (Css.hasClass(lastRow, "netActivationRow"))
+        // Bail out if the activation message is already there.
+        if (this.table.querySelector(".netActivationRow"))
             return;
 
-        var message = NetRequestEntry.activationTag.insertRows({}, lastRow)[0];
+        // Insert activation message
+        var lastRow = this.summaryRow.previousSibling;
+        NetRequestEntry.activationTag.insertRows({}, lastRow)[0];
 
         if (FBTrace.DBG_NET)
-            FBTrace.sysout("net.insertActivationMessage; " + this.context.getName(), message);
+            FBTrace.sysout("net.insertActivationMessage; " + this.context.getName());
     },
 
     enumerateRequests: function(fn)
@@ -1612,9 +1625,10 @@ var NetPanelSearch = function(panel, rowFinder)
             Firebug.NetMonitor.NetInfoBody.selectTabByName(netInfoBox, "Response");
 
             // Before the search is started, the new content must be properly
-            // layouted within the page. The layout is executed by reading
+            // re-layouted within the page. The layout is executed by reading
             // the following property.
-            // xxxHonza: This workaround can be removed as soon as #488427 is fixed.
+            // xxxHonza: Force layout to be executed (workaround)
+            // This workaround can be removed as soon as #488427 is fixed.
             doc.body.offsetWidth;
         }
     },
@@ -1655,7 +1669,7 @@ var NetPanelSearch = function(panel, rowFinder)
     };
 };
 
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+// ********************************************************************************************* //
 
 Firebug.NetMonitor.ConditionEditor = function(doc)
 {
@@ -1709,4 +1723,4 @@ Firebug.registerPanel(NetPanel);
 return Firebug.NetMonitor;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/net/netReps.js b/content/firebug/net/netReps.js
index 3c8c778..2f77d6b 100644
--- a/content/firebug/net/netReps.js
+++ b/content/firebug/net/netReps.js
@@ -1,6 +1,7 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/eventSource",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/chrome/firefox",
@@ -21,6 +22,7 @@ define([
     "firebug/net/netUtils",
     "firebug/net/netProgress",
     "firebug/lib/http",
+    "firebug/chrome/rep",
     "firebug/js/breakpoint",
     "firebug/net/xmlViewer",
     "firebug/net/svgViewer",
@@ -32,14 +34,14 @@ define([
     "firebug/console/errors",
     "firebug/net/netMonitor"
 ],
-function(Obj, Firebug, Firefox, Domplate, Locale, Events, Options, Url, Css, Dom, Win, Search, Str,
-    Json, Arr, ToggleBranch, DragDrop, NetUtils, NetProgress, Http) {
-
-with (Domplate) {
+function(EventSource, Obj, Firebug, Firefox, Domplate, Locale, Events, Options, Url, Css, Dom,
+    Win, Search, Str, Json, Arr, ToggleBranch, DragDrop, NetUtils, NetProgress, Http, Rep) {
 
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, FOR, TAG, DIV, SPAN, TD, TR, TH, TABLE, THEAD, TBODY, P, CODE, PRE, A, IFRAME} = Domplate;
+
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cr = Components.results;
@@ -55,7 +57,7 @@ const reSplitIP = /^(\d+)\.(\d+)\.(\d+)\.(\d+):(\d+)$/;
 /**
  * @domplate Represents a template that is used to render basic content of the net panel.
  */
-Firebug.NetMonitor.NetRequestTable = domplate(Firebug.Rep, new Firebug.Listener(),
+Firebug.NetMonitor.NetRequestTable = domplate(Rep, new EventSource(),
 {
     inspectable: false,
 
@@ -118,8 +120,8 @@ Firebug.NetMonitor.NetRequestTable = domplate(Firebug.Rep, new Firebug.Listener(
                             Locale.$STR("net.header.Remote IP")
                         )
                     ),
-                    TD({id: "netTimeCol", width: "53%", "class": "netHeaderCell a11yFocus",
-                        "role": "columnheader"},
+                    TD({id: "netTimeCol", width: "53%", "class": "netHeaderCell netHeaderSorted a11yFocus sortedAscending",
+                        "role": "columnheader", "aria-sort": "ascending"},
                         DIV({"class": "netHeaderCellBox",
                             title: Locale.$STR("net.header.Timeline Tooltip")},
                             Locale.$STR("net.header.Timeline")
@@ -130,6 +132,11 @@ Firebug.NetMonitor.NetRequestTable = domplate(Firebug.Rep, new Firebug.Listener(
             TBODY({"class": "netTableBody", "role" : "presentation"})
         ),
 
+    limitTag:
+        DIV({"class": "panelNotificationBox collapsed"}),
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
     onClickHeader: function(event)
     {
         if (FBTrace.DBG_NET)
@@ -399,7 +406,7 @@ Firebug.NetMonitor.NetRequestTable = domplate(Firebug.Rep, new Firebug.Listener(
 /**
  * @domplate Represents a template that is used to render net panel entries.
  */
-Firebug.NetMonitor.NetRequestEntry = domplate(Firebug.Rep, new Firebug.Listener(),
+Firebug.NetMonitor.NetRequestEntry = domplate(Rep, new EventSource(),
 {
     fileTag:
         FOR("file", "$files",
@@ -728,7 +735,7 @@ Firebug.NetMonitor.NetRequestEntry = domplate(Firebug.Rep, new Firebug.Listener(
 
 // ********************************************************************************************* //
 
-Firebug.NetMonitor.NetPage = domplate(Firebug.Rep,
+Firebug.NetMonitor.NetPage = domplate(Rep,
 {
     separatorTag:
         TR({"class": "netRow netPageSeparatorRow"},
@@ -792,7 +799,7 @@ Firebug.NetMonitor.NetPage = domplate(Firebug.Rep,
  * @domplate Represents a template that is used to render detailed info about a request.
  * This template is rendered when a request is expanded.
  */
-Firebug.NetMonitor.NetInfoBody = domplate(Firebug.Rep, new Firebug.Listener(),
+Firebug.NetMonitor.NetInfoBody = domplate(Rep, new EventSource(),
 {
     tag:
         DIV({"class": "netInfoBody", _repObject: "$file"},
@@ -1279,7 +1286,7 @@ Firebug.NetMonitor.NetInfoBody = domplate(Firebug.Rep, new Firebug.Listener(),
  * @domplate Represents posted data within request info (the info, which is visible when
  * a request entry is expanded. This template renders content of the Post tab.
  */
-Firebug.NetMonitor.NetInfoPostData = domplate(Firebug.Rep, new Firebug.Listener(),
+Firebug.NetMonitor.NetInfoPostData = domplate(Rep, new EventSource(),
 {
     // application/x-www-form-urlencoded
     paramsTable:
@@ -1580,45 +1587,62 @@ Firebug.NetMonitor.NetInfoPostData = domplate(Firebug.Rep, new Firebug.Listener(
  * @domplate Used within the Net panel to display raw source of request and response headers
  * as well as pretty-formatted summary of these headers.
  */
-Firebug.NetMonitor.NetInfoHeaders = domplate(Firebug.Rep, new Firebug.Listener(),
+Firebug.NetMonitor.NetInfoHeaders = domplate(Rep, new EventSource(),
 {
     tag:
         DIV({"class": "netInfoHeadersTable", "role": "tabpanel"},
-            DIV({"class": "netInfoHeadersGroup netInfoResponseHeadersTitle collapsed"},
-                SPAN(Locale.$STR("ResponseHeaders")),
-                SPAN({"class": "netHeadersViewSource response collapsed", onclick: "$onViewSource",
-                    _sourceDisplayed: false, _rowName: "ResponseHeaders"},
-                    Locale.$STR("net.headers.view source")
-                )
-            ),
-            TABLE({cellpadding: 0, cellspacing: 0},
-                TBODY({"class": "netInfoResponseHeadersBody", "role": "list",
-                    "aria-label": Locale.$STR("ResponseHeaders")})
-            ),
-            DIV({"class": "netInfoHeadersGroup netInfoRequestHeadersTitle collapsed"},
-                SPAN(Locale.$STR("RequestHeaders")),
-                SPAN({"class": "netHeadersViewSource request collapsed", onclick: "$onViewSource",
-                    _sourceDisplayed: false, _rowName: "RequestHeaders"},
-                    Locale.$STR("net.headers.view source")
+            DIV({"class": "netHeadersGroup collapsed", "data-pref": "netResponseHeadersVisible"},
+                DIV({"class": "netInfoHeadersGroup netInfoResponseHeadersTitle"},
+                    SPAN({"class": "netHeader twisty",
+                        onclick: "$toggleHeaderContent"},
+                        Locale.$STR("ResponseHeaders")
+                    ),
+                    SPAN({"class": "netHeadersViewSource response collapsed", onclick: "$onViewSource",
+                        _sourceDisplayed: false, _rowName: "ResponseHeaders"},
+                        Locale.$STR("net.headers.view source")
+                    )
+                ),
+                TABLE({cellpadding: 0, cellspacing: 0},
+                    TBODY({"class": "netInfoResponseHeadersBody", "role": "list",
+                        "aria-label": Locale.$STR("ResponseHeaders")})
                 )
             ),
-            TABLE({cellpadding: 0, cellspacing: 0},
-                TBODY({"class": "netInfoRequestHeadersBody", "role": "list",
+            DIV({"class": "netHeadersGroup collapsed", "data-pref": "netRequestHeadersVisible"},
+                DIV({"class": "netInfoHeadersGroup netInfoRequestHeadersTitle"},
+                    SPAN({"class": "netHeader twisty", 
+                        onclick: "$toggleHeaderContent"},
+                        Locale.$STR("RequestHeaders")),
+                    SPAN({"class": "netHeadersViewSource request collapsed", onclick: "$onViewSource",
+                        _sourceDisplayed: false, _rowName: "RequestHeaders"},
+                        Locale.$STR("net.headers.view source")
+                    )
+                ),
+                TABLE({cellpadding: 0, cellspacing: 0},
+                    TBODY({"class": "netInfoRequestHeadersBody", "role": "list",
                     "aria-label": Locale.$STR("RequestHeaders")})
+                )
             ),
-            DIV({"class": "netInfoHeadersGroup netInfoCachedResponseHeadersTitle collapsed"},
-                SPAN(Locale.$STR("CachedResponseHeaders"))
-            ),
-            TABLE({cellpadding: 0, cellspacing: 0},
-                TBODY({"class": "netInfoCachedResponseHeadersBody", "role": "list",
-                    "aria-label": Locale.$STR("CachedResponseHeaders")})
-            ),
-            DIV({"class": "netInfoHeadersGroup netInfoPostRequestHeadersTitle collapsed"},
-                SPAN(Locale.$STR("PostRequestHeaders"))
+            DIV({"class": "netHeadersGroup collapsed", "data-pref": "netCachedHeadersVisible"},
+                DIV({"class": "netInfoHeadersGroup netInfoCachedResponseHeadersTitle"},
+                    SPAN({"class": "netHeader twisty", 
+                        onclick: "$toggleHeaderContent"},
+                        Locale.$STR("CachedResponseHeaders"))
+                ),
+                TABLE({cellpadding: 0, cellspacing: 0},
+                    TBODY({"class": "netInfoCachedResponseHeadersBody", "role": "list",
+                        "aria-label": Locale.$STR("CachedResponseHeaders")})
+                )
             ),
-            TABLE({cellpadding: 0, cellspacing: 0},
-                TBODY({"class": "netInfoPostRequestHeadersBody", "role": "list",
-                    "aria-label": Locale.$STR("PostRequestHeaders")})
+            DIV({"class": "netHeadersGroup collapsed", "data-pref": "netPostRequestHeadersVisible"},
+                DIV({"class": "netInfoHeadersGroup netInfoPostRequestHeadersTitle"},
+                    SPAN({"class": "netHeader twisty", 
+                        onclick: "$toggleHeaderContent"},
+                    Locale.$STR("PostRequestHeaders"))
+                ),
+                TABLE({cellpadding: 0, cellspacing: 0},
+                    TBODY({"class": "netInfoPostRequestHeadersBody", "role": "list",
+                        "aria-label": Locale.$STR("PostRequestHeaders")})
+                )
             )
         ),
 
@@ -1629,6 +1653,24 @@ Firebug.NetMonitor.NetInfoHeaders = domplate(Firebug.Rep, new Firebug.Listener()
             )
         ),
 
+    toggleHeaderContent: function(event)
+    {
+        var target = event.target;
+        var headerGroup = Dom.getAncestorByClass(target, "netHeadersGroup");
+        
+        Css.toggleClass(headerGroup, "opened");
+        if (Css.hasClass(headerGroup, "opened")) 
+        {
+            headerGroup.setAttribute("aria-expanded", "true");
+            Options.set(headerGroup.dataset.pref, true);
+        }
+        else
+        {
+            headerGroup.setAttribute("aria-expanded", "false");
+            Options.set(headerGroup.dataset.pref, false);
+        }
+    },
+
     onViewSource: function(event)
     {
         var target = event.target;
@@ -1679,8 +1721,9 @@ Firebug.NetMonitor.NetInfoHeaders = domplate(Firebug.Rep, new Firebug.Listener()
 
             Firebug.NetMonitor.NetInfoBody.headerDataTag.insertRows({headers: headers}, tbody);
 
-            var titleRow = Dom.getChildByClass(headersTable, "netInfo" + rowName + "Title");
-            Css.removeClass(titleRow, "collapsed");
+            var titleRow = headersTable.getElementsByClassName("netInfo" + rowName + "Title").item(0)
+            var parent = Dom.getAncestorByClass(titleRow, "netHeadersGroup");
+            Css.removeClass(parent, "collapsed");
         }
     },
 
@@ -1692,6 +1735,19 @@ Firebug.NetMonitor.NetInfoHeaders = domplate(Firebug.Rep, new Firebug.Listener()
         var file = netInfoBox.repObject;
 
         var viewSource;
+        var headers = rootNode.getElementsByClassName("netHeadersGroup");
+
+        if (Options.get("netResponseHeadersVisible"))
+            Css.setClass(headers[0], "opened");
+
+        if (Options.get("netRequestHeadersVisible"))
+            Css.setClass(headers[1], "opened");
+
+        if (Options.get("netCachedHeadersVisible"))
+            Css.setClass(headers[2], "opened");
+
+        if (Options.get("netPostRequestHeadersVisible"))
+            Css.setClass(headers[3], "opened");
 
         viewSource = rootNode.getElementsByClassName("netHeadersViewSource request").item(0);
         if (file.requestHeadersText)
@@ -1716,7 +1772,7 @@ Firebug.NetMonitor.NetInfoHeaders = domplate(Firebug.Rep, new Firebug.Listener()
 /**
  * @domplate Represents a template for a pupup tip with detailed size info.
  */
-Firebug.NetMonitor.SizeInfoTip = domplate(Firebug.Rep,
+Firebug.NetMonitor.SizeInfoTip = domplate(Rep,
 {
     tag:
         TABLE({"class": "sizeInfoTip", "id": "fbNetSizeInfoTip", role:"presentation"},
@@ -1795,80 +1851,7 @@ Firebug.NetMonitor.SizeInfoTip = domplate(Firebug.Rep,
 
 // ********************************************************************************************* //
 
-Firebug.NetMonitor.NetLimit = domplate(Firebug.Rep,
-{
-    collapsed: true,
-
-    tableTag:
-        DIV(
-            TABLE({width: "100%", cellpadding: 0, cellspacing: 0},
-                TBODY()
-            )
-        ),
-
-    limitTag:
-        TR({"class": "netRow netLimitRow", $collapsed: "$isCollapsed"},
-            TD({"class": "netCol netLimitCol", colspan: 8},
-                TABLE({cellpadding: 0, cellspacing: 0},
-                    TBODY(
-                        TR(
-                            TD(
-                                SPAN({"class": "netLimitLabel"},
-                                    Locale.$STRP("plural.Limit_Exceeded2", [0])
-                                )
-                            ),
-                            TD({style: "width:100%"}),
-                            TD(
-                                BUTTON({"class": "netLimitButton", title: "$limitPrefsTitle",
-                                    onclick: "$onPreferences"},
-                                  Locale.$STR("LimitPrefs")
-                                )
-                            ),
-                            TD(" ")
-                        )
-                    )
-                )
-            )
-        ),
-
-    isCollapsed: function()
-    {
-        return this.collapsed;
-    },
-
-    onPreferences: function(event)
-    {
-        Win.openNewTab("about:config");
-    },
-
-    updateCounter: function(row)
-    {
-        Css.removeClass(row, "collapsed");
-
-        // Update info within the limit row.
-        var limitLabel = row.getElementsByClassName("netLimitLabel").item(0);
-        limitLabel.firstChild.nodeValue = Locale.$STRP("plural.Limit_Exceeded2",
-            [row.limitInfo.totalCount]);
-    },
-
-    createTable: function(parent, limitInfo)
-    {
-        var table = this.tableTag.replace({}, parent);
-        var row = this.createRow(table.firstChild.firstChild, limitInfo);
-        return [table, row];
-    },
-
-    createRow: function(parent, limitInfo)
-    {
-        var row = this.limitTag.insertRows(limitInfo, parent, this)[0];
-        row.limitInfo = limitInfo;
-        return row;
-    }
-});
-
-// ********************************************************************************************* //
-
-Firebug.NetMonitor.ResponseSizeLimit = domplate(Firebug.Rep,
+Firebug.NetMonitor.ResponseSizeLimit = domplate(Rep,
 {
     tag:
         DIV({"class": "netInfoResponseSizeLimit"},
@@ -1900,4 +1883,4 @@ Firebug.registerRep(Firebug.NetMonitor.NetRequestTable);
 return Firebug.NetMonitor.NetRequestTable;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/net/netUtils.js b/content/firebug/net/netUtils.js
index 03fc6cc..e3d8a34 100644
--- a/content/firebug/net/netUtils.js
+++ b/content/firebug/net/netUtils.js
@@ -433,9 +433,9 @@ var NetUtils =
 
     getTimeLabel: function(date)
     {
-        var m = date.getMinutes() + "";
-        var s = date.getSeconds() + "";
-        var ms = date.getMilliseconds() + "";
+        var m = String(date.getMinutes());
+        var s = String(date.getSeconds());
+        var ms = String(date.getMilliseconds());
         return "[" + ((m.length > 1) ? m : "0" + m) + ":" +
             ((s.length > 1) ? s : "0" + s) + "." +
             ((ms.length > 2) ? ms : ((ms.length > 1) ? "0" + ms : "00" + ms)) + "]";
@@ -551,6 +551,7 @@ var NetUtils =
     generateCurlCommand: function(file, addCompressedArgument)
     {
         var command = ["curl"];
+        var ignoredHeaders = {};
         var inferredMethod = "GET";
 
         function escapeCharacter(x)
@@ -588,6 +589,7 @@ var NetUtils =
         var data = [];
         var postText = NetUtils.getPostText(file, this.context, true);
         var isURLEncodedRequest = NetUtils.isURLEncodedRequest(file, this.context);
+        var isMultipartRequest = NetUtils.isMultiPartRequest(file, this.context);
 
         if (postText && isURLEncodedRequest || file.method == "PUT")
         {
@@ -597,13 +599,17 @@ var NetUtils =
             data.push("--data");
             data.push(escape(params));
 
+            // Ignore content length as cURL will resolve this
+            ignoredHeaders["Content-Length"] = true;
+
             inferredMethod = "POST";
         }
-        else if (postText && NetUtils.isMultiPartRequest(file, this.context))
+        else if (postText && isMultipartRequest)
         {
             data.push("--data-binary");
-            data.push(escape(postText));
+            data.push(escape(this.removeBinaryDataFromMultipartPostText(postText)));
 
+            ignoredHeaders["Content-Length"] = true;
             inferredMethod = "POST";
         }
 
@@ -618,6 +624,7 @@ var NetUtils =
         }
 
         // Add request headers
+        // fixme: for multipart request, content-type should be omitted
         var requestHeaders = file.requestHeaders;
         var postRequestHeaders = Http.getHeadersFromPostText(file.request, postText);
         var headers = requestHeaders.concat(postRequestHeaders);
@@ -625,10 +632,7 @@ var NetUtils =
         {
             var header = headers[i];
 
-            // Firefox and cURL creates the optional Content-Length header for POST and
-            // PUT requests. Omit adding this header as it is preferred to use the
-            // Content-Length cURL creates.
-            if (header.name.toLowerCase() == "content-length")
+            if (header.name in ignoredHeaders)
                 continue;
 
             command.push("-H");
@@ -643,7 +647,51 @@ var NetUtils =
             command.push("--compressed");
 
         return command.join(" ");
+    },
+
+    removeBinaryDataFromMultipartPostText: function (postText)
+    {
+        var textWithoutBinaryData = "";
+
+        var boundaryRe = /^--.+/gm;
+
+        var boundaryString = boundaryRe.exec(postText)[0];
+
+        var parts = postText.split(boundaryRe);
+
+        var part;
+        var contentDispositionLine;
+
+        for (var i = 0; i<parts.length; i++)
+        {
+            part = parts[i];
+
+            // The second line in a part holds the content disposition form-data
+            contentDispositionLine = part.split("\r\n")[1];
+
+            if (/^Content-Disposition: form-data/im.test(contentDispositionLine))
+            {
+                // filename= tells us that the form data is file input type
+                if (/filename=/im.test(contentDispositionLine))
+                {
+                    // For file input parts
+                    // Remove binary data. Only the Content-Disposition and Content-Type lines
+                    // should remain.
+                    textWithoutBinaryData += boundaryString
+                        + part.match(/[\r\n]+Content-Disposition.+$[\r\n]+Content-Type.+$[\r\n]+/im).toString();
+                }
+                else
+                {
+                    textWithoutBinaryData += boundaryString + part;
+                }
+            }
+        }
+
+        textWithoutBinaryData += boundaryString + "--\r\n";
+
+        return textWithoutBinaryData;
     }
+
 };
 
 // ********************************************************************************************* //
diff --git a/content/firebug/net/spy.js b/content/firebug/net/spy.js
index 737a6ed..de8fb0c 100644
--- a/content/firebug/net/spy.js
+++ b/content/firebug/net/spy.js
@@ -1,6 +1,8 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/chrome/module",
+    "firebug/chrome/rep",
     "firebug/lib/object",
     "firebug/firebug",
     "firebug/lib/domplate",
@@ -26,13 +28,15 @@ define([
     "firebug/net/netPanel",
     "firebug/console/errors"
 ],
-function(Obj, Firebug, Domplate, FirebugReps, Events, HttpRequestObserver, StackFrame,
-    Http, Css, Dom, Win, System, Str, Url, Arr, Debug, NetHttpActivityObserver, NetUtils,
-    TraceListener, TraceModule, Wrapper, Options) {
+function(Module, Rep, Obj, Firebug, Domplate, FirebugReps, Events, HttpRequestObserver,
+    StackFrame, Http, Css, Dom, Win, System, Str, Url, Arr, Debug, NetHttpActivityObserver,
+    NetUtils, TraceListener, TraceModule, Wrapper, Options) {
 
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, TAG, DIV, SPAN, TD, TR, TABLE, TBODY, P, A} = Domplate;
+
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 
@@ -44,6 +48,10 @@ var contexts = [];
 
 var redirectionLimit = Options.getPref("network.http", "redirection-limit");
 
+// Tracing
+var TraceError = FBTrace.to("DBG_ERRORS");
+var Trace = FBTrace.to("DBG_SPY");
+
 // ********************************************************************************************* //
 // Spy Module
 
@@ -56,7 +64,7 @@ var redirectionLimit = Options.getPref("network.http", "redirection-limit");
  * The module is responsible for attaching/detaching a HTTP Observers when Firebug is
  * activated/deactivated for a site.
  */
-Firebug.Spy = Obj.extend(Firebug.Module,
+Firebug.Spy = Obj.extend(Module,
 /** @lends Firebug.Spy */
 {
     dispatchName: "spy",
@@ -66,12 +74,12 @@ Firebug.Spy = Obj.extend(Firebug.Module,
         this.traceListener = new TraceListener("spy.", "DBG_SPY", true);
         TraceModule.addListener(this.traceListener);
 
-        Firebug.Module.initialize.apply(this, arguments);
+        Module.initialize.apply(this, arguments);
     },
 
     shutdown: function()
     {
-        Firebug.Module.shutdown.apply(this, arguments);
+        Module.shutdown.apply(this, arguments);
 
         TraceModule.removeListener(this.traceListener);
     },
@@ -83,8 +91,7 @@ Firebug.Spy = Obj.extend(Firebug.Module,
         if (Firebug.showXMLHttpRequests && Firebug.Console.isAlwaysEnabled())
             this.attachObserver(context, context.window);
 
-        if (FBTrace.DBG_SPY)
-            FBTrace.sysout("spy.initContext " + contexts.length + " ", context.getName());
+        Trace.sysout("spy.initContext " + contexts.length + " ", context.getName());
     },
 
     destroyContext: function(context)
@@ -92,9 +99,9 @@ Firebug.Spy = Obj.extend(Firebug.Module,
         // For any spies that are in progress, remove our listeners so that they don't leak
         this.detachObserver(context, null);
 
-        if (FBTrace.DBG_SPY && context.spies && context.spies.length)
+        if (context.spies && context.spies.length)
         {
-            FBTrace.sysout("spy.destroyContext; ERROR There are spies in progress ("
+            Trace.sysout("spy.destroyContext; ERROR There are spies in progress ("
                 + context.spies.length + ") " + context.getName());
         }
 
@@ -109,8 +116,7 @@ Firebug.Spy = Obj.extend(Firebug.Module,
 
         SpyHttpActivityObserver.cleanUp(context.window);
 
-        if (FBTrace.DBG_SPY)
-            FBTrace.sysout("spy.destroyContext " + contexts.length + " ", context.getName());
+        Trace.sysout("spy.destroyContext " + contexts.length + " ", context.getName());
     },
 
     watchWindow: function(context, win)
@@ -121,8 +127,7 @@ Firebug.Spy = Obj.extend(Firebug.Module,
 
     unwatchWindow: function(context, win)
     {
-        if (FBTrace.DBG_SPY)
-            FBTrace.sysout("spy.unwatchWindow; " + (context ? context.getName() : "no context"));
+        Trace.sysout("spy.unwatchWindow; " + (context ? context.getName() : "no context"));
 
         try
         {
@@ -199,8 +204,7 @@ Firebug.Spy = Obj.extend(Firebug.Module,
 
         contexts.push({context: context, win: win});
 
-        if (FBTrace.DBG_SPY)
-            FBTrace.sysout("spy.attachObserver (HTTP) " + contexts.length + " ", context.getName());
+        Trace.sysout("spy.attachObserver (HTTP) " + contexts.length + " ", context.getName());
     },
 
     detachObserver: function(context, win)
@@ -214,16 +218,16 @@ Firebug.Spy = Obj.extend(Firebug.Module,
 
                 contexts.splice(i, 1);
 
-                // If no context is using spy, remvove the (only one) HTTP observer.
+                // If no context is using spy, remove the (only one) HTTP observer.
                 if (contexts.length == 0)
                 {
                     HttpRequestObserver.removeObserver(SpyHttpObserver, "firebug-http-event");
                     SpyHttpActivityObserver.unregisterObserver();
                 }
 
-                if (FBTrace.DBG_SPY)
-                    FBTrace.sysout("spy.detachObserver (HTTP) " + contexts.length + " ",
-                        context.getName());
+                Trace.sysout("spy.detachObserver (HTTP) " + contexts.length + " ",
+                    context.getName());
+
                 return;
             }
         }
@@ -252,9 +256,8 @@ Firebug.Spy = Obj.extend(Firebug.Module,
         {
             if (exc.name == "NS_NOINTERFACE")
             {
-                if (FBTrace.DBG_SPY)
-                    FBTrace.sysout("spy.getXHR; Request is not nsIXMLHttpRequest: " +
-                        Http.safeGetRequestName(request));
+                Trace.sysout("spy.getXHR; Request is not nsIXMLHttpRequest: " +
+                    Http.safeGetRequestName(request));
             }
         }
         finally
@@ -298,8 +301,7 @@ var SpyHttpObserver =
         }
         catch (exc)
         {
-            if (FBTrace.DBG_ERRORS || FBTrace.DBG_SPY)
-                FBTrace.sysout("spy.SpyHttpObserver EXCEPTION", exc);
+            TraceError.sysout("spy.SpyHttpObserver EXCEPTION", exc);
         }
     },
 
@@ -344,8 +346,7 @@ var SpyHttpObserver =
         spy.method = method;
         spy.href = url;
 
-        if (FBTrace.DBG_SPY)
-            FBTrace.sysout("spy.requestStarted; " + spy.href);
+        Trace.sysout("spy.requestStarted; " + spy.href);
 
         // Get "body" for POST and PUT requests. It will be displayed in
         // appropriate tab of the XHR.
@@ -398,8 +399,7 @@ var SpyHttpObserver =
             }
             catch (exc)
             {
-                if (FBTrace.DBG_SPY)
-                    FBTrace.sysout("spy.requestStopped " + spy.href + ", status access FAILED", exc);
+                TraceError.sysout("spy.requestStopped " + spy.href + ", status access ERROR", exc);
             }
         }
 
@@ -418,12 +418,9 @@ var SpyHttpObserver =
         if (!spy.onLoad && spy.context.spies)
             Arr.remove(spy.context.spies, spy);
 
-        if (FBTrace.DBG_SPY)
-        {
-            FBTrace.sysout("spy.requestStopped: " + spy.href + ", responseTime: " +
-                spy.responseTime + "ms, spy.responseText: " +
-                (spy.reponseText ? spy.responseText.length : 0) + " bytes");
-        }
+        Trace.sysout("spy.requestStopped: " + spy.href + ", responseTime: " +
+            spy.responseTime + "ms, spy.responseText: " +
+            (spy.reponseText ? spy.responseText.length : 0) + " bytes");
     }
 };
 
@@ -482,9 +479,8 @@ var SpyHttpActivityObserver = Obj.extend(NetHttpActivityObserver,
 
         if (activitySubtype == Ci.nsIHttpActivityObserver.ACTIVITY_SUBTYPE_REQUEST_HEADER)
         {
-            if (FBTrace.DBG_SPY)
-                FBTrace.sysout("spy.observeXHRActivity REQUEST_HEADER " +
-                    Http.safeGetRequestName(request));
+            Trace.sysout("spy.observeXHRActivity REQUEST_HEADER " +
+                Http.safeGetRequestName(request));
 
             this.activeRequests.push(request);
             this.activeRequests.push(win);
@@ -494,9 +490,8 @@ var SpyHttpActivityObserver = Obj.extend(NetHttpActivityObserver,
         }
         else if (activitySubtype == Ci.nsIHttpActivityObserver.ACTIVITY_SUBTYPE_TRANSACTION_CLOSE)
         {
-            if (FBTrace.DBG_SPY)
-                FBTrace.sysout("spy.observeXHRActivity TRANSACTION_CLOSE " +
-                    Http.safeGetRequestName(request));
+            Trace.sysout("spy.observeXHRActivity TRANSACTION_CLOSE " +
+                Http.safeGetRequestName(request));
 
             var index = this.activeRequests.indexOf(request);
             this.activeRequests.splice(index, 2);
@@ -541,11 +536,8 @@ function getSpyForXHR(request, xhrRequest, context, noCreate)
 
     if (!context.spies)
     {
-        if (FBTrace.DBG_ERRORS)
-        {
-            FBTrace.sysout("spy.getSpyForXHR; ERROR no spies array " +
-                Http.safeGetRequestName(request));
-        }
+        Trace.sysout("spy.getSpyForXHR; ERROR no spies array " +
+            Http.safeGetRequestName(request));
         return;
     }
 
@@ -557,12 +549,15 @@ function getSpyForXHR(request, xhrRequest, context, noCreate)
         spy = context.spies[i];
         if (spy.request == request)
         {
-            if (FBTrace.DBG_SPY)
+            // Use the trace condition here to avoid additional code execution (Url.getFileName)
+            // when the tracing is switched off
+            if (Trace.active)
             {
                 var name = Url.getFileName(spy.request.URI.asciiSpec);
                 var origName = Url.getFileName(spy.request.originalURI.asciiSpec);
-                FBTrace.sysout("spy.getSpyForXHR; FOUND spy object " + name + ", " + origName);
+                Trace.sysout("spy.getSpyForXHR; FOUND spy object " + name + ", " + origName);
             }
+
             return spy;
         }
     }
@@ -576,10 +571,10 @@ function getSpyForXHR(request, xhrRequest, context, noCreate)
     var name = request.URI.asciiSpec;
     var origName = request.originalURI.asciiSpec;
 
-    if (FBTrace.DBG_SPY)
+    if (Trace.active)
     {
         var redirect = isRedirect(request);
-        FBTrace.sysout("spy.getSpyForXHR; NEW spy object (" +
+        Trace.sysout("spy.getSpyForXHR; NEW spy object (" +
             (redirect ? "redirected XHR" : "new XHR") + ") for: " +
             Url.getFileName(name) + ", " + Url.getFileName(origName));
     }
@@ -663,8 +658,7 @@ Firebug.Spy.XMLHttpRequestSpy.prototype =
             this.xhrRequest.addEventListener("abort", this.onAbort, false);
         }
 
-        if (FBTrace.DBG_SPY)
-            FBTrace.sysout("spy.attach; " + Http.safeGetRequestName(this.request));
+        Trace.sysout("spy.attach; " + Http.safeGetRequestName(this.request));
     },
 
     detach: function(force)
@@ -686,11 +680,8 @@ Firebug.Spy.XMLHttpRequestSpy.prototype =
         if (!force && this.transactionStarted && !this.transactionClosed)
             return;
 
-        if (FBTrace.DBG_SPY)
-        {
-            FBTrace.sysout("spy.detach; " + Http.safeGetRequestName(this.request) + ", " +
-                Url.getFileName(this.href));
-        }
+        Trace.sysout("spy.detach; " + Http.safeGetRequestName(this.request) + ", " +
+            Url.getFileName(this.href));
 
         // Remove itself from the list of active spies.
         Arr.remove(this.context.spies, this);
@@ -728,8 +719,7 @@ Firebug.Spy.XMLHttpRequestSpy.prototype =
     // Cache listener
     onStopRequest: function(context, request, responseText)
     {
-        if (FBTrace.DBG_SPY)
-            FBTrace.sysout("spy.onStopRequest: " + Http.safeGetRequestName(request));
+        Trace.sysout("spy.onStopRequest: " + Http.safeGetRequestName(request));
 
         if (!responseText)
             return;
@@ -743,12 +733,12 @@ Firebug.Spy.XMLHttpRequestSpy.prototype =
 
 function onHTTPSpyReadyStateChange(spy, event)
 {
-    if (FBTrace.DBG_SPY)
+    if (Trace.active)
     {
         var name = Url.getFileName(spy.request.URI.asciiSpec);
         var origName = Url.getFileName(spy.request.originalURI.asciiSpec);
 
-        FBTrace.sysout("spy.onHTTPSpyReadyStateChange " + spy.xhrRequest.readyState +
+        Trace.sysout("spy.onHTTPSpyReadyStateChange " + spy.xhrRequest.readyState +
             " (multipart: " + spy.xhrRequest.multipart + ") " + name + ", " + origName);
     }
 
@@ -764,9 +754,9 @@ function onHTTPSpyReadyStateChange(spy, event)
     // See issue 5049
     if (spy.xhrRequest.readyState == 1)
     {
-        if (FBTrace.DBG_SPY)
+        if (Trace.active)
         {
-            FBTrace.sysout("spy.onHTTPSpyReadyStateChange; ready state == 1, XHR probably being " +
+            Trace.sysout("spy.onHTTPSpyReadyStateChange; ready state == 1, XHR probably being " +
                 "reused, detach" + Http.safeGetRequestName(spy.request) + ", " +
                 Url.getFileName(spy.href));
         }
@@ -841,15 +831,13 @@ function callPageHandler(spy, event, originalHandler)
     }
     catch (exc)
     {
-        if (FBTrace.DBG_ERRORS)
-            FBTrace.sysout("spy.onHTTPSpyReadyStateChange: EXCEPTION " + exc, [exc, event]);
+        TraceError.sysout("spy.onHTTPSpyReadyStateChange: EXCEPTION " + exc, [exc, event]);
 
         var xpcError = Firebug.Errors.reparseXPC(exc, spy.context);
         if (xpcError)
         {
             // TODO attach trace
-            if (FBTrace.DBG_ERRORS)
-                FBTrace.sysout("spy.onHTTPSpyReadyStateChange: reparseXPC", xpcError);
+            TraceError.sysout("spy.onHTTPSpyReadyStateChange: reparseXPC", xpcError);
 
             // Make sure the exception is displayed in both Firefox & Firebug console.
             throw new Error(xpcError.message, xpcError.href, xpcError.lineNo);
@@ -863,9 +851,9 @@ function callPageHandler(spy, event, originalHandler)
 
 function onHTTPSpyLoad(spy)
 {
-    if (FBTrace.DBG_SPY)
+    if (Trace.active)
     {
-        FBTrace.sysout("spy.onHTTPSpyLoad: " + Http.safeGetRequestName(spy.request) + ", " +
+        Trace.sysout("spy.onHTTPSpyLoad: " + Http.safeGetRequestName(spy.request) + ", " +
             Url.getFileName(spy.href) + ", state: " + spy.xhrRequest.readyState);
     }
 
@@ -892,8 +880,7 @@ function onHTTPSpyLoad(spy)
 
 function onHTTPSpyError(spy)
 {
-    if (FBTrace.DBG_SPY)
-        FBTrace.sysout("spy.onHTTPSpyError; " + spy.href);
+    Trace.sysout("spy.onHTTPSpyError; " + spy.href);
 
     spy.detach(false);
     spy.loaded = true;
@@ -904,8 +891,7 @@ function onHTTPSpyError(spy)
 
 function onHTTPSpyAbort(spy)
 {
-    if (FBTrace.DBG_SPY)
-        FBTrace.sysout("spy.onHTTPSpyAbort: " + spy.href);
+    Trace.sysout("spy.onHTTPSpyAbort: " + spy.href);
 
     spy.detach(false);
     spy.loaded = true;
@@ -938,8 +924,7 @@ function onHTTPSpyAbort(spy)
  * @domplate Represents a template for XHRs logged in the Console panel. The body of the
  * log (displayed when expanded) is rendered using {@link Firebug.NetMonitor.NetInfoBody}.
  */
-with (Domplate) {
-Firebug.Spy.XHR = domplate(Firebug.Rep,
+Firebug.Spy.XHR = domplate(Rep,
 /** @lends Firebug.Spy.XHR */
 {
     tag:
@@ -1071,8 +1056,7 @@ Firebug.Spy.XHR = domplate(Firebug.Rep,
         {
             if (!context.window)
             {
-                if (FBTrace.DBG_ERRORS)
-                    FBTrace.sysout("spy.resend; ERROR no context");
+                TraceError.sysout("spy.resend; ERROR no context");
                 return;
             }
 
@@ -1093,8 +1077,7 @@ Firebug.Spy.XHR = domplate(Firebug.Rep,
         }
         catch (err)
         {
-            if (FBTrace.DBG_ERRORS)
-                FBTrace.sysout("spy.resend; EXCEPTION " + err, err);
+            TraceError.sysout("spy.resend; EXCEPTION " + err, err);
         }
     },
 
@@ -1178,7 +1161,6 @@ Firebug.Spy.XHR = domplate(Firebug.Rep,
         return items;
     }
 });
-};
 
 // ********************************************************************************************* //
 
@@ -1243,7 +1225,7 @@ function updateHttpSpyInfo(spy, updateInfoBody)
         return;
 
     if (!spy.params)
-        spy.params = Url.parseURLParams(spy.href + "");
+        spy.params = Url.parseURLParams(String(spy.href));
 
     if (!spy.requestHeaders)
         spy.requestHeaders = getRequestHeaders(spy);
@@ -1339,11 +1321,8 @@ function getResponseHeaders(spy)
     }
     catch (exc)
     {
-        if (FBTrace.DBG_SPY || FBTrace.DBG_ERRORS)
-        {
-            FBTrace.sysout("spy.getResponseHeaders; EXCEPTION " +
-                Http.safeGetRequestName(spy.request), exc);
-        }
+        TraceError.sysout("spy.getResponseHeaders; EXCEPTION " +
+            Http.safeGetRequestName(spy.request), exc);
     }
 
     return headers;
diff --git a/content/firebug/net/svgViewer.js b/content/firebug/net/svgViewer.js
index 6b32f90..b312693 100644
--- a/content/firebug/net/svgViewer.js
+++ b/content/firebug/net/svgViewer.js
@@ -1,8 +1,12 @@
 /* See license.txt for terms of usage */
 
 define([
-    "firebug/lib/object",
     "firebug/firebug",
+    "firebug/chrome/activableModule",
+    "firebug/chrome/module",
+    "firebug/chrome/rep",
+    "firebug/lib/trace",
+    "firebug/lib/object",
     "firebug/lib/domplate",
     "firebug/lib/locale",
     "firebug/lib/xpcom",
@@ -10,39 +14,46 @@ define([
     "firebug/lib/http",
     "firebug/net/netUtils"
 ],
-function(Obj, Firebug, Domplate, Locale, Xpcom, Css, Http, NetUtils) {
+function(Firebug, ActivableModule, Module, Rep, FBTrace, Obj, Domplate, Locale, Xpcom, Css, Http,
+    NetUtils) {
+
+"use strict";
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 // Constants
 
+var {domplate, DIV, PRE} = Domplate;
+
+var Trace = FBTrace.to("DBG_SVGVIEWER");
+
 // List of SVG related content types.
 var contentTypes =
 [
     "image/svg+xml",
 ];
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 // Model implementation
 
 /**
  * @module Implements viewer for SVG based network responses. In order to create a new
- * tab wihin network request detail, a listener is registered into
+ * tab within network request detail, a listener is registered into
  * <code>Firebug.NetMonitor.NetInfoBody</code> object.
  */
-Firebug.SVGViewerModel = Obj.extend(Firebug.Module,
+Firebug.SVGViewerModel = Obj.extend(Module,
 /** lends Firebug.SVGViewerModel */
 {
     dispatchName: "svgViewer",
 
     initialize: function()
     {
-        Firebug.ActivableModule.initialize.apply(this, arguments);
+        ActivableModule.initialize.apply(this, arguments);
         Firebug.NetMonitor.NetInfoBody.addListener(this);
     },
 
     shutdown: function()
     {
-        Firebug.ActivableModule.shutdown.apply(this, arguments);
+        ActivableModule.shutdown.apply(this, arguments);
         Firebug.NetMonitor.NetInfoBody.removeListener(this);
     },
 
@@ -51,8 +62,7 @@ Firebug.SVGViewerModel = Obj.extend(Firebug.Module,
      */
     initTabBody: function(infoBox, file)
     {
-        if (FBTrace.DBG_SVGVIEWER)
-            FBTrace.sysout("svgviewer.initTabBody", infoBox);
+        Trace.sysout("svgviewer.initTabBody", infoBox);
 
         // If the response is SVG let's display a pretty preview.
         if (this.isSVG(Http.safeGetContentType(file.request)))
@@ -60,8 +70,7 @@ Firebug.SVGViewerModel = Obj.extend(Firebug.Module,
             Firebug.NetMonitor.NetInfoBody.appendTab(infoBox, "SVG",
                 Locale.$STR("svgviewer.tab.SVG"));
 
-            if (FBTrace.DBG_SVGVIEWER)
-                FBTrace.sysout("svgviewer.initTabBody; SVG response available");
+            Trace.sysout("svgviewer.initTabBody; SVG response available");
         }
     },
 
@@ -105,8 +114,7 @@ Firebug.SVGViewerModel = Obj.extend(Firebug.Module,
             return;
         }
 
-        if (FBTrace.DBG_SVGVIEWER)
-            FBTrace.sysout("svgviewer.updateTabBody; SVG response parsed", doc);
+        Trace.sysout("svgviewer.updateTabBody; SVG response parsed", doc);
 
         // Override getHidden in these templates. The parsed SVG document is
         // hidden, but we want to display it using 'visible' styling.
@@ -135,15 +143,14 @@ Firebug.SVGViewerModel = Obj.extend(Firebug.Module,
     }
 });
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 // Domplate
 
 /**
  * @domplate Represents a template for displaying SVG parser errors. Used by
  * <code>Firebug.SVGViewerModel</code>.
  */
-with (Domplate) {
-Firebug.SVGViewerModel.ParseError = domplate(Firebug.Rep,
+Firebug.SVGViewerModel.ParseError = domplate(Rep,
 {
     tag:
         DIV({"class": "svgInfoError"},
@@ -170,14 +177,13 @@ Firebug.SVGViewerModel.ParseError = domplate(Firebug.Rep,
         return parts.join("\n");
     }
 });
-};
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 // Registration
 
 Firebug.registerModule(Firebug.SVGViewerModel);
 
 return Firebug.SVGViewerModel;
 
-// ************************************************************************************************
+// ********************************************************************************************* //
 });
diff --git a/content/firebug/net/timeInfoTip.js b/content/firebug/net/timeInfoTip.js
index a0b4830..cd4d166 100644
--- a/content/firebug/net/timeInfoTip.js
+++ b/content/firebug/net/timeInfoTip.js
@@ -2,18 +2,20 @@
 
 define([
     "firebug/firebug",
+    "firebug/chrome/rep",
     "firebug/lib/domplate",
     "firebug/lib/locale",
     "firebug/lib/string",
     "firebug/net/netUtils",
     "firebug/lib/dom",
 ],
-function(Firebug, Domplate, Locale, Str, NetUtils, Dom) {
-with (Domplate) {
+function(Firebug, Rep, Domplate, Locale, Str, NetUtils, Dom) {
 
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, FOR, DIV, SPAN, TD, TR, TABLE, TBODY, P, A} = Domplate;
+
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cr = Components.results;
@@ -25,7 +27,7 @@ const Cr = Components.results;
  * @domplate This template is used to render an info tip with detailed timing for network
  * requests. The info tip is used on the Net panel.
  */
-var TimeInfoTip = domplate(Firebug.Rep,
+var TimeInfoTip = domplate(Rep,
 {
     startTimeTag:
         TABLE({"class": "timeInfoTip"},
@@ -257,4 +259,4 @@ function calculatePos(time, elapsed)
 return TimeInfoTip;
 
 // ********************************************************************************************* //
-}});
+});
diff --git a/content/firebug/net/xmlViewer.js b/content/firebug/net/xmlViewer.js
index 8f6d410..6763f7f 100644
--- a/content/firebug/net/xmlViewer.js
+++ b/content/firebug/net/xmlViewer.js
@@ -1,8 +1,12 @@
 /* See license.txt for terms of usage */
 
 define([
-    "firebug/lib/object",
     "firebug/firebug",
+    "firebug/chrome/activableModule",
+    "firebug/chrome/module",
+    "firebug/chrome/rep",
+    "firebug/lib/trace",
+    "firebug/lib/object",
     "firebug/lib/domplate",
     "firebug/lib/locale",
     "firebug/lib/xpcom",
@@ -10,11 +14,18 @@ define([
     "firebug/lib/http",
     "firebug/net/netUtils"
 ],
-function(Obj, Firebug, Domplate, Locale, Xpcom, Css, Http, NetUtils) {
+function(Firebug, ActivableModule, Module, Rep, FBTrace, Obj, Domplate, Locale, Xpcom, Css, Http,
+    NetUtils) {
+
+"use strict";
 
 // ********************************************************************************************* //
 // Constants
 
+var {domplate, DIV, PRE} = Domplate;
+
+var Trace = FBTrace.to("DBG_XMLVIEWER");
+
 // List of XML related content types.
 var xmlContentTypes =
 [
@@ -34,33 +45,32 @@ var xmlContentTypes =
 
 /**
  * @module Implements viewer for XML based network responses. In order to create a new
- * tab wihin network request detail, a listener is registered into
+ * tab within network request detail, a listener is registered into
  * <code>Firebug.NetMonitor.NetInfoBody</code> object.
  */
-Firebug.XMLViewerModel = Obj.extend(Firebug.Module,
+Firebug.XMLViewerModel = Obj.extend(Module,
 /** lends Firebug.XMLViewerModel */
 {
     dispatchName: "xmlViewer",
 
     initialize: function()
     {
-        Firebug.ActivableModule.initialize.apply(this, arguments);
+        ActivableModule.initialize.apply(this, arguments);
         Firebug.NetMonitor.NetInfoBody.addListener(this);
     },
 
     shutdown: function()
     {
-        Firebug.ActivableModule.shutdown.apply(this, arguments);
+        ActivableModule.shutdown.apply(this, arguments);
         Firebug.NetMonitor.NetInfoBody.removeListener(this);
     },
 
     /**
-     * Check response's content-type and if it's a Xml, create a new tab with XML preview.
+     * Check response's content-type and if it's a XML, create a new tab with XML preview.
      */
     initTabBody: function(infoBox, file)
     {
-        if (FBTrace.DBG_XMLVIEWER)
-            FBTrace.sysout("xmlviewer.initTabBody", infoBox);
+        Trace.sysout("xmlviewer.initTabBody", infoBox);
 
         // If the response is XML let's display a pretty preview.
         if (this.isXML(Http.safeGetContentType(file.request)))
@@ -68,8 +78,7 @@ Firebug.XMLViewerModel = Obj.extend(Firebug.Module,
             Firebug.NetMonitor.NetInfoBody.appendTab(infoBox, "XML",
                 Locale.$STR("xmlviewer.tab.XML"));
 
-            if (FBTrace.DBG_XMLVIEWER)
-                FBTrace.sysout("xmlviewer.initTabBody; XML response available");
+            Trace.sysout("xmlviewer.initTabBody; XML response available");
         }
     },
 
@@ -113,10 +122,9 @@ Firebug.XMLViewerModel = Obj.extend(Firebug.Module,
             return;
         }
 
-        if (FBTrace.DBG_XMLVIEWER)
-            FBTrace.sysout("xmlviewer.updateTabBody; XML response parsed", doc);
+        Trace.sysout("xmlviewer.updateTabBody; XML response parsed", doc);
 
-        // Override getHidden in these templates. The parsed XML documen is
+        // Override getHidden in these templates. The parsed XML document is
         // hidden, but we want to display it using 'visible' styling.
         var templates = [
             Firebug.HTMLPanel.CompleteElement,
@@ -150,8 +158,7 @@ Firebug.XMLViewerModel = Obj.extend(Firebug.Module,
  * @domplate Represents a template for displaying XML parser errors. Used by
  * <code>Firebug.XMLViewerModel</code>.
  */
-with (Domplate) {
-Firebug.XMLViewerModel.ParseError = domplate(Firebug.Rep,
+Firebug.XMLViewerModel.ParseError = domplate(Rep,
 {
     tag:
         DIV({"class": "xmlInfoError"},
@@ -178,7 +185,6 @@ Firebug.XMLViewerModel.ParseError = domplate(Firebug.Rep,
         return parts.join("\n");
     }
 });
-};
 
 // ********************************************************************************************* //
 // Registration
diff --git a/content/firebug/trace/traceModule.js b/content/firebug/trace/traceModule.js
index 25d7afb..ea9fb8a 100644
--- a/content/firebug/trace/traceModule.js
+++ b/content/firebug/trace/traceModule.js
@@ -1,10 +1,11 @@
 /* See license.txt for terms of usage */
 
 define([
+    "firebug/firebug",
     "firebug/lib/object",
-    "firebug/firebug"
+    "firebug/chrome/module",
 ],
-function(Obj, Firebug) {
+function(Firebug, Obj, Module) {
 
 // ************************************************************************************************
 // Trace Module
@@ -16,7 +17,7 @@ function(Obj, Firebug) {
  * Firebug.TraceModule.addListener - appends a tracing listener.
  * Firebug.TraceModule.removeListener - removes a tracing listener.
  */
-Firebug.TraceModule = Obj.extend(Firebug.Module,
+Firebug.TraceModule = Obj.extend(Module,
 {
     dispatchName: "traceModule",
 
diff --git a/defaults/preferences/firebug.js b/defaults/preferences/firebug.js
index 95abdbb..7e84561 100644
--- a/defaults/preferences/firebug.js
+++ b/defaults/preferences/firebug.js
@@ -25,14 +25,11 @@ pref("extensions.firebug.activateSameOrigin", true);
 pref("extensions.firebug.toolbarCustomizationDone", false);
 pref("extensions.firebug.showBreakNotification", true);
 pref("extensions.firebug.stringCropLength", 50);
+pref("extensions.firebug.hideDefaultInspector", false);
 pref("extensions.firebug.delayLoad", true);
 pref("extensions.firebug.enableOrion", true);
 pref("extensions.firebug.clearAnnotationsConfirmation", true);
 
-// Default DevTools (xxxHonza: these preferences should be probably unified into one)
-pref("extensions.firebug.hideDefaultInspector", false);
-pref("extensions.firebug.defaultDevToolsSetting", false);
-
 // Command line
 pref("extensions.firebug.commandEditor", false);
 pref("extensions.firebug.alwaysShowCommandLine", false);
@@ -78,6 +75,7 @@ pref("extensions.firebug.expandMutations", false);
 pref("extensions.firebug.scrollToMutations", false);
 pref("extensions.firebug.shadeBoxModel", true);
 pref("extensions.firebug.showQuickInfoBox", false);
+pref("extensions.firebug.pinQuickInfoBox", false);
 pref("extensions.firebug.displayedAttributeValueLimit", 1024);
 pref("extensions.firebug.multiHighlightLimit", 250);
 
@@ -86,7 +84,7 @@ pref("extensions.firebug.onlyShowAppliedStyles", false);
 pref("extensions.firebug.showUserAgentCSS", false);
 pref("extensions.firebug.expandShorthandProps", false);
 pref("extensions.firebug.cssEditMode", "Source");
-pref("extensions.firebug.colorDisplay", "hex");
+pref("extensions.firebug.colorDisplay", "authored");
 
 // Computed
 pref("extensions.firebug.computedStylesDisplay", "grouped");
@@ -134,6 +132,10 @@ pref("extensions.firebug.netParamNameLimit", 25);
 pref("extensions.firebug.netShowPaintEvents", false);
 pref("extensions.firebug.netShowBFCacheResponses", false);
 pref("extensions.firebug.netHtmlPreviewHeight", 100);
+pref("extensions.firebug.netResponseHeadersVisible", true);
+pref("extensions.firebug.netRequestHeadersVisible", true);
+pref("extensions.firebug.netCachedHeadersVisible", false);
+pref("extensions.firebug.netPostRequestHeadersVisible", false);
 
 // JSON Preview
 pref("extensions.firebug.sortJsonPreview", false);
@@ -146,22 +148,22 @@ pref("extensions.firebug.cache.responseLimit", 5242880);
 pref("extensions.firebug.externalEditors", "");
 
 // Keyboard
-pref("extensions.firebug.key.shortcut.reenterCommand", "control shift e");
+pref("extensions.firebug.key.shortcut.reenterCommand", "accel shift e");
 pref("extensions.firebug.key.shortcut.toggleInspecting", "accel shift c");
 pref("extensions.firebug.key.shortcut.toggleQuickInfoBox", "accel shift i");
 pref("extensions.firebug.key.shortcut.toggleProfiling", "accel shift p");
 pref("extensions.firebug.key.shortcut.focusCommandLine", "accel shift l");
 pref("extensions.firebug.key.shortcut.focusFirebugSearch", "accel f");
 pref("extensions.firebug.key.shortcut.focusWatchEditor", "accel shift n");
-pref("extensions.firebug.key.shortcut.focusLocation", "control shift VK_SPACE");
-pref("extensions.firebug.key.shortcut.nextObject", "control .");
-pref("extensions.firebug.key.shortcut.previousObject", "control ,");
+pref("extensions.firebug.key.shortcut.focusLocation", "accel shift VK_SPACE");
+pref("extensions.firebug.key.shortcut.nextObject", "accel .");
+pref("extensions.firebug.key.shortcut.previousObject", "accel ,");
 pref("extensions.firebug.key.shortcut.toggleFirebug", "VK_F12");
 pref("extensions.firebug.key.shortcut.closeFirebug", "shift VK_F12");
 pref("extensions.firebug.key.shortcut.detachFirebug", "accel VK_F12");
 pref("extensions.firebug.key.shortcut.leftFirebugTab", "accel shift VK_PAGE_UP");
 pref("extensions.firebug.key.shortcut.rightFirebugTab", "accel shift VK_PAGE_DOWN");
-pref("extensions.firebug.key.shortcut.previousFirebugTab", "control `");
+pref("extensions.firebug.key.shortcut.previousFirebugTab", "accel `");
 pref("extensions.firebug.key.shortcut.clearConsole", "accel shift r");
 pref("extensions.firebug.key.shortcut.navBack", "accel shift VK_LEFT");
 pref("extensions.firebug.key.shortcut.navForward", "accel shift VK_RIGHT");
@@ -175,4 +177,4 @@ pref("extensions.firebug.key.shortcut.toggleBreakOn", "accel alt b");
 pref("extensions.firebug.a11y.enable", false);
 
 // Known Issues
-pref("extensions.firebug.showSlowJSDMessage2", true);
+pref("extensions.firebug.showSlowJSDMessage", true);
diff --git a/defaults/preferences/tracingConsole.js b/defaults/preferences/tracingConsole.js
index 4189117..d0858c9 100644
--- a/defaults/preferences/tracingConsole.js
+++ b/defaults/preferences/tracingConsole.js
@@ -40,7 +40,6 @@ pref("extensions.firebug.DBG_JSONVIEWER", false);       // JSON explorer
 pref("extensions.firebug.DBG_LINETABLE", false);        //
 pref("extensions.firebug.DBG_LOCALE", false);           // localization, missing strings
 pref("extensions.firebug.DBG_LOCATIONS", false);        // panelFileList
-pref("extensions.firebug.DBG_MEMORY_PROFILER", false);  //
 pref("extensions.firebug.DBG_MENU", false);             // Menus and context menus in Firebug
 pref("extensions.firebug.DBG_MODULES", false);          // moduleloading
 pref("extensions.firebug.DBG_NET", false);              // net.js
@@ -54,7 +53,6 @@ pref("extensions.firebug.DBG_REGISTRATION", false);     // registry (modules pan
 pref("extensions.firebug.DBG_SEARCH", false);           // search box
 pref("extensions.firebug.DBG_SHORTCUTS", false);        // Keyboard shortcuts
 pref("extensions.firebug.DBG_SOURCEFILES", false);      // debugger and sourceCache
-pref("extensions.firebug.DBG_SPY", false);              // spy.js
 pref("extensions.firebug.DBG_STACK", false);            // call stack, mostly debugger.js
 pref("extensions.firebug.DBG_STORAGE", false);          // storageService
 pref("extensions.firebug.DBG_SVGVIEWER", false);        // SVG explorer
diff --git a/install.rdf b/install.rdf
index da805ed..1a2edfa 100644
--- a/install.rdf
+++ b/install.rdf
@@ -5,7 +5,7 @@
 
   <Description about="urn:mozilla:install-manifest">
     <em:id>firebug at software.joehewitt.com</em:id>
-    <em:version>1.12.6</em:version>
+    <em:version>1.13.0a8</em:version>
     <em:type>2</em:type>
     <em:bootstrap>true</em:bootstrap>
 
@@ -13,7 +13,7 @@
     <em:targetApplication>
       <Description>
         <em:id>toolkit at mozilla.org</em:id>
-        <em:minVersion>23.0</em:minVersion>
+        <em:minVersion>26.0</em:minVersion>
         <em:maxVersion>29.0</em:maxVersion>
       </Description>
     </em:targetApplication>
@@ -22,7 +22,7 @@
     <em:targetApplication>
       <Description>
         <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
-        <em:minVersion>23.0</em:minVersion>
+        <em:minVersion>26.0</em:minVersion>
         <em:maxVersion>29.0</em:maxVersion>
       </Description>
     </em:targetApplication>
@@ -56,10 +56,11 @@
     <em:contributor>Bharath Thiruveedula</em:contributor>
     <em:contributor>Nathan Mische</em:contributor>
     <em:contributor>Belakhdar Abdeldjalil</em:contributor>
+    <em:contributor>Jakob Kaltenbrunner</em:contributor>
 
     <em:iconURL>chrome://firebug/skin/firebug64.png</em:iconURL>
     <em:homepageURL>http://www.getfirebug.com/</em:homepageURL>
-
+    <em:updateURL>https://getfirebug.com/releases/firebug/1.13/update.rdf</em:updateURL>
 
     <em:translator>Leszek(teo)Zyczkowski (pl-PL)</em:translator>
     <em:translator>markh (nl)</em:translator>
diff --git a/locale/bg/cookies.properties b/locale/bg/cookies.properties
index 66695d4..9978a92 100644
--- a/locale/bg/cookies.properties
+++ b/locale/bg/cookies.properties
@@ -1,272 +1,138 @@
-# LOCALIZATION NOTE (cookies.Panel): Title of the panel in Firebug's UI.
-cookies.Panel=Cookies
-panel.tip.cookies=Allows inspecting and manipulating the cookies
-# LOCALIZATION NOTE (cookies.Session): Label used to mark session cookies.
-cookies.Session=Session
-# LOCALIZATION NOTE (cookies.AllowGlobally, cookies.tip.AllowGlobally):
-# Label used for cookies permission.
-cookies.AllowGlobally=Accept Cookies From Sites
-cookies.tip.AllowGlobally=Accept all cookies by default or block all cookies by default
-# LOCALIZATION NOTE (cookies.showCookieEvents, cookies.tip.showCookieEvents):
-# Label used in Cookies panel options menu (the small arrow next to the Cookies panel label).
-# If checked, various cookies events are displayed in Firebug's Console panel.
-cookies.showCookieEvents=Show Cookie Events
-cookies.tip.showCookieEvents=Log cookie events (changed, deleted) into the console
-# LOCALIZATION NOTE (cookies.clearWhenDeny): Label used in Cookies panel options menu (the
-# small arrow next to the Cookies panel label). If checked, cookies are automatically removed
-# if the permission is changed to deny.
-# xxxHonza: currently not displayed in the UI
-cookies.clearWhenDeny=Clear cookies when denying
-# LOCALIZATION NOTE (cookies.Cut, cookies.Copy, cookies.CopyAll, cookies.Paste,
-# cookies.Delete): Support for clipboard actions. Used in a cookie context menu
-# (right click on a cookie in the Cookies panel).
-cookies.Cut=Cut
-cookies.Copy=Copy
-cookies.CopyAll=Copy All
-cookies.Paste=Paste
-cookies.Delete=Delete
-# LOCALIZATION NOTE (cookies.Clear Value): Label for an item in the cookie context menu.
-# Clears cookie value, but not removes the cookie itself.
-cookies.Clear_Value=Clear Value
-# LOCALIZATION NOTE (cookies.Edit): Label for an item in the cookie context menu. Displays
-# a dialog for editing clicked cookie.
-cookies.Edit=Edit
-cookies.Accept=Accept
-# LOCALIZATION NOTE (cookies.header.Reset_Header): Used in cookie header context menu (right
-# click on a header in the Cookies panel). This action restores default state of the header
-# (visibility and size of all columns)
-cookies.header.Reset_Header=Reset Header
-# LOCALIZATION NOTE (cookies.Intro, cookies.ExceptionsTitle): Used for managing Cookie panel
-# enablement. Used only if Firebug 1.2 and 1.3 is installed
-cookies.Intro=You can specify which web sites are always or never allowed to use cookies.\nType the exact address of the site you want to manage and then click Block,\nAllow for Session, or Allow.
-cookies.ExceptionsTitle=Exceptions - Cookies
-# LOCALIZATION NOTE (cookies.modulemanager.description, cookies.HostEnable, cookies.HostDisable,
-# cookies.Permissions, cookies.PermissionsIntro): Various labels used for mangaing Cookies panel
-# enablement. Used only if Firebug 1.2 and 1.3 is installed.
-# examples: Enable Cookies panel for www.softwareishard.com
-cookies.modulemanager.description=Support for Cookie Monitoring
-cookies.HostEnable=Enable Cookies panel for %S
-cookies.HostDisable=Disable Cookies panel for %S
-cookies.Permissions=Enable or Disable Cookies panel
-cookies.PermissionsIntro=Choose web sites where Cookies panel will be enabled or disabled.
-# LOCALIZATION NOTE (cookies.SystemPages, cookies.LocalFiles): Labels used in the Cookies
-# panel if it's disabled (only for Firebug 1.2 and 1.3).
-cookies.SystemPages=System Pages
-cookies.LocalFiles=Local Files
-# LOCALIZATION NOTE (cookies.confirm.removeall): Used in a confirmation dialog when all cookies
-# of a website are going to be deleted (or permission is set do deny and cookies should be deleted).
-cookies.confirm.removeall=Do you want to remove all cookies in the list?
-# LOCALIZATION NOTE (cookies.confirm.removeallsession): Used in a confirmation dialog when
-# all session cookies are going to be deleted
-cookies.confirm.removeallsession=Do you want to remove all session cookies in the list?
-# LOCALIZATION NOTE (cookies.confirm.Remove_All_From_Host): Used in a confirmation dialog when cookies
-# from a specific host are going to be deleted (or permission is set do deny and cookies should be deleted).
-cookies.confirm.Remove_All_From_Host=Do you want to remove all cookies from %S?
-# LOCALIZATION NOTE (cookies.msg.Do_not_show_this_message_again): 
-# Message within a confirmation dialog that is displayed when deleting cookies.
-# This message is displayed next to a check-box that can be used to disabled this
-# confirmation.
-cookies.msg.Do_not_show_this_message_again=Do not show this message again
-# LOCALIZATION NOTE (cookies.Confirm_cookie_removal): A label used for option (mini tab menu)
-# that says whether a confirmation dialog is displayed when removing cookies. 
-cookies.Confirm_cookie_removal=Confirm Cookie Removal
-cookies.tip.Confirm_cookie_removal=If checked, there is a confirmation dialog displayed before deleting all cookies in the list.
-# LOCALIZATION NOTE (cookies.removeall.tooltip): A tooltip for Cookies->Remove Cookies menu
-cookies.removeall.tooltip=Remove all cookies in the list.
-# LOCALIZATION NOTE (cookies.Remove_Session_Cookies): A label used for
-# Cookies->Remove Session Cookies menu
-cookies.Remove_Session_Cookies=Remove Session Cookies
-# LOCALIZATION NOTE (cookies.removeall.tooltip): A tooltip for Cookies->Remove Session Cookies menu
-cookies.removeallsession.tooltip=Remove all session cookies in the list.
-# LOCALIZATION NOTE (cookies.createcookie.tooltip): A tooltip for Cookies->Create Cookie menu
-# examples: Create new cookie for www.softwareishard.com
-cookies.createcookie.tooltip=Create a new cookie for %S
-# LOCALIZATION NOTE (cookies.createcookie.defaultvalue): Default value for newly created cookie.
-cookies.createcookie.defaultvalue=Value
-# LOCALIZATION NOTE (cookies.perm.manage.tooltip): A tooltip for permissions button that
-# is located on a Cookis panel toolbar.
-# examples: Manage cookie permissions for www.softwareishard.com
-cookies.perm.manage.tooltip=Manage cookie permissions for %S
-# LOCALIZATION NOTE (cookies.console.cookiescleared): A label for a cookie event that is
-# displayed in Firebug's Console panel when all cookie in Firefox are removed
-# To remove all cookies use menu on Cookis panel toolbar: Tools->Show All Cookies and click
-# Remove All Cookies in the dialog.
-cookies.console.cookiescleared=All cookies have been removed.
-# LOCALIZATION NOTE (cookies.console.cookiescleared): A label for a cookie event that is
-# displayed in Firebug's Console panel when all cookie in Firefox are removed
-# To remove all cookies use menu on Cookis panel toolbar: Tools->Show All Cookies and click
-# Remove All Cookies in the dialog.
-cookies.console.sessioncookiescleared=All session cookies have been removed.
-# LOCALIZATION NOTE (cookies.console.cookiesrejected, cookies.console.nocookiesreceived):
-# A label for a cookie event that is displayed in Firebug's Console panel when cookies are
-# rejected by the current site.
-cookies.console.cookiesrejected=Cookies rejected:
-cookies.console.nocookiesreceived=No cookies received
-# LOCALIZATION NOTE (cookies.console.cookie, cookies.console.deleted, cookies.console.added,
-# cookies.console.changed, cookies.console.cleared): Various labels that are used for cookie
-# events displayed in Firebug's Console panel.
-cookies.console.cookie=Cookie
-cookies.console.deleted=deleted
-cookies.console.added=added
-cookies.console.changed=changed
-cookies.console.cleared=cleared
-# LOCALIZATION NOTE (cookies.domain.label): Label used for marking domain cookie.
-# Displayed in the Cookies panel for domain cookies.
-# xxxHonza: not used in the UI now.
-cookies.domain.label=Domain
-# LOCALIZATION NOTE (cookies.secure.label): Label used for marking secure cookie.
-# Displayed in the Cookies panel for secure cookies.
-cookies.secure.label=Secure
-# LOCALIZATION NOTE (cookies.status.accepted, cookies.status.downgraded,
-# cookies.status.flagged, cookies.status.rejected): Various statuses of a cookie
-# displayed in Status column.
-cookies.status.accepted=Accepted
-cookies.status.downgraded=Downgraded
-cookies.status.flagged=Flagged
-cookies.status.rejected=Rejected
-# LOCALIZATION NOTE (cookies.info.valuetab.label, cookies.info.rawdatatab.Raw_Data,
-# cookies.info.jsontab.JSON, cookies.info.xmltab.XML): A label for tabs displayed
-# if a cookie entry is expanded. Tab are only available in the UI, if necessary.
-cookies.info.valuetab.label=Value
-cookies.info.rawdatatab.Raw_Data=Raw Data
+cookies.Panel=Бисквитки
+panel.tip.cookies=Преглед и промяна на бисквитките
+cookies.Session=Сесия
+cookies.AllowGlobally=Приемане на бисквитки от сайтовете
+cookies.tip.AllowGlobally=Стандартно всички бисквитки да се приемат или всички да се отхвърлят
+cookies.showCookieEvents=Събития за бисквитките
+cookies.tip.showCookieEvents=Записване на събитията (променена, изтрита) за бисквитките в журнала
+cookies.clearWhenDeny=Изчистване на отхвърлените бисквитки
+cookies.Cut=Изрязване
+cookies.Copy=Копиране
+cookies.CopyAll=Копиране на всичко
+cookies.Paste=Поставяне
+cookies.Delete=Изтриване
+cookies.Clear_Value=Изтриване на стойността
+cookies.Edit=Редактиране
+cookies.Accept=Приемане
+cookies.header.Reset_Header=Стандартни колони
+cookies.Intro=Можете да указвате кои сайтове винаги имат или никога нямат право да\nизползват бисквитки. Въведете точния адрес на сайта, които искате да\nредактирате и натиснете „Отхвърляне“, „Приемане на сесийните“ или „Приемане“.
+cookies.ExceptionsTitle=Изключения — бисквитки
+cookies.modulemanager.description=Наблюдение на бисквитките
+cookies.HostEnable=Включване на панела за бисквитките за „%S“
+cookies.HostDisable=Изключване на панела за бисквитките за „%S“
+cookies.Permissions=Включване или изключване на панела за бисквитките
+cookies.PermissionsIntro=Избор на сайтовете, за които панелът за бисквитките ще е включен
+cookies.SystemPages=Системни страници
+cookies.LocalFiles=Локални страници
+cookies.confirm.removeall=Да се изтрият ли всички бисквитки в списъка?
+cookies.confirm.removeallsession=Да се изтрият ли всички сесийни бисквитки в списъка?
+cookies.confirm.Remove_All_From_Host=Да се изтрият ли всички бисквитки от сайта „%S“?
+cookies.Confirm_cookie_removal=Питане при изтриване
+cookies.tip.Confirm_cookie_removal=При изтриването на всички бисквитки в списъка да се извежда диалог за потвърждение
+cookies.removeall.tooltip=Изтриване на всички бисквитки в списъка
+cookies.Remove_Session_Cookies=Изтриване на всички сесийни бисквитки в списъка
+cookies.removeallsession.tooltip=Управление на правата за бисквитки на сайта „%S“
+cookies.createcookie.tooltip=Създаване на нова бисквитка за „%S“
+cookies.createcookie.defaultvalue=Стойност
+cookies.perm.manage.tooltip=Управление на правата за бисквитките на сайта „%S“
+cookies.console.cookiescleared=Всички бисквитки са изтрити
+cookies.console.sessioncookiescleared=Всички сесийни бисквитки са изтрити
+cookies.console.cookiesrejected=Блокирани бисквитки:
+cookies.console.nocookiesreceived=Не са получени никакви бисквитки
+cookies.console.cookie=Бисквитка
+cookies.console.deleted=изтриване
+cookies.console.added=добавяне
+cookies.console.changed=промяна
+cookies.console.cleared=изчистване
+cookies.domain.label=Домейн
+cookies.secure.label=Сигурна бисквитка
+cookies.status.accepted=Приета
+cookies.status.downgraded=Понижена
+cookies.status.flagged=Маркирана
+cookies.status.rejected=Отхвърлена
+cookies.info.valuetab.label=Стойност
+cookies.info.rawdatatab.Raw_Data=Суров вид
 cookies.info.jsontab.JSON=JSON
 cookies.info.xmltab.XML=XML
-# LOCALIZATION NOTE (cookies.default.session, cookies.default.thirdPartySession,
-# cookies.default.thirdParty, cookies.default.allow, cookies.default.deny,
-# cookies.default.warn, cookies.host.session, cookies.host.accept,
-# cookies.host.reject): Various labels for cookie permissions.
-# examples: Accept cookies from www.softwareishard.com
-cookies.default.session=Default (Accept session cookies)
-cookies.default.thirdPartySession=Default (Accept session cookies)
-cookies.default.thirdParty=Default (Accept cookies)
-cookies.default.allow=Default (Accept cookies)
-cookies.default.deny=Default (Deny cookies)
-cookies.default.warn=Default (Warn before accepting cookie)
-cookies.host.session=Accept session cookies from %S 
-cookies.host.accept=Accept cookies from %S 
-cookies.host.reject=Deny cookies from %S
-# LOCALIZATION NOTE (cookies.edit.invalidname, cookies.edit.invalidhost,
-# cookies.edit.invalidpath): Various error messages used when a new cookie is created
-# using a cookie dialog. Use Cookies->Create Cookie menu to show the dialog.
-cookies.edit.invalidname=Cookie name is not valid.
-cookies.edit.invalidhost=Cookie host is not valid.
-cookies.edit.invalidpath=Cookie path is not valid.
-# LOCALIZATION NOTE (cookies.header.name, cookies.header.value, cookies.header.rawValue,
-# cookies.header.domain, cookies.header.size, cookies.header.path, cookies.header.expires,
-# cookies.header.security, cookies.header.status, cookies.header.httponly):
-# Column labels used in the cookie header.
-cookies.header.name=Name
-cookies.header.value=Value
-cookies.header.rawValue=Raw Value
-cookies.header.domain=Domain
-cookies.header.size=Size
-cookies.header.path=Path
-cookies.header.expires=Expires
-cookies.header.security=Security
-cookies.header.httponly=HttpOnly
-# LOCALIZATION NOTE (cookies.header.name.tooltip, cookies.header.value.tooltip,
-# cookies.header.rawValue.tooltip, cookies.header.domain.tooltip, cookies.header.size.tooltip,
-# cookies.header.path.tooltip, cookies.header.expires.tooltip, cookies.header.security.tooltip,
-# cookies.header.httponly.tooltip):
-# Column tooltips used in the cookie header.
-cookies.header.name.tooltip=Name of the cookie
-cookies.header.value.tooltip=Value stored for the cookie
-cookies.header.rawValue.tooltip=Raw value stored for the cookie
-cookies.header.domain.tooltip=Domain that has stored the cookie
-cookies.header.size.tooltip=Size of the stored cookie
-cookies.header.path.tooltip=Directory where the cookie is active
-cookies.header.expires.tooltip=Expiration date for the cookie
-cookies.header.security.tooltip=Shows whether it is a secure cookie or not
-cookies.header.httponly.tooltip=Shows if the cookie is an HTTP only cookie
-# LOCALIZATION NOTE (cookies.netinfo.Received_Cookies, cookies.netinfo.Sent_Cookies):
-# Labels used in the Firebug's net panel. If there are any cookies associated with a network
-# request, there is an additional Cookies tab displayed when the user expands the request.
-# These labels are used within this tab.
-cookies.netinfo.Received_Cookies=Received Cookies
-cookies.netinfo.Sent_Cookies=Sent Cookies
-# LOCALIZATION NOTE (cookies.Path_Filter): Label for a Filter->Path Filter
-# xxxHonza: Not implemented yet.
-cookies.Path_Filter=Path Filter
-# LOCALIZATION NOTE (cookies.menu.Cookies): Label for menu Cookies, dislayed on the toolbar.
-cookies.menu.Cookies=Cookies
-# LOCALIZATION NOTE (cookies.export.Export_All_Cookies, cookies.export.Export_All_Cookies_Tooltip,
-# cookies.export.Export_For_Site, cookies.export.Export_For_Site_Tooltip): Labels and 
-# tooltips for exporting menus available under Cookies menus.
-cookies.export.Export_All_Cookies=Export All Cookies
-cookies.export.Export_All_Cookies_Tooltip=Export all browser cookies to cookies.txt file
-cookies.export.Export_For_Site=Export Cookies For This Site
-cookies.export.Export_For_Site_Tooltip=Export cookies for %S into cookies.txt file
-# LOCALIZATION NOTE (cookies.message.There_is_no_active_page): An error message displayed
-# when the user is trying to create a cookie and there is no active page (site). This should
-# never happen.
-cookies.message.There_is_no_active_page=There is no active page.
-# LOCALIZATION NOTE (cookies.Break_On_Cookie, cookies.Disable_Break_On_Cookie):
-# Tooltips for resume button that are used when the Cookies panel is currently selected.
-# The button allows stopping JS execution when a cookie on the current page is modified
-# added or removed.
-cookies.Break_On_Cookie=Break On Cookie Change
-cookies.Disable_Break_On_Cookie=Disable Break On Cookie Change
-# LOCALIZATION NOTE (cookies.Cookie_Breakpoints): Name of Cookie breakpoint group
-# displayed in Breakpoints panel (in the Script panel)
-cookies.Cookie_Breakpoints=Cookie Breakpoints
-# LOCALIZATION NOTE (cookies.Break_On_Cookie, cookies.menu.tooltip.Break_On_Cookie):
-# Label and tooltip for a context menu item used when the user right clicks on a cookie. 
-# examples: Break on 'MyCookie' cookie
-# examples: Break on 'MyCookie' when removed or changed.
-cookies.menu.Break_On_Cookie=Break On '%S' cookie
-cookies.menu.tooltip.Break_On_Cookie=Break on '%S' when removed or changed.
-# LOCALIZATION NOTE (cookies.menu.Edit_Breakpoint_Condition): Label for context menu item
-# used when user right clicks on a cookie with existing breakpoint.
-cookies.menu.Edit_Breakpoint_Condition=Edit Breakpoint Condition
-# LOCALIZATION NOTE (cookies.Breakpoint_condition_evaluation_fails): Message displayed
-# within the Firebug Console panel if a cookie breakpoint condition fails when evaluated. 
-cookies.Breakpoint_condition_evaluation_fails=Breakpoint condition evaluation fails
-# DTD strings converted (main Firecokie UI, see cookiePanel.xul)
-cookies.RemoveAll=Remove Cookies
-cookies.Create=Create Cookie
-# LOCALIZATION NOTE (cookies.Tools, cookies.ToolsTooltip) Label and tooltip for Tools
-# menu on Cookies toolbar.
-cookies.Tools=Tools
-cookies.ToolsTooltip=Tools
-# LOCALIZATION NOTE (cookies.ViewAll, cookies.ViewAllTooltip) Label and tooltip for
-# view all cookies menu item (Tools menu). This action opens Firefox built-in cookie manager window.
-cookies.ViewAll=Show All Cookies
-cookies.ViewAllTooltip=Open the built-in Cookie Manager
-# LOCALIZATION NOTE (cookies.ViewExceptions, cookies.ViewExceptionsTooltip) Label and
-# tooltip for Site Permissions menu item (Tools menu). This action opens Firefox built-in
-# dialog for setting web site cookie permissions.
-cookies.ViewExceptions=Web Sites Permissions
-cookies.ViewExceptionsTooltip=View list of allowed or prohibited web sites
-# LOCALIZATION NOTE (cookies.Filter, cookies.FilterTooltip, cookies.filter.byPath,
-# cookies.filter.byPathTooltip, cookies.filter.showRejectedCookies,
-# cookies.filter.showRejectedCookiesTooltip): Labels and tooltips for cookie Filter menu
-# presented on the Cookie toolbar.
-cookies.Filter=Filter
-cookies.FilterTooltip=Use given options to filter the cookie list.
-cookies.filter.byPath=Filter Cookies By Current Path
-cookies.filter.byPathTooltip=Show only cookies that match the current path.
-cookies.filter.showRejectedCookies=Show Rejected Cookies
-cookies.filter.showRejectedCookiesTooltip=Display even rejected cookies in the list.
-# LOCALIZATION NOTE (cookies.edit.title, cookies.edit.name.label,
-# cookies.edit.domain.label, cookies.edit.path.label, cookies.edit.expire.label,
-# cookies.edit.value.label, cookies.edit.secure.label, cookies.edit.httponly.label,
-# cookies.edit.session.label, cookies.edit.urlEncode.label): Edit Cookie dialog UI
-cookies.edit.title=Edit Cookie
-cookies.edit.name.label=Name:
-cookies.edit.domain.label=Host:
-cookies.edit.path.label=Path:
-cookies.edit.expire.label=Expires:
-cookies.edit.value.label=Value:
-cookies.edit.secure.label=Secure Cookie
-cookies.edit.httponly.label=HTTP Only
-cookies.edit.session.label=Session
-cookies.edit.urlEncode.label=URL encode value
-# LOCALIZATION NOTE (cookies.console.Cookies, cookies.console.Filter_By_Cookies)
-# Label and tooltip for a toolbar button displayed on the Console panel. Used for filtering.
-cookies.console.Cookies=Cookies
-cookies.console.Filter_By_Cookies=Filter By Cookies
-# LOCALIZATION NOTE (firebug.shortcut.removeAllCookies.label) Label used by the
-# Customize Shortcuts dialog (Firebug menu)
-firebug.shortcut.removeAllCookies.label=Remove All Cookies
-cookie.sizeinfo.Size=Size
-cookie.sizeinfo.Raw_Size=Raw Size
+cookies.default.session=Стандартно (сесийните бисквитки се приемат)
+cookies.default.thirdPartySession=Стандартно (сесийните бисквитки се приемат)
+cookies.default.thirdParty=Стандартно (всички бисквитки се приемат)
+cookies.default.allow=Стандартно (всички бисквитки се приемат)
+cookies.default.deny=Стандартно (всички бисквитки се отхвърлят)
+cookies.default.warn=Стандартно (предупреждение преди приемането на бисквитка)
+cookies.default.limitThirdParty=Стандартно (отхвърляне на бисквитките от трети страни)
+cookies.host.session=Приемане на сесийните бисквитки от „%S“
+cookies.host.accept=Приемане на бисквитките от „%S“
+cookies.host.reject=Отхвърляне на бисквитките от „%S“
+cookies.host.limitThirdParty=Отхвърляне на бисквитките от трети страни за „%S“
+cookies.edit.invalidname=Неправилно име на бисквитка
+cookies.edit.invalidhost=Неправилен хост на бисквитка
+cookies.edit.invalidpath=Неправилен път за бисквитка
+cookies.header.name=Име
+cookies.header.value=Стойност
+cookies.header.rawValue=Необр. стойност
+cookies.header.domain=Домейн
+cookies.header.size=Размер
+cookies.header.rawSize=Необр. размер
+cookies.header.path=Път
+cookies.header.expires=Давност
+cookies.header.security=Сигурна
+cookies.header.httponly=За HTTP
+cookies.header.maxAge=Макс. възраст
+cookies.header.name.tooltip=Име на бисквитката
+cookies.header.value.tooltip=Присвоена стойност на бисквитката
+cookies.header.rawValue.tooltip=Необработена стойност на бисквитката
+cookies.header.domain.tooltip=Домейн подал бисквитката
+cookies.header.rawSize.tooltip=Необработен размер на бисквитката
+cookies.header.size.tooltip=Размер на бисквитката
+cookies.header.path.tooltip=Път, за който се отнася бисквитката
+cookies.header.expires.tooltip=Време на валидност на бисквитката
+cookies.header.security.tooltip=Дали бисквитката е сигурна или не
+cookies.header.httponly.tooltip=Дали бисквитката е само за HTTP или не
+cookies.header.maxAge.tooltip=Максимално време за съхраняване на бисквитката
+cookies.netinfo.Received_Cookies=Приети бисквитки
+cookies.netinfo.Sent_Cookies=Изпратени бисквитки
+cookies.netinfo.deleted.tooltip=Бисквитки премахнати при заявката
+cookies.Path_Filter=Филтър за пътя
+cookies.menu.Cookies=Бисквитки
+cookies.export.Export_All_Cookies=Изнасяне на всички бисквитки
+cookies.export.Export_All_Cookies_Tooltip=Изнасяне на всички бисквитки от браузъра във файл „cookies.txt“
+cookies.export.Export_For_Site=Изнасяне на всички бисквитки за този сайт
+cookies.export.Export_For_Site_Tooltip=Изнасяне на всички бисквитки за сайта „%S“ във файл „cookies.txt“
+cookies.message.There_is_no_active_page=Никоя страница не е активна
+cookies.Break_On_Cookie=Прекъсване при промяна на бисквитка
+cookies.Disable_Break_On_Cookie=Спиране на прекъсването при промяна на бисквитка
+cookies.Cookie_Breakpoints=Прекъсвания за бисквитки
+cookies.menu.Break_On_Cookie=Прекъсване при бисквитката „%S“
+cookies.menu.tooltip.Break_On_Cookie=Прекъсване при промяна или изтриване на бисквитката „%S“
+cookies.menu.Edit_Breakpoint_Condition=Редактиране на прекъсване
+cookies.Breakpoint_condition_evaluation_fails=Условието за прекъсване не може да се изчисли
+cookies.RemoveAll=Изтриване на бисквитките
+cookies.Create=Създаване на бисквитка
+cookies.Tools=Инструменти
+cookies.ToolsTooltip=Инструменти
+cookies.ViewAll=Управление на бисквитките
+cookies.ViewAllTooltip=Отваряне на управлението на бисквитките
+cookies.ViewExceptions=Права за бисквитки на сайтовете
+cookies.ViewExceptionsTooltip=Списък със сайтовете чиито бисквитки се приемат или отхвърлят
+cookies.Filter=Филтриране
+cookies.FilterTooltip=Задаване на условията за филтриране на списъка с бисквитки
+cookies.filter.byPath=Филтриране по текущия път
+cookies.filter.byPathTooltip=Показване само на бисквитките отговарящи на текущия път
+cookies.filter.showRejectedCookies=И отхвърлените бисквитки
+cookies.filter.showRejectedCookiesTooltip=Показване и на отхвърлените бисквитки
+cookies.edit.title=Редактиране на бисквитка
+cookies.edit.name.label=Име:
+cookies.edit.domain.label=Хост:
+cookies.edit.path.label=Път:
+cookies.edit.expire.label=Давност:
+cookies.edit.value.label=Стойност:
+cookies.edit.secure.label=Сигурна
+cookies.edit.httponly.label=Само за HTTP
+cookies.edit.session.label=Сесийна
+cookies.edit.urlEncode.label=Кодирана стойност
+cookies.console.Cookies=Бисквитки
+cookies.console.Filter_By_Cookies=Филтриране по бисквитки
+firebug.shortcut.removeAllCookies.label=Изтриване на всички бисквитки
+cookie.sizeinfo.Size=Размер
+cookie.sizeinfo.Raw_Size=Необработен размер
diff --git a/locale/bg/firebug.properties b/locale/bg/firebug.properties
index 8b1d71f..582439d 100644
--- a/locale/bg/firebug.properties
+++ b/locale/bg/firebug.properties
@@ -5,31 +5,31 @@ Firebug=Firebug
 WindowTitle=Firebug — %S
 # Panel titles
 Panel-console=Конзола
-panel.tip.console=Allows observing console messages and executing JavaScript commands
+panel.tip.console=Наблюдение на съобщенията в конзолата и изпълнение на команди на JavaScript
 Panel-net=Мрежа
-panel.tip.net=Allows analyzing the network traffic
+panel.tip.net=Следене на мрежовите заявки
 Panel-html=HTML
-panel.tip.html=Allows inspecting and manipulating the DOM nodes
+panel.tip.html=Следене и промяна на изходния код на страницата
 Panel-stylesheet=CSS
-panel.tip.stylesheet=Allows inspecting and manipulating the CSS stylesheets
+panel.tip.stylesheet=Следене и промяна на стиловите правила
 Panel-script=Скрипт
-panel.tip.script=Allows debugging of JavaScript
+panel.tip.script=Изчистване на грешки в JavaScript
 Panel-dom=DOM
-panel.tip.dom=Allows inspecting and manipulating the DOM properties
+panel.tip.dom=Следене и промяна на обектите от DOM
 Panel-css=Стил
-panel.tip.css=Allows inspecting and manipulating the CSS rules of the selected DOM node
+panel.tip.css=Следене и промяна на стиловите правила на избрания елемент от DOM
 Panel-computed=Изчислен
-panel.tip.computed=Allows inspecting the computed CSS values of the selected DOM node
+panel.tip.computed=Следене на изчислените стилови правила на избрания елемент от DOM
 Panel-layout=Подредба
-panel.tip.layout=Allows inspecting and manipulating the layout data of the selected DOM node
+panel.tip.layout=Следене и промяна на подредбата на избрания елемент от DOM
 Panel-domSide=DOM
-panel.tip.domSide=Allows inspecting and manipulating the DOM properties of the selected DOM node
+panel.tip.domSide=Следене и промяна на обектите от DOM
 Panel-watches=Следени изрази
-panel.tip.watches=Allows inspecting the JavaScript variables available in the current stack frame and defining watch expressions
+panel.tip.watches=Следене на променливите и изчислени изрази от JavaScript в текущия обхват
 Panel-breakpoints=Прекъсвания
-panel.tip.breakpoints=Allows manipulating the set breakpoints
+panel.tip.breakpoints=Задаване на точки за прекъсване
 Panel-callstack=Стек
-panel.tip.callstack=Allows observing the current JavaScript call stack
+panel.tip.callstack=Следене на текущия стек на извикванията в JavaScript
 Panel-scopes=Обхвати
 firebug.DetachFirebug=Отваряне на Firebug в нов прозорец
 firebug.AttachFirebug=Прикачане на Firebug към прозорец на браузъра
@@ -48,7 +48,7 @@ plural.Total_Firebugs2=Общо %1$S прозорец на Firebug;Общо %1$S
 # LOCALIZATION NOTE (firebug_options): Tooltip text used for Firebug icon menu (them left
 # most button on Firebug main toolbar)
 # LOCALIZATION NOTE (firebug.Show_All_Panels): Menu item label used in 'list of all panels'
-startbutton.tip.deactivated=Deactivated
+startbutton.tip.deactivated=Изключено
 # menu (available on Firebug's tab bar).
 # Console panel options.
 # LOCALIZATION NOTE (Line, LineAndCol): Used at many places in the UI. Displays the location
@@ -60,279 +60,306 @@ minimized=Минимизирано
 enablement.for_all_pages=за всички 
 enablement.on=Включен
 enablement.off=Изключен
-enablement.Panel_activation_status=Panel activation status:
+enablement.Panel_activation_status=Състояние на панела:
 none=Затворен
 Firebug_-_inactive_for_current_website=Firebug — изключен за този уеб сайт
 Activate_Firebug_for_the_current_website=Включване на Firebug за този уеб сайт
 Minimized=Минимизиран
 Minimize_Firebug=Минимизиране на Firebug
 On_for_all_web_pages=За всички уеб страници
-firebug.menu.tip.On_for_all_Web_Sites=Activate Firebug by default for all websites
+firebug.menu.tip.On_for_all_Web_Sites=За всички уеб сайтове
 firebug.menu.Clear_Activation_List=Изчистване на списъка за задействане
-firebug.menu.tip.Clear_Activation_List=Clear the list of websites Firebug is activated for
-firebug.menu.Detached=Detached
-firebug.menu.tip.Detached=Detach Firebug into its own window
-firebug.menu.Top=Top
-firebug.menu.tip.Top=Align Firebug to the top of the user agent window
-firebug.menu.Bottom=Bottom
-firebug.menu.tip.Bottom=Align Firebug to the bottom of the user agent window
-firebug.menu.Left=Left
-firebug.menu.tip.Left=Align Firebug to the left of the user agent window
-firebug.menu.Right=Right
-firebug.menu.tip.Right=Align Firebug to the right of the user agent window
+firebug.menu.tip.Clear_Activation_List=Изчистване на списъка на сайтове, за които Firebug е включен
+firebug.menu.Detached=Отделяне
+firebug.menu.tip.Detached=Отделяне на Firebug в собствен прозорец
+firebug.menu.Top=Отгоре
+firebug.menu.tip.Top=Прикачване на Firebug отгоре на основния прозорец
+firebug.menu.Bottom=Отдолу
+firebug.menu.tip.Bottom=Прикачване на Firebug отдолу на основния прозорец
+firebug.menu.Left=Отляво
+firebug.menu.tip.Left=Прикачване на Firebug отляво на основния прозорец
+firebug.menu.Right=Отдясно
+firebug.menu.tip.Right=Прикачване на Firebug отдясно на основния прозорец
 firebug.uiLocation=Разположение на интерфейса на Firebug
-firebug.menu.tip.UI_Location=Position of the Firebug user interface
+firebug.menu.tip.UI_Location=Разположение на интерфейса на Firebug
 # examples: somePage.htm (line 64)
 # examples: somePage.htm (line 64, column 53)
-firebug_options=Настройки на Firebug
+annotations.confirm.clear=Да се изчисти ли списъка с анотации за Firebug за всички сайтове?
 # LOCALIZATION NOTE (InspectInTab): Menu item label used in a various context menus.
 # For example, right clicking on an element in the HTML panel offers an action to inspect
-firebug.Show_All_Panels=Всички панели
-console.option.Show_Command_Line=Show Command Line
-console.option.tip.Show_Command_Line=Focus the Command Line / Show the Command Line Popup
+firebug_options=Настройки на Firebug
 # clicked element in the DOM panel (tab).
+# %S = Target panel title
+firebug.Show_All_Panels=Всички панели
+console.option.Show_Command_Line=Показане на командния ред
+console.option.tip.Show_Command_Line=Показане на командния ред или подпрозорец в панела
+# examples: Inspect in DOM Tab
 ShowJavaScriptErrors=Грешки в JavaScript
-console.option.tip.Show_JavaScript_Errors=Log JavaScript error messages into the console
+console.option.tip.Show_JavaScript_Errors=Извеждане на грешките от JavaScript в конзолата
 ShowJavaScriptWarnings=Предупреждения в JavaScript
-console.option.tip.Show_JavaScript_Warnings=Log JavaScript warning messages into the console
+console.option.tip.Show_JavaScript_Warnings=Извеждане на предупрежденията от JavaScript в конзолата
 ShowCSSErrors=Грешки в CSS
-console.option.tip.Show_CSS_Errors=Log CSS error messages into the console
-ShowXMLHTMLErrors=Show XML/HTML Errors
-console.option.tip.Show_XML_HTML_Errors=Log XML and HTML error messages into the console
-ShowStackTrace=Стек със грешки
-console.option.tip.Show_Stack_Trace=Show stack trace information for error messages
+console.option.tip.Show_CSS_Errors=Извеждане на грешките от CSS в конзолата
+ShowXMLHTMLErrors=Грешки в HTML/XML
+console.option.tip.Show_XML_HTML_Errors=Извеждане на грешките от HTML/XML в конзолата
+ShowStackTrace=Стек при грешки
+console.option.tip.Show_Stack_Trace=Извеждане на информация за стека при грешки
 ShowXMLHttpRequests=Заявки XMLHttpRequest
-console.option.tip.Show_XMLHttpRequests=Log XMLHttpRequests into the console
-ShowChromeErrors=Грешки в Chrome
-console.option.tip.Show_System_Errors=Log program and add-on internal error messages into the console
-ShowChromeMessages=Съобщения от Chrome
-console.option.tip.Show_System_Messages=Log program and add-on internal messages into the console
-ShowExternalErrors=Външни грешки
-console.option.tip.Show_External_Errors=Log error messages coming from external sources into the console
+console.option.tip.Show_XMLHttpRequests=Извеждане на заявките чрез XMLHttpRequest в конзолата
+ShowChromeErrors=Грешки от браузъра
+console.option.tip.Show_System_Errors=Извеждане на грешките от браузъра и добавките  в конзолата
+ShowChromeMessages=Съобщения от браузъра
+console.option.tip.Show_System_Messages=Извеждане на съобщенията от браузъра и добавките  в конзолата
 ShowNetworkErrors=Мрежови грешки
-console.option.tip.Show_Network_Errors=Log network error messages into the console
+console.option.tip.Show_Network_Errors=Извеждане на мрежовите грешки
 JavascriptOptionsStrict=Строги предупреждения (забавя)
-console.option.tip.Show_Strict_Warnings=Log also strict warnings into the console
+console.option.tip.Show_Strict_Warnings=Извеждане на строгите предупреждения
 Command_History=История на командите
-console.option.Show_Command_Editor=Show Command Editor
-console.option.tip.Show_Command_Editor=Switch to the Command Editor
+console.option.Show_Command_Editor=Редактор на командите
+console.option.tip.Show_Command_Editor=Преминаване към редактора на командите
 commandLineShowCompleterPopup=Предложения за автоматично дописване
-console.option.tip.Show_Completion_List_Popup=Show the popup for command auto-completion
+console.option.tip.Show_Completion_List_Popup=Извеждане на предложенията за автоматично дописване в изскачащ прозорец 
 Assertion=Грешно предположение
-# %S = Target panel title
-# examples: Inspect in DOM Tab
 # LOCALIZATION NOTE (jsdIScript): an internal Firefox object used for debugging Firebug
 # do not translate.
 # %S = jsdIScript.tag
+# HTML panel context menu items.
+# Quick Info Box
 Line=%S (ред %S)
 LineAndCol=%S (ред %S, кол. %S)
 InstanceLine=%S #%S (ред %S)
 StackItem=%S (%S ред %S)
 SystemItem=<Системно>
-# HTML panel context menu items.
-# Quick Info Box
 # LOCALIZATION NOTE (html.Break_On_Mutate, html.Disable_Break_On_Mutate): Tooltips for resume
 # button that are used when the HTML panel is currently selected. The button allows stopping
 # JS execution when DOM of the current page is modified.
-panel.Inspect_In_Panel=Inspect in %S Panel
-panel.tip.Inspect_In_Panel=Switch to the %S panel to examine the object there
-NoName=(без име)
 # LOCALIZATION NOTE (html.label.Expand/Contract_All): Used within the HTML for a context
 # menu item. The user can expand/contract the element together with all its children to
+panel.Inspect_In_Panel=Изследване чрез %S
+panel.tip.Inspect_In_Panel=Отваряне на панела „%S“ и изследване на обекта в него
+NoName=(без име)
 # quickly see the entire hierarchical structure or collapse it.
-jsdIScript=jsdIScript %S
 # LOCALIZATION NOTE (dom.label.breakOnPropertyChange): Used within the DOM panel to create
 # a 'property breakpoint'. Right-click on an property of an object. The label is also
+jsdIScript=jsdIScript %S
 # used for the 'break on next button' (available on the toolbar).
-ShowFullText=Пълен текст
-html.option.tip.Show_Full_Text=Don't crop element contents
 # LOCALIZATION NOTE (dom.disableBreakOnPropertyChange): Used within the DOM panel for the
 # 'break on next button' in the case the option is activated
+ShowFullText=Пълен текст
+html.option.tip.Show_Full_Text=Без съкращаване на съдържанието на елементите
 # LOCALIZATION NOTE (EditAttribute): Menu item label used in HTML panel context menu. Allows
-ShowWhitespace=Междини с интервали
-html.option.tip.Show_Whitespace=Show Whitespace inside of nodes
 # editing an existing HTML element attribute.
 # %S = Name of the clicked attribute
-ShowComments=Коментари
-html.option.tip.Show_Comments=Show comment nodes
+ShowWhitespace=Междини с интервали
+html.option.tip.Show_Whitespace=Показване на празните знаци в елементите
 # examples: Edit Attribute "onclick"...
 # LOCALIZATION NOTE (DeleteAttribute): Menu item label used in HTML panel context menu. Allows
+ShowComments=Коментари
+html.option.tip.Show_Comments=Показване на коментарите в HTML/XML
 # deleting an existing HTML element attribute.
-html.option.Show_Entities_As_Symbols=Show Entities As Symbols
-html.option.tip.Show_Entities_As_Symbols=Show all XML entities using their symbolic representation
-html.option.Show_Entities_As_Names=Show Entities As Names
-html.option.tip.Show_Entities_As_Names=Show all XML entities using their names
-html.option.Show_Entities_As_Unicode=Show Entities As Unicode
-html.option.tip.Show_Entities_As_Unicode=Show all XML entities in their Unicode representation
 # %S = Name of the clicked attribute
 # examples: Delete Attribute "onclick"...
+html.option.Show_Entities_As_Symbols=Заместващи последователности като знаци
+html.option.tip.Show_Entities_As_Symbols=Извеждане на заместващите последователности от XML чрез знаците, които представляват
+html.option.Show_Entities_As_Names=Заместващи последователности като имена
+html.option.tip.Show_Entities_As_Names=Извеждане на заместващите последователности от XML чрез имената им
+html.option.Show_Entities_As_Unicode=Заместващи последователности като Уникод
+html.option.tip.Show_Entities_As_Unicode=Извеждане на заместващите последователности от XML чрез представянето им в Уникод
 # LOCALIZATION NOTE (InheritedFrom): Displaying an HTML element name + an applied CSS rule,
-HighlightMutations=Открояване на промените
-html.option.tip.Highlight_Mutations=Highlight changes inside nodes
 # that has been inherited. Used in the Style side panel (under HTML panel).
 # examples: Inherited from table.tabView
+HighlightMutations=Открояване на промените
+html.option.tip.Highlight_Mutations=Оцветяване на промените в елементите
 # LOCALIZATION NOTE (css.fontFamilyPreview): Part of a tooltip in the CSS panel
-ExpandMutations=Разширяване на промените
-html.option.tip.Expand_Mutations=Expand the tree view to display changed nodes
 # and Style side panel (within HTML panel) when the mouse hovers a font name
 # LOCALIZATION NOTE (css.EmptyStyleSheet): Displayed in the CSS panel
+ExpandMutations=Разширяване при промени
+html.option.tip.Expand_Mutations=Разширяване на DOM за открояване на променените елементи
 # in case there are no stylesheets attached to the current page.
-ScrollToMutations=Придвижване на изгледа до промените изгледа
-html.option.tip.Scroll_To_Mutations=Scroll the tree view to bring changed nodes into view
 # The text between <a> and </a> is displayed as a link.
 # LOCALIZATION NOTE (css.EmptyElementCSS2): Displayed in the Style side panel
+ScrollToMutations=Придвижване до промените
+html.option.tip.Scroll_To_Mutations=Придвижване на изгледа до променените елементи
 # (available within the HTML panel) in case there are no CSS rules for the selected element.
-ShowQuickInfoBox=Поле за бърза информация
-inspect.option.tip.Show_Quick_Info_Box=Show information about the currently inspected element inside a panel overlaying the page
 # The text between <a> and </a> is displayed as a link.
 # LOCALIZATION NOTE (EditProp): Menu item label used in the CSS panel context menu.
+ShowQuickInfoBox=Поле за бърза информация
+inspect.option.tip.Show_Quick_Info_Box=Извеждане в прозорец върху страницата на информация за текущо изследвания елемент 
 # Allows to edit an existing CSS rule property.
-ShadeBoxModel=Открояване на модела на кутиите
-inspect.option.tip.Shade_Box_Model=Shade the different parts of the box model
+# %S = Name of the clicked property
+# examples: Edit "background-color"...
+ShadeBoxModel=Модел на кутиите
+inspect.option.tip.Shade_Box_Model=Оцветяване на частите от модела на кутиите
 ScrollIntoView=Придвижване на изгледа
-html.tip.Scroll_Into_View=Scroll the page to make the element visible
+html.tip.Scroll_Into_View=Придвижване на изгледа по страницата, за да стане текущият елемент видим
 NewAttribute=Нов атрибут…
-html.tip.New_Attribute=Add a new attribute to this element
-html.Edit_Node=Edit %S...
-html.Node=Node
-html.tip.Edit_Node=Edit the %S using the full text editor
+html.tip.New_Attribute=Добавяне на нов атрибут към този елемент
+html.Edit_Node=Редактиране на %S…
+html.Node=Елемент
+html.tip.Edit_Node=Редактиране на %S чрез вградения текстов редактор
 DeleteElement=Изтриване на елемент
-html.Delete_Element=Delete the element from the tree
+html.Delete_Element=Изтриване на елемента от дървото
 DeleteNode=Изтриване на възел
-html.Delete_Node=Delete the node from the tree
-# %S = Name of the clicked property
+html.Delete_Node=Изтриване на възела от дървото
+# LOCALIZATION NOTE (DisableProp): Menu item label used in the CSS panel context menu.
 quickInfo=Бърза информация
 computedStyle=Изчислен стил
-# examples: Edit "background-color"...
-# LOCALIZATION NOTE (DisableProp): Menu item label used in the CSS panel context menu.
 # Allows to disable an existing CSS rule property.
+# %S = Name of the clicked property
+# examples: Disable "background-color"
 html.Break_On_Mutate=Прекъсване при промяна
 html.Disable_Break_On_Mutate=Изключване на прекъсването при промяна
 html.label.Break_On_Text_Change=Прекъсване при промяна на текста
 html.label.HTML_Breakpoints=Прекъсвания за HTML
 html.label.Break_On_Attribute_Change=Прекъсване при промяна на атрибут
-html.tip.Break_On_Attribute_Change=Stop JavaScript execution when an attribute of this element changes
+html.tip.Break_On_Attribute_Change=Спиране на изпълнението на JavaScript при промяна на атрибут на този елемент
 html.label.Break_On_Child_Addition_or_Removal=Прекъсване при добавяне или изтриване на дете
-html.tip.Break_On_Child_Addition_or_Removal=Stop JavaScript execution when a child node is added to or removed from this element
+html.tip.Break_On_Child_Addition_or_Removal=Спиране на изпълнението на JavaScript при добавяне или изтриване на дете на този елемент
 html.label.Break_On_Element_Removal=Прекъсване при изтриване на елемент
-html.tip.Break_On_Element_Removal=Stop JavaScript execution when the element is removed
-# %S = Name of the clicked property
-# examples: Disable "background-color"
+html.tip.Break_On_Element_Removal=Спиране на изпълнението на JavaScript при изтриване на този елемент
 # LOCALIZATION NOTE (DeleteProp): Menu item label used in the CSS panel context menu.
 # Allows to delete an existing CSS rule property.
-html.label.Expand/Contract_All=Разширяване/свиване на всички
-html.tip.Expand/Contract_All=Expand/collapse all the children recursively
 # %S = Name of the clicked property
 # examples: Delete "background-color"
+html.label.Expand/Contract_All=Разширяване/свиване на всички
+html.tip.Expand/Contract_All=Рекурсивно разширяване/свиване на този елемент и всичките му деца
 # Console context menu labels.
-dom.label.breakOnPropertyChange=Прекъсване при промяна на свойство
-dom.tip.Break_On_Property_Change=Stop the JavaScript execution when this property changes
 # Breakpoints side panel
+dom.scopeName=(захват)
 # LOCALIZATION NOTE (breakpoints.Remove_Breakpoint, breakpoints.Disable_Breakpoint,
-dom.disableBreakOnPropertyChange=Изключване на прекъсване при промяна на свойство
-dom.label.DOM_Breakpoints=Прекъсвания за DOM
 # breakpoints.Enable_Breakpoint): Context menu item labels in the Breakpoints side panel.
+dom.scopeParentName=(по-горен захват)
 # LOCALIZATION NOTE (script.balloon.Continue, script.balloon.Disable): Labels used for buttons
 # within balloon popup dialog. This dialog appears when the debugger halts at a breakpoint or at
+dom.tip.scopeName=Използвайте името <функция>.%променливаОтЗахвата, за да работите с нея чрез командния ред
 # a 'debugger;' keyword.
-EditAttribute=Редактиране на атрибута „%S“…
-html.tip.Edit_Attribute=Edit the value of the attribute "%S" of this element
 # Continue: allows to resume the debugger
 # Disable: allows to disable the current 'debugger;' keyword used in the Javascript source
+dom.tip.scopeMemberName=Използвайте името <функция>.%S, за да работите с нея чрез командния ред
 # LOCALIZATION NOTE (callstack.Expand_All, callstack.Collapse_All): Context menu item labels used in
 # Stack side panel (within Script panel)
-DeleteAttribute=Изтриване на атрибута „%S“
-html.tip.Delete_Attribute=Delete the attribute "%S" from this element
+firebug.reps.declarativeScope=[обхват на декларацията]
+firebug.reps.objectScope=[обхват на обекта]
+firebug.reps.withScope=[обхват от with]
 # Firebug needs to be halted at a breakpoint to see these items.
 # LOCALIZATION NOTE (ShowUserProps, ShowUserFuncs, ShowDOMProps, ShowDOMFuncs, ShowDOMConstants,
+firebug.reps.optimizedAway=(премахнато при оптимизациите)
 # ShowOwnProperties, ShowOwnPropertiesTooltip, ShowEnumerableProperties, ShowEnumerablePropertiesTooltip,
-InheritedFrom=Наследено от
-SothinkWarning=Разширението „Sothink SWF Catcher“ пречи на Firebug да работи нормално.<br><br>За помощ прочетете <a href="http://www.getfirebug.com/faq.html#Sothink" target="_new">това в ЧЗВ на Firebug</a>.
 # ShowInlineEventHandlers):
 # Labels for DOM panel options (located in tab's option menu)
-css.fontFamilyPreview=Под южно дърво, цъфтящо в синьо, бягаше малко пухкаво зайче.
+firebug.reps.element.attribute_value=стойност на атрибут
+firebug.reps.element.property_value=стойност на свойство
 # LOCALIZATION NOTE (LayoutPadding, LayoutBorder, LayoutMargin, LayoutPosition, LayoutAdjacent):
 # Labels used to describe layout properties a the selected HTML element.
 # Used in the Layout side panel (within HTML panel).
-css.EmptyStyleSheet=Няма стилови правила. Можете да <a>създадете и добавите</a>.
+dom.label.breakOnPropertyChange=Прекъсване при промяна на свойство
+dom.tip.Break_On_Property_Change=Спиране на изпълнението на JavaScript при промяна на това свойство
 # LOCALIZATION NOTE (ShowRulers): Label for context menu item.
 # Used in the Layout side panel (within HTML panel).
+dom.disableBreakOnPropertyChange=Изключване на прекъсване при промяна на свойство
+dom.label.DOM_Breakpoints=Прекъсвания за DOM
 # Net panel
-css.EmptyElementCSS=Този елемент няма стилови правила. Можете да му <a>създадете и добавите</a>.
-EditStyle=Редактиране на стила на елемент…
-style.tip.Edit_Style=Edit the element's inline style
-AddRule=Add Rule...
-css.tip.AddRule=Add a general rule for this element
-NewRule=Ново правило…
-css.tip.New_Rule=Add a new rule
 # LOCALIZATION NOTE (net.header.Reset_Header) Label for header context menu within the Net panel
 # LOCALIZATION NOTE (net.header.URL, net.header.URL_Tooltip, net.header.Status,
 # net.header.Status_Tooltip, net.header.Domain, net.header.Domain_Tooltip,
+EditAttribute=Редактиране на атрибута „%S“…
+html.tip.Edit_Attribute=Редактиране на стойността на атрибута „%S“ на този елемент
 # net.header.Size, net.header.Size_Tooltip, net.header.Timeline, net.header.Timeline_Tooltip,
-css.Delete_Rule=Delete "%S"
-css.tip.Delete_Rule=Delete the rule "%S" and all its properties
 # net.header.Local_IP, net.header.Local_IP_Tooltip, net.header.Remote_IP,
 # net.header.Remote_IP_Tooltip, net.header.Protocol, net.header.Protocol_Tooltip):
 # Labels and tooltips for headers displayed on top of the Net panel.
-css.menu.Edit_Media_Query=Edit Media Query...
-css.menu.tip.Edit_Media_Query=Edit the media query assigned to this rule
-NewProp=Ново свойство…
-css.tip.New_Prop=Add a new property to the current rule
+DeleteAttribute=Изтриване на атрибута „%S“
+html.tip.Delete_Attribute=Изтриване на атрибута „%S“ на този елемент
 # LOCALIZATION NOTE (net.label.Network_Breakpoints): Label for network breakpoints group.
 # LOCALIZATION NOTE (net.label.Break_On_Request): Label used in the Net panel's context
 # menu for breaking on an XHR.
+InheritedFrom=Наследено от
+SothinkWarning=Разширението „Sothink SWF Catcher“ пречи на Firebug да работи нормално.<br><br>За помощ прочетете <a href="http://www.getfirebug.com/faq.html#Sothink" target="_new">това в ЧЗВ на Firebug</a>.
 # LOCALIZATION NOTE (net.headers.view_source, net.headers.pretty_print): Labels used in the
-EditProp=Редактиране на „%S“…
-css.tip.Edit_Prop=Edit the value of the property "%S"
 # Net panel's Headers tab (displayed if you expand a network request). The label is used
+css.fontFamilyPreview=Под южно дърво, цъфтящо в синьо, бягаше малко пухкаво зайче.
 # for a link, that switches the view between raw source code and formated header values.
 # LOCALIZATION NOTE (net.filter.Media): Label for Net panel filter (used on the Net panel toolbar)
 # LOCALIZATION NOTE (Post, Put): Label (verb) used in the Net panel for detailed info about
-DisableProp=Изключване на „%S“
-css.tip.Disable_Prop=Disable the property "%S"
+css.EmptyStyleSheet=Няма стилови правила. Можете да <a>създадете и добавите</a>.
 # a network request (displayed when a Net panel entry is expanded). The content of
 # this tab displays sent data (related to an HTTP send method).
 # LOCALIZATION NOTE (Response, URLParameters, Cache, HTML, jsonviewer.tab.JSON, xmlviewer.tab.XML):
+css.EmptyElementCSS=Този елемент няма стилови правила. Можете да му <a>създадете и добавите</a>.
+EditStyle=Стил чрез атрибут…
+style.tip.Edit_Style=Редактиране на стила на елемента чрез атрибута „style“
+AddRule=Добавяне на правило…
+css.tip.AddRule=Добавяне на ново правило за този елемент
+NewRule=Ново правило…
+css.tip.New_Rule=Добавяне на ново правило
 # Labels used in the Net panel for detailed info about a network request (displayed
-DeleteProp=Изтриване на „%S“
-css.tip.Delete_Prop=Delete the property "%S"
 # when a Net panel entry is expanded)
-BreakOnThisError=Прекъсване при тази грешка
-console.menu.tip.Break_On_This_Error=Stop the JavaScript execution as soon as this error occurs
-BreakOnAllErrors=Прекъсване при всички грешки
-console.menu.tip.Break_On_All_Errors=Stop the JavaScript execution as soon as an error occurs
 # LOCALIZATION NOTE (jsonviewer.sort, jsonviewer.do_not_sort): Label (verb) used in the
 # Net panel for JSON responses. Allows to sort alphabetically.
+css.Delete_Rule=Изтриване на „%S“
+css.tip.Delete_Rule=Изтриване на правилото „%S“ и всичките му свойства
 # LOCALIZATION NOTE (net.jsonviewer.Copy_JSON): Label (verb) displayed in the JSON tab of a network request
+# in the Net & Console panel when copying JSON replies.
+# %S = Part of the JSON, that was clicked
+css.menu.Edit_Media_Query=Редактиране на заявката за медия…
+css.menu.tip.Edit_Media_Query=Редактиране на заявката за медия за това правило
+NewProp=Ново свойство…
+css.tip.New_Prop=Добавяне на ново свойство към текущото правило
+# example: Copy "person" as JSON
+# LOCALIZATION NOTE (RequestHeaders, ResponseHeaders, CachedResponseHeaders): Label (noun)
+# used in the Net panel (displayed inside the Headers tab of a request).
+# LOCALIZATION NOTE (plural.Limit_Exceeded2): Semicolon list of plural forms.
+EditProp=Редактиране на „%S“…
+css.tip.Edit_Prop=Редактиране на стойността на свойството „%S“
+# A message displayed in the Net panel when some entries must be removed in the case the maximum number
+# of entries has been reached.
+# %1 = the number of entries removed
+# example: Firebug's log limit has been reached. 150 entries not shown.
+DisableProp=Изключване на „%S“
+css.tip.Disable_Prop=Изключване на свойството „%S“
+# LOCALIZATION NOTE (LimitPrefsTitle): A message displayed in the Net panel when log limit
+# has been reached. Informing the user what preference should be changed to modify the limit.
+# %S = Name of a preference
+# examples: In order to change the limit modify 'firebug.extensions.console.logLimit'
+DeleteProp=Изтриване на „%S“
+css.tip.Delete_Prop=Изтриване на свойството „%S“
+# LOCALIZATION NOTE (Profile): Caption (verb) for reported profile info.
+BreakOnThisError=Прекъсване при тази грешка
+console.menu.tip.Break_On_This_Error=Спиране на изпълнението на JavaScript при тази грешка
+BreakOnAllErrors=Прекъсване при всички грешки
+console.menu.tip.Break_On_All_Errors=Спиране на изпълнението на JavaScript при всички грешки
+# (result of JavaScript profiler tool).
+# LOCALIZATION NOTE (plural.Profile_Time2): Semicolon list of plural forms.
+# Caption for reported profile info (result of JavaScript profiler tool).
 TrackThrowCatch=Проследяване на throw/catch
-script.option.tip.Track_Throw_Catch=Track exceptions even when they are caught by try/catch blocks
+script.option.tip.Track_Throw_Catch=Проследяване на изключенията дори при прихващането им чрез блокове try/catch
 UseLastLineForEvalName=Използване на последния ред в кода за име на eval()
 UseMD5ForEvalName=Използване на MD5 за име на eval()
-# in the Net & Console panel when copying JSON replies.
+# %1 = Number of milliseconds
 Breakpoints=Прекъсвания
 ErrorBreakpoints=Прекъсвания при грешки
 LoggedFunctions=Следени функции
 EnableAllBreakpoints=Включване на всички прекъсвания
-breakpoints.option.tip.Enable_All_Breakpoints=Enable all listed breakpoints
+breakpoints.option.tip.Enable_All_Breakpoints=Включване на всички посочени прекъсвания
 DisableAllBreakpoints=Изключване на всички прекъсвания
-breakpoints.option.tip.Disable_All_Breakpoints=Disable all listed breakpoints
+breakpoints.option.tip.Disable_All_Breakpoints=Включване на всички посочени прекъсвания
 ClearAllBreakpoints=Изтриване на всички прекъсвания
-breakpoints.option.tip.Clear_All_Breakpoints=Remove all listed breakpoints
+breakpoints.option.tip.Clear_All_Breakpoints=Изтриване на всички посочени прекъсвания
 ConditionInput=Прекъсването ще се задейства, само ако следният израз е верен:
-# %S = Part of the JSON, that was clicked
-# example: Copy "person" as JSON
-# LOCALIZATION NOTE (RequestHeaders, ResponseHeaders, CachedResponseHeaders): Label (noun)
+# %2 = Number of calls (plural)
+# example: (56ms, 15 calls)
+# LOCALIZATION NOTE (Calls, OwnTime, Time, Avg, Min, Max, File): Used in profiler report header
 breakpoints.Remove_Breakpoint=Изтриване на прекъсване
-breakpoints.tip.Remove_Breakpoint=Remove the breakpoint
+breakpoints.tip.Remove_Breakpoint=Изтриване на прекъсването
 breakpoints.Disable_Breakpoint=Изключване на прекъсване
-breakpoints.tip.Disable_Breakpoint=Disable the breakpoint
+breakpoints.tip.Disable_Breakpoint=Изключване на прекъсването
 breakpoints.Enable_Breakpoint=Включване на прекъсване
-breakpoints.tip.Enable_Breakpoint=Enable the breakpoint
-# used in the Net panel (displayed inside the Headers tab of a request).
-# LOCALIZATION NOTE (plural.Limit_Exceeded2): Semicolon list of plural forms.
-# A message displayed in the Net panel when some entries must be removed in the case the maximum number
-# of entries has been reached.
-# %1 = the number of entries removed
+breakpoints.tip.Enable_Breakpoint=Включване на прекъсването
+# (name of a report column). In order to see this, select the Console panel, start profiling
+# by clicking the Profile button and stop it by clicking it again. The report is logged into the
+# Console panel. Make sure Script panel is enabled.
+# Support for clipboard actions.
+# LOCALIZATION NOTE (ShowCallsInConsole): Label for context menu item. Used in the Script
 script.balloon.Continue=Продължаване
 script.balloon.Disable=Изключване
 ScriptsFilterStatic=Статични скриптове
@@ -343,31 +370,33 @@ ScriptsFilterStaticShort=статични
 ScriptsFilterEvalShort=в eval
 ScriptsFilterEventShort=за събития
 ScriptsFilterAllShort=всички
-# example: Firebug's log limit has been reached. 150 entries not shown.
-# LOCALIZATION NOTE (LimitPrefsTitle): A message displayed in the Net panel when log limit
-# has been reached. Informing the user what preference should be changed to modify the limit.
-# %S = Name of a preference
+# panel when clicking a function object.
+# %S = Name of the function
+# example: Log Calls to "getData"
+# LOCALIZATION NOTE (anel.tooltip.Show_Command_Line): Tooltip used for a button on main
 callstack.Expand_All=Разширяване на всички
-callstack.tip.Expand_All=Expand all stack frame functions
+callstack.tip.Expand_All=Разширяване на всички рамки на функции в стека
 callstack.Collapse_All=Свиване на всички
-callstack.tip.Collapse_All=Collapse all stack frame functions
-# examples: In order to change the limit modify 'firebug.extensions.console.logLimit'
-# LOCALIZATION NOTE (Profile): Caption (verb) for reported profile info.
-callstack.Execution_not_stopped=Stack frames are just shown when the script execution is stopped.
-# (result of JavaScript profiler tool).
-# LOCALIZATION NOTE (plural.Profile_Time2): Semicolon list of plural forms.
-# Caption for reported profile info (result of JavaScript profiler tool).
-# %1 = Number of milliseconds
+callstack.tip.Collapse_All=Свиване на всички рамки на функции в стека
+# Firebug toolbar. This button allows to open the Command Line within other panels
+# than the Console panel.
+callstack.Execution_not_stopped=Рамките на стека се показват само при прекъсване на изпълнението
+# LOCALIZATION NOTE (console.MethodNotSupported): Message displayed in the Console panel,
+# if a specific method is not supported.
+# %S = Name of the unsupported method
+# example: Firebug console does not support 'bind'
 ShowUserProps=Свойства дефинирани от потребител
-dom.option.tip.Show_User_Props=Show user-defined object properties
+dom.option.tip.Show_User_Props=Извеждане на свойствата дефинирани от потребител
 ShowUserFuncs=Функции дефинирани от потребител
-dom.option.tip.Show_User_Funcs=Show user-defined object methods
+dom.option.tip.Show_User_Funcs=Извеждане на функциите дефинирани от потребител
 ShowDOMProps=Свойства от DOM
-dom.option.tip.Show_DOM_Props=Show properties specified inside the DOM
+dom.option.tip.Show_DOM_Props=Извеждане на свойствата зададени директно в DOM
 ShowDOMFuncs=Функции от DOM
-dom.option.tip.Show_DOM_Funcs=Show functions specified inside the DOM
+dom.option.tip.Show_DOM_Funcs=Извеждане на функциите зададени директно в DOM
 ShowDOMConstants=Константи от DOM
-dom.option.tip.Show_DOM_Constants=Show constants specified inside the DOM
+dom.option.tip.Show_DOM_Constants=Извеждане на константите зададени директно в DOM
+ShowClosures=Захватите
+dom.option.tip.Show_Closures=Извеждане на захватите свързани с функциите (включва дебъгера)
 ShowInlineEventHandlers=Вградени функции за обработка на събития
 ShowInlineEventHandlersTooltip=Показване на вградените функции за обработка на събития.
 ShowOwnProperties=Само собствени свойства
@@ -376,141 +405,148 @@ ShowEnumerableProperties=Само изброимите свойства
 ShowEnumerablePropertiesTooltip=Без показване на свойствата, по които не се итерира чрез for
 NoMembersWarning=Няма свойства, които да бъдат показани за този обект.
 NewWatch=Нов израз за следене…
-# %2 = Number of calls (plural)
-# example: (56ms, 15 calls)
+# LOCALIZATION NOTE (commandline.MethodNotSupported): Message displayed in the Console panel,
+# if an unsupported method is entered via the Command Line.
 AddWatch=Добавяне на израз
-watch.tip.Add_Watch=Add the selection/object to the Watch side panel for observation
-# LOCALIZATION NOTE (Calls, OwnTime, Time, Avg, Min, Max, File): Used in profiler report header
-# (name of a report column). In order to see this, select the Console panel, start profiling
+watch.tip.Add_Watch=Добавяне на избрания израз/обект към панела за следене
+# %S = Name of the unsupported method
+# LOCALIZATION NOTE (console.Disable_Break_On_All_Errors, console.Break_On_All_Errors):
 CopySourceCode=Копиране на изходния код
-script.tip.Copy_Source_Code=Copy the selected source code to the clipboard
+script.tip.Copy_Source_Code=Копиране на избрания изходен код в буфера за обмен
 Use_hash_plus_number_to_go_to_line=Използвайте #<число>, за да се придвижите до определен ред
 CopyValue=Копиране на стойност
-dom.tip.Copy_Value=Copy the property's value to the clipboard
+dom.tip.Copy_Value=Копиране на стойността на свойството в буфера за обмен
 Copy_Name=Копиране на името
-dom.tip.Copy_Name=Copy the property's name to the clipboard
+dom.tip.Copy_Name=Копиране на името на свойството в буфера за обмен
 Copy_Path=Копиране на пътя
-dom.tip.Copy_Path=Copy the property path
+dom.tip.Copy_Path=Копиране на пътя на свойството в буфера за обмен
 NewProperty=Ново свойство…
 EditProperty=Редактиране на свойство…
-dom.tip.Edit_Property=Edit the property's value
+dom.tip.Edit_Property=Редактиране на стойността на свойство
 EditVariable=Редактиране на променлива…
-stack.tip.Edit_Variable=Edit the variable's value
+stack.tip.Edit_Variable=Редактиране на стойността на променлива
 EditWatch=Редактиране на израз…
-watch.tip.Edit_Watch=Edit the watch expression's value
+watch.tip.Edit_Watch=Редактиране на стойността на следения израз
 DeleteProperty=Изтриване на свойство
-dom.tip.Delete_Property=Delete the property
+dom.tip.Delete_Property=Изтриване на свойството
 DeleteWatch=Изтриване на израз
-DeleteAllWatches=Delete All Watches
-watch.tip.Delete_Watch=Delete the watch expression
-watch.tip.Delete_All_Watches=Delete all the watch expressions
-# by clicking the Profile button and stop it by clicking it again. The report is logged into the
-# Console panel. Make sure Script panel is enabled.
-SetBreakpoint=Поставяне на прекъсване
-script.tip.Set_Breakpoint=Toggles setting of a breakpoint at the current line
-# Support for clipboard actions.
-# LOCALIZATION NOTE (ShowCallsInConsole): Label for context menu item. Used in the Script
-# panel when clicking a function object.
-EditBreakpointCondition=Редактиране на условието за прекъсване…
-breakpoints.tip.Edit_Breakpoint_Condition=Edit the condition, under which this breakpoint stops the JavaScript execution
-NoBreakpointsWarning=В тази страница няма зададени прекъсвания.
-# %S = Name of the function
-# example: Log Calls to "getData"
-# LOCALIZATION NOTE (anel.tooltip.Show_Command_Line): Tooltip used for a button on main
-Only_Show_Applied_Styles=Само приложени стилове
-style.option.tip.Only_Show_Applied_Styles=Just show styles applied to the element
-# Firebug toolbar. This button allows to open the Command Line within other panels
-# than the Console panel.
-# LOCALIZATION NOTE (console.MethodNotSupported): Message displayed in the Console panel,
-Show_User_Agent_CSS=CSS от браузъра
-style.option.tip.Show_User_Agent_CSS=Also show the CSS defined by the user agent
-# if a specific method is not supported.
-# %S = Name of the unsupported method
-# example: Firebug console does not support 'bind'
-# LOCALIZATION NOTE (commandline.MethodNotSupported): Message displayed in the Console panel,
-# if an unsupported method is entered via the Command Line.
-computed.option.label.Colors_As_Hex=Colors As Hex
-computed.option.tip.Colors_As_Hex=Show colors in hexadecimal format
-computed.option.label.Colors_As_RGB=Colors As RGB
-computed.option.tip.Colors_As_RGB=Show colors in RGB format
-computed.option.label.Colors_As_HSL=Colors As HSL
-computed.option.tip.Colors_As_HSL=Show colors in HSL format
-# %S = Name of the unsupported method
-# LOCALIZATION NOTE (console.Disable_Break_On_All_Errors, console.Break_On_All_Errors):
+DeleteAllWatches=Изтриване на всички
+watch.tip.Delete_Watch=Изтриване на следения израз
+watch.tip.Delete_All_Watches=Изтриване на всички следени изрази
 # Tooltip for the "Break on... " button used when the Console panel is selected.
 # LOCALIZATION NOTE (console.Break_On_This_Error): Tooltip for the breakpoint besides an error message
-style.option.label.active=:active
-style.option.tip.active=Display :active pseudo-class styles
+SetBreakpoint=Поставяне на прекъсване
+script.tip.Set_Breakpoint=Превключване на прекъсване на текущия ред
 # in the Console panel
 # LOCALIZATION NOTE (console.Use_TAB_and_arrow_keys): Hint at the top of the Completion Popup
 # in the Command Line
+EditBreakpointCondition=Редактиране на условието за прекъсване…
+breakpoints.tip.Edit_Breakpoint_Condition=Редактиране на условието, при което изпълнението на JavaScript се прекъсва
+NoBreakpointsWarning=В тази страница няма зададени прекъсвания.
 # LOCALIZATION NOTE (console.JSDisabledInFirefoxPrefs): Hint shown inside the Console panel in the case
-style.option.label.hover=:hover
-style.option.tip.hover=Display :hover pseudo-class styles
 # JavaScript is not available
 # LOCALIZATION NOTE (console.multiHighlightLimitExceeded):
+Only_Show_Applied_Styles=Само приложени стилове
+style.option.tip.Only_Show_Applied_Styles=Извеждане само на стиловете приложени към текущия елемент
 # Used by the Console panel for arrays. If the user moves the mouse over an array bracket,
 # all elements in the array are highlighted on the page. If there are too many elements
-style.option.label.focus=:focus
-style.option.tip.focus=Display :focus pseudo-class styles
 # in the array, this tooltip is displayed instead.
+Show_User_Agent_CSS=CSS от браузъра
+style.option.tip.Show_User_Agent_CSS=Извеждане и на стиловете дефинирани от потребителския агент
 # %S = Maximal number of elements to highlight
 # example: There are too many elements in the array to highlight on the page (current limit is 100).
-css.label.Inspect_Declaration=Inspect Declaration
-css.tip.Inspect_Declaration= Inspect the declaration of this font
 #          See 'extensions.firebug.multiHighlightLimit' preference.
 # LOCALIZATION NOTE (commandline.disabledForXMLDocs): This message is displayed in the Console panel
 # in cases when the current page is an XML document. The text between <a> and </a> is a link,
+computed.option.label.Colors_As_Hex=Шестнадесетично
+computed.option.tip.Colors_As_Hex=Извеждане на цветовете като шестнадесетични числа
+computed.option.label.Colors_As_RGB=RGB
+computed.option.tip.Colors_As_RGB=Извеждане на цветовете във формат RGB
+computed.option.label.Colors_As_HSL=HSL
+computed.option.tip.Colors_As_HSL=Извеждане на цветовете във формат HSL
 # that causes to switch to HTML rendering of the document.
-Expand_Shorthand_Properties=Разширяване на съкратените свойства
-css.option.tip.Expand_Shorthand_Properties=Expand CSS shorthand properties into their components
 # LOCALIZATION NOTE (net.sizeinfo.Response_Body, net.sizeinfo.Post_Body, net.sizeinfo.Total_Sent,
 # net.sizeinfo.Total_Received, net.sizeinfo.Including_Headers):
 # Labels used for a detailed size info tooltip. The tooltip is displayed, if the mouse hovers over
+style.option.label.active=:active
+style.option.tip.active=Извеждане на стиловете на псевдо-класа :active
 # a request size displayed within the Net panel. 'Total Sent' and 'Total Received' info includes
-Sort_alphabetically=Азбучна подредба
-computed.option.tip.Sort_Alphabetically=Sort the styles by their name/group the styles into categories
 # sent and received headers size.
 # LOCALIZATION NOTE (net.postDataSizeLimitMessage): A warning message displayed within the Net
 # panel (inside the Post tab of an expanded request entry). The message informs the user that
-Show_Mozilla_specific_styles=Специфичните за Mozilla стилове
-computed.option.tip.Show_Mozilla_Specific_Styles=Also show styles prefixed with -moz
+style.option.label.hover=:hover
+style.option.tip.hover=Извеждане на стиловете на псевдо-класа :hover
 # posted data reached Firebug's size limit and only part of it is displayed in the UI.
 # LOCALIZATION NOTE (net.xpy.Resend): Label for context menu item. Used when clicking
 # on a HTTP request (in the Console or Net panel) to re-send it with the same arguments.
-computed.No_User-Defined_Styles=This element has no user-defined style rules.
-script.Type_any_key_to_filter_list=Натиснете клавиш за конкретизиране на списъка
 # LOCALIZATION NOTE (net.option.Disable_Browser_Cache, net.option.Show_Paint_Events):
+style.option.label.focus=:focus
+style.option.tip.focus=Извеждане на стиловете на псевдо-класа :focus
 # Labels for Net panel's options (located in tab's option menu)
 # LOCALIZATION NOTE (net.option.Show_BFCache_Responses, net.option.tip.Show_BFCache_Responses):
-LayoutPadding=отстъп
-LayoutBorder=контур
-LayoutMargin=граница
-LayoutPosition=разположение
-LayoutAdjacent=съсед
-position=разположение
 # Net panel's option. If set to true, the Net panel also displays responses coming from
+css.label.Inspect_Declaration=Изследване на декларация
+css.tip.Inspect_Declaration=Изследване на декларацията на този шрифт
 # BFCache (back-forward cache). See also: https://developer.mozilla.org/En/Working_with_BFCache
 # LOCALIZATION NOTE (script.Break_On_Next, script.Disable_Break_On_Next):
 # Tooltip used for the Break On Next button inside panel toolbar of the Script panel.
-ShowRulers=Линеал
-layout.option.tip.Show_Rulers=Show rulers and guides on the page when hovering parts of the layout box
 # (breaking on next executed JavaScript statement)
-Loading=Зареждане…
-Headers=Заглавни части
+Expand_Shorthand_Properties=Разширяване на съкратените свойства
+css.option.tip.Expand_Shorthand_Properties=Разширяване на съкратените свойства от CSS по техните компоненти
 # LOCALIZATION NOTE (plural.Request_Count2): Semicolon list of plural forms.
 # A label used in the Net panel. Displays the number of HTTP requests executed by the current page.
-net.tip.Clear=Clear the request list
 # %1 = Number of requests
 # example: 21 requests
-net.header.Reset_Header=Изчистване на заглавните части
-net.header.tip.Reset_Header=Reset the header display
+Sort_alphabetically=Азбучна подредба
+computed.option.tip.Sort_Alphabetically=Подреждане на стиловете по името/групата им
 # LOCALIZATION NOTE (plural.Error_Count2): Semicolon list of plural forms.
 # A label used in for Firebug Start Button. Displays the number of JavaScript errors found by Firebug.
 # %1 = Number of errors
+Show_Mozilla_specific_styles=Специфичните за Mozilla стилове
+computed.option.tip.Show_Mozilla_Specific_Styles=Извеждане на стиловете започващи с представката „moz-“
 # example: 111 Errors
 # LOCALIZATION NOTE (With_Scope, Call_Scope, Window_Scope):
 # Names of kinds of scopes. Probably best left in English.
+computed.No_User-Defined_Styles=Този елемент няма стилове дефинирани от потребителя
+script.Type_any_key_to_filter_list=Натиснете клавиш за конкретизиране на списъка
+# With: the scope inside of the with(obj) {} statement
+# Call: the scope inside of a function eg function foo() { XXX here XXX var f = function() {} };
+location.inline=Вътрешни
+# Window: the scope inside of a Javascript window object.
+# LOCALIZATION NOTE (requestinfo.Blocking, requestinfo.Resolving, requestinfo.Connecting,
+# requestinfo.Sending, requestinfo.Waiting, requestinfo.Receiving, requestinfo.ContentLoad,
+location.no_domain=Без домейн
+# requestinfo.WindowLoad):
+# Net panel timing info labels. Displayed in a tooltip (aka time-info-tip) when hovering the
+# waterfall graph in the Net panel.
+LayoutPadding=отстъп
+LayoutBorder=контур
+LayoutMargin=граница
+LayoutPosition=разположение
+LayoutAdjacent=съсед
+position=разположение
+# LOCALIZATION NOTE (requestinfo.started.label, requestinfo.phases.label, requestinfo.timings.label):
+# Labels used within a tooltip (aka time-info-tip) for waterfall graph in the Net panel.
+# LOCALIZATION NOTE (search.Next, search.Previous, search.Case_Sensitive, search.Case_Insensitive,
+# search.Multiple_Files, search.Use_Regular_Expression):
+ShowRulers=Линеал
+layout.option.tip.Show_Rulers=Показване на линеалите и водещите прави при посочване на частите от модела на разполагането
+# Labels used within an options menu for the search box. This menu is displayed if the search box is focused.
+Loading=Зареждане…
+Headers=Заглавни части
+# LOCALIZATION NOTE (search.html.CSS_Selector, search.net.Headers, search.net.Parameters, search.net.Response_Bodies,
+# search.script.Multiple_Files):
+net.tip.Clear=Изчистване на списъка с мрежовите заявки
+# Labels used within an options menu for the search box. This menu is displayed if the search box is focused.
+# These labels are specific to a certain panel.
+net.header.Reset_Header=Изчистване на заглавните части
+net.header.tip.Reset_Header=Изчистване на изведените заглавни части
+# A11y Chrome Labels (not visible, spoken by screen readers)
+# A11y panelNode labels (not visible, spoken by screen readers)
+# A11y Domplate labels (not visible, spoken by screen readers)
+# LOCALIZATION NOTE:
+# Used by a11y. Not directly visible in the UI, intended for screen readers.
+# Describe contents of inline editor fields
 net.header.URL=Адрес
 net.header.URL_Tooltip=Изискан адрес и метод на HTTP
 net.header.Status=Състояние
@@ -526,28 +562,50 @@ net.header.Local_IP_Tooltip=Локален адрес по IP и порт на 
 net.header.Remote_IP=Отдалечен адрес
 net.header.Remote_IP_Tooltip=Отдалечен адрес по IP и порт на заявката
 net.header.Protocol=Протокол
-net.header.Protocol_Tooltip=Протоколът на заявката.
-# With: the scope inside of the with(obj) {} statement
+net.header.Protocol_Tooltip=Протоколът на заявката
+# LOCALIZATION NOTE (a11y.labels.overridden):
 net.label.XHR_Breakpoints=Прекъсвания при XHR
-# Call: the scope inside of a function eg function foo() { XXX here XXX var f = function() {} };
-# Window: the scope inside of a Javascript window object.
+# Used by a11y. Not directly visible in the UI, intended for screen readers.
+# Indicates, that a style property is overridden by selector with higher specificity
 net.label.Break_On_XHR=Прекъсване при XHR
-net.tip.Break_On_XHR=Stop the JavaScript execution as soon as an XMLHttpRequest is made
-# LOCALIZATION NOTE (requestinfo.Blocking, requestinfo.Resolving, requestinfo.Connecting,
-# requestinfo.Sending, requestinfo.Waiting, requestinfo.Receiving, requestinfo.ContentLoad,
-# requestinfo.WindowLoad):
+net.tip.Break_On_XHR=Спиране на изпълнението на JavaScript пи изпращане на заявка XMLHttpRequest
+# LOCALIZATION NOTE (a11y.hasConditionalBreakpoint, a11y.hasDisabledBreakpoint):
+# Used by a11y. Not directly visible in the UI, intended for screen readers.
+# Existence and state of a breakpoint
 net.headers.view_source=изходен код
 net.headers.pretty_print=форматиран вид
-# Net panel timing info labels. Displayed in a tooltip (aka time-info-tip) when hovering the
-net.filter.Media=Медия
-# waterfall graph in the Net panel.
-# LOCALIZATION NOTE (requestinfo.started.label, requestinfo.phases.label, requestinfo.timings.label):
-# Labels used within a tooltip (aka time-info-tip) for waterfall graph in the Net panel.
+# LOCALIZATION NOTE (a11y.updates.script_suspended_on_line_in_file): Used by a11y. Not directly
+# visible in the UI, intended for screen readers.
+# first %S = Line number, second %S = Function name, third %S = File name
+# LOCALIZATION NOTE (a11y.updates.match_found_in_logrows): Used by a11y. Not directly
+# visible in the UI, intended for screen readers.
+# Describes the match found when performing a console panel search
+net.filter.label.All=Всички
+net.filter.tooltip.All=Показване на заявките за файлове независимо от вида им по MIME
+net.filter.label.HTML=HTML
+net.filter.tooltip.HTML=Показване на заявките за файловете с HTML
+net.filter.label.CSS=CSS
+net.filter.tooltip.CSS=Показване на заявките за файловете с CSS
+net.filter.label.JS=JavaScript
+net.filter.tooltip.JS=Показване на заявките за файловете с JavaScript
+net.filter.label.XHR=XHR
+net.filter.tooltip.XHR=Показване на заявките XMLHttpRequest
+net.filter.label.Images=Изображения
+net.filter.tooltip.Images=Показване на заявките за файловете с изображения
+net.filter.label.Plugins=Приставки
+net.filter.tooltip.Plugins=Показване на заявките за файловете за Flash и Silverlight
+net.filter.label.Media=Мултимедия
+net.filter.tooltip.Media=Показване на заявките за файловете с аудио и видео
+net.filter.label.Fonts=Шрифтове
+net.filter.tooltip.Fonts=Показване на заявките за файловете с шрифтове
+# first %S = String key the user is looking for, second %S = Number of rows that contain the matched text
+# examples: Match found for "test" in 17 log rows
+# LOCALIZATION NOTE (a11y.updates.match_found_for_on_line): Used by a11y. Not directly
 Post=Заявка POST
 Put=Заявка PUT
-# LOCALIZATION NOTE (search.Next, search.Previous, search.Case_Sensitive, search.Case_Insensitive,
-# search.Multiple_Files, search.Use_Regular_Expression):
-# Labels used within an options menu for the search box. This menu is displayed if the search box is focused.
+# visible in the UI, intended for screen readers.
+# Describes the match found when performing a script panel search
+# first %S = String key the user is looking for, second $S = Line number the match was found on, third %S = File name the match was found in
 Response=Отговор
 URLParameters=Параметри
 Cache=Кеш
@@ -572,180 +630,292 @@ fontviewer.trademark=Търговска марка
 fontviewer.licensee=Лицензополучател
 fontviewer.extension=Разширение
 fontviewer.pangram=Под южно дърво, цъфтящо в синьо, бягаше малко пухкаво зайче.
-# LOCALIZATION NOTE (search.html.CSS_Selector, search.net.Headers, search.net.Parameters, search.net.Response_Bodies,
-# search.script.Multiple_Files):
-jsonviewer.sort=Подреждане по ключ
-jsonviewer.do_not_sort=Без подреждане
-# Labels used within an options menu for the search box. This menu is displayed if the search box is focused.
-# These labels are specific to a certain panel.
-# A11y Chrome Labels (not visible, spoken by screen readers)
-# A11y panelNode labels (not visible, spoken by screen readers)
-net.jsonviewer.Copy_JSON=Копиране на „%S“ като JSON
-# A11y Domplate labels (not visible, spoken by screen readers)
-# LOCALIZATION NOTE:
-RequestHeaders=Заглавни части на заявката
-ResponseHeaders=Заглавни части на отговора
-CachedResponseHeaders=Кеширани заглавни части на отговора
-PostRequestHeaders=Request Headers From Upload Stream
-# Used by a11y. Not directly visible in the UI, intended for screen readers.
-# Describe contents of inline editor fields
-# LOCALIZATION NOTE (a11y.labels.overridden):
-net.label.ResponseHeadersFromBFCache=The request was resolved directly from the cache, so we have no response from the server. See below for the cached response.
-# Used by a11y. Not directly visible in the UI, intended for screen readers.
-# Indicates, that a style property is overridden by selector with higher specificity
-# LOCALIZATION NOTE (a11y.hasConditionalBreakpoint, a11y.hasDisabledBreakpoint):
-# Used by a11y. Not directly visible in the UI, intended for screen readers.
-# Existence and state of a breakpoint
-plural.Limit_Exceeded2=Максималният размер на журнала на Firebug е превишен, пропуснат е %1$S запис.;Максималният размер на журнала на Firebug е превишен, пропуснати са %1$S записа.
-LimitPrefs=Настройки
-# LOCALIZATION NOTE (a11y.updates.script_suspended_on_line_in_file): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# first %S = Line number, second %S = Function name, third %S = File name
-# LOCALIZATION NOTE (a11y.updates.match_found_in_logrows): Used by a11y. Not directly
-LimitPrefsTitle=За да промените ограничението, променете: „%S“
-Refresh=Обновяване
-panel.tip.Refresh=Refresh the panel display
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing a console panel search
-OpenInTab=Отваряне в нов подпрозорец
-firebug.tip.Open_In_Tab=Open the URL in a new browser tab
-Open_Response_In_New_Tab=Отваряне на отговора в нов подпрозорец
-net.tip.Open_Response_In_New_Tab=Open the response in a new browser tab
-# first %S = String key the user is looking for, second %S = Number of rows that contain the matched text
-# examples: Match found for "test" in 17 log rows
-Profile=Отчет
-ProfilerStarted=Програмата за отчитане работи. Натиснете „Отчет“ отново, за да видите този доклад.
-# LOCALIZATION NOTE (a11y.updates.match_found_for_on_line): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing a script panel search
-# first %S = String key the user is looking for, second $S = Line number the match was found on, third %S = File name the match was found in
 # examples: Match found for "window.alert" on line 322 in utilities.js
-plural.Profile_Time2=(%1$Sms, %2$S извикване);(%1$Sms, %2$S извиквания)
-NothingToProfile=Няма дейност, която да се отчита.
-PercentTooltip=Процент време, в което е работила тази функция.
-CallsHeaderTooltip=Брой извиквания на функцията.
-OwnTimeHeaderTooltip=Време във функцията без това на извиканите от нея функции.
-TimeHeaderTooltip=Време във функцията заедно с това на извиканите от нея функции.
-AvgHeaderTooltip=Средно време, включително извикванията на функции.
-MinHeaderTooltip=Минимално време, включително извикванията на функции.
-MaxHeaderTooltip=Максимално време, включително извикванията на функции.
-ProfileButton.Enabled.Tooltip=Отчитане на времето за изпълнение на JavaScript.
-ProfileButton.Disabled.Tooltip=Отчитане на времето за изпълнение на JavaScript. (Панелът за скриптове трябва да е включен.)
-Function=Функция
-Percent=Процент
 # LOCALIZATION NOTE (a11y.updates.match_found_in_element): Used by a11y. Not directly
+jsonviewer.sort=Подреждане по ключ
+jsonviewer.do_not_sort=Без подреждане
 # visible in the UI, intended for screen readers.
 # Describes the match found when performing an HTML panel search (if it is found in an element node)
 # first %S = Matched search string, second %S = HTML element name containing the matched string, third %S = XPATH string specifying the matched element
-Calls=Извиквания
-OwnTime=Собствено време
-Time=Време
-Avg=Срдн
-Min=Мин
-Max=Макс
-File=Файл
 # example: Match found for "obj" in object element at /html/body/object[2]
-Copy=Копиране
-Cut=Отрязване
-Remove=Изтриване
-Delete=Delete
-Paste=Поставяне
-SelectAll=Select All
-html.Copy_Node=Copy %S
-html.tip.Copy_Node=Copy the %S node and all its contents to the clipboard
-CopyInnerHTML=Копиране на innerHTML
-html.tip.Copy_innerHTML=Copy the contents of the element to the clipboard
-CopyXPath=Копиране на XPath
-html.tip.Copy_XPath=Copy the element's XPath to the clipboard
-Copy_CSS_Path=Копиране на пътя за CSS
-html.tip.Copy_CSS_Path=Copy the element's CSS path to the clipboard
+net.jsonviewer.Copy_JSON=Копиране на „%S“ като JSON
 # LOCALIZATION NOTE (a11y.updates.match_found_in_attribute): Used by a11y. Not directly
 # visible in the UI, intended for screen readers.
-CopyLocation=Копиране на адрес
-clipboard.tip.Copy_Location=Copy the URL of the object's location to the clipboard
-CopyURLParameters=Copy URL Parameters
-net.tip.Copy_URL_Parameters=Copy URL parameters to the clipboard
-CopyPOSTParameters=Copy POST Parameters
-net.tip.Copy_POST_Parameters=Copy POST parameters to the clipboard
-CopyLocationParameters=Копиране на адрес с параметрите
-net.tip.Copy_Location_Parameters=Copy the URL incl. the parameters to the clipboard
-CopyRequestHeaders=Копиране на заглавните части на заявката
-net.tip.Copy_Request_Headers=Copy the request headers to the clipboard
-CopyResponseHeaders=Копиране на заглавните части на отговора
-net.tip.Copy_Response_Headers=Copy the response headers to the clipboard
-CopyResponse=Копиране на тялото на отговора
-net.tip.Copy_Response=Copy the response body to the clipboard
+RequestHeaders=Заглавни части на заявката
+ResponseHeaders=Заглавни части на отговора
+CachedResponseHeaders=Кеширани заглавни части на отговора
+PostRequestHeaders=Заглавни части на заявката от потока при качване
 # Describes the match found when performing an HTML  panel search (if it is found in an attribute node)
 # first %S = Search string that was matched, second %S = Attribute name, third %S = Attribute value,
-CopyError=Копиране на грешката
-console.menu.tip.Copy_Error=Copy the error information to the clipboard
 # fourth %S = HTML element name containing, fifth %S = XPATH string specifying  the matched element
+net.label.ResponseHeadersFromBFCache=Заявката бе удовлетворена директно от кеша, т.е. тя не идва от сървъра. Вижте по-долу за отговора от кеша
 # example: Match found for "abindex" in tabindex="0" in span element at /html/body/span[2]
-CopySource=Копиране на функцията
-dom.tip.Copy_Source=Copy the function's source code to the clipboard
 # LOCALIZATION NOTE (a11y.updates.match_found_in_text_content): Used by a11y. Not directly
 # visible in the UI, intended for screen readers.
 # Describes the match found when performing an HTML panel search (if it is found in a text element's contents)
 # first %S = Matched search string, second %S = Element's text content,
+plural.Limit_Exceeded2=Максималният размер на журнала на Firebug е превишен, пропуснат е %1$S запис.;Максималният размер на журнала на Firebug е превишен, пропуснати са %1$S записа.
+LimitPrefs=Настройки
 # third %S = HTML element name containing, fourth %S = XPATH string specifying  the matched element
-ShowCallsInConsole=Засичане на извиквания на „%S“
-dom.tip.Log_Calls_To_Function=Log calls to the function "%S" inside the Console panel
 # example: Match found for "Firebug Rocks!" in h2 element at /html/body/h2[2]
 # LOCALIZATION NOTE (a11y.updates.match_found_in_selector): Used by a11y. Not directly
 # visible in the UI, intended for screen readers.
-ShowEventsInConsole=Засичане на събитията
-html.tip.Show_Events_In_Console=Log event information to the console
+LimitPrefsTitle=За да промените ограничението, променете: „%S“
+Refresh=Обновяване
+panel.tip.Refresh=Обновяване на показания панел
 # Describes the match found when performing a CSS panel search (if it is found in a selector)
 # first %S = Matched search string, second %S = Selector, in which the match was found
-panel.Enabled=Включено
-panel.tip.Enabled=Toggle the panel activation
+OpenInTab=Отваряне в нов подпрозорец
+firebug.tip.Open_In_Tab=Отваряне на адреса в нов подпрозорец на браузъра
+Open_Response_In_New_Tab=Отваряне на отговора в нов подпрозорец
+net.tip.Open_Response_In_New_Tab=Отваряне на отговора в нов подпрозорец на браузъра
 # example: Match found for "main" in #mainContent h2 {
 # LOCALIZATION NOTE (a11y.updates.match_found_in_style_property): Used by a11y. Not directly
+Profile=Отчет
+ProfilerStarted=Програмата за отчитане работи. Натиснете „Отчет“ отново, за да видите този доклад
+ProfilerRequiresTheScriptPanel=За да работи отчитането на времето, панелът за скриптове трябва да е включен
 # visible in the UI, intended for screen readers.
-panel.tooltip.Show_Command_Line_Popup=Show Command Line Popup
 # Describes the match found when performing a CSS panel search (if it is found in a style declaration)
 # first %S = Matched search string, second %S = Style property, in which the match was found
 # third %S = Selector the style declaration applies to
 # example: Match found for background in style declaration background-repeat: "repeat-x"; in selector #mainContent {
-console.MethodNotSupported=Конзолата на Firebug не поддържа „%S“
+plural.Profile_Time2=(%1$Sms, %2$S извикване);(%1$Sms, %2$S извиквания)
+NothingToProfile=Няма дейност, която да се отчита
+PercentTooltip=Процент време, в което е работила тази функция
+CallsHeaderTooltip=Брой извиквания на функцията
+OwnTimeHeaderTooltip=Време във функцията без това на извиканите от нея функции
+TimeHeaderTooltip=Време във функцията заедно с това на извиканите от нея функции
+AvgHeaderTooltip=Средно време, включително извикванията на функции
+MinHeaderTooltip=Минимално време, включително извикванията на функции
+MaxHeaderTooltip=Максимално време, включително извикванията на функции
+ProfileButton.Tooltip=Отчитане на времето за изпълнение на JavaScript
+Function=Функция
+Percent=Процент
 # LOCALIZATION NOTE (a11y.updates.match_found_in_dom_property): Used by a11y. Not directly
 # visible in the UI, intended for screen readers.
 # Describes the match found when performing a DOM panel search
-commandline.MethodNotSupported=Командният ред на Firebug не поддържа „%S“
 # first %S = Matched search string, second %S = DOM property, in which the match was found
+Calls=Извиквания
+OwnTime=Собствено време
+Time=Време
+Avg=Срдн
+Min=Мин
+Max=Макс
+File=Файл
 # examples: Match found for "time" in DOM property _starttime
+Copy=Копиране
+Cut=Отрязване
+Remove=Изтриване
+Delete=Изтриване
+Paste=Поставяне
+SelectAll=Избиране на всичко
+html.Copy_Node=Копиране на %S
+html.tip.Copy_Node=Копиране на елемента %S заедно с цялото му съдържание
+CopyInnerHTML=Копиране на innerHTML
+html.tip.Copy_innerHTML=Копиране на съдържанието на елемента
+CopyXPath=Копиране на XPath
+html.tip.Copy_XPath=Копиране на пътя по XPath до елемента
+Copy_CSS_Path=Копиране на пътя за CSS
+html.tip.Copy_CSS_Path=Копиране на пътя по CSS до елемента
 # LOCALIZATION NOTE (a11y.updates.match_found_in_net_row): Used by a11y. Not directly
-commandline.CurrentWindow=Current window:
 # visible in the UI, intended for screen readers.
 # Describes the match found when performing a Net panel search
-console.Disable_Break_On_All_Errors=Без прекъсване при всички грешки
-console.Break_On_All_Errors=Прекъсване при всички грешки
+html.menu.Paste=Поставяне на %S
+html.tip.Paste=Поставяне на %S като съдържание
 # first %S = Matched search string, second %S = File name associated to the row, in which the match was found,
 # third %S = Column, in which the match was found, fourth %S = Column value
-console.Break_On_This_Error=Прекъсване при тази грешка
+html.menu.Paste_Replace_Content=Замяна на съдържанието
+html.tip.Paste_Replace_Content=Замяна на съдържанието на елемента
+html.menu.Paste_Replace_Node=Замяна на елемента
+html.tip.Paste_Replace_Node=Замяна на целия елемент заедно със съдържанието му
+html.menu.Paste_AsFirstChild=Като първи наследник
+html.tip.Paste_AsFirstChild=Поставяне като първи наследник на елемента
+html.menu.Paste_AsLastChild=Като последен наследник
+html.tip.Paste_AsLastChild=Поставяне като последен наследник на елемента
+html.menu.Paste_Before=Преди
+html.tip.Paste_Before=Поставяне преди елемента
+html.menu.Paste_After=След
+html.tip.Paste_After=Поставяне след елемента
 # examples: Match found for "792" in GET loading_animation.gif, timeline: 792 ms
 # LOCALIZATION NOTE (a11y.updates.match_found_in_net_summary_row): Used by a11y. Not directly
-console.Use_Arrow_keys,_Tab_or_Enter=Use Arrow keys, Tab or Enter
+html.menu.Reload_Frame=Презареждане на рамката
+html.menu.tip.Reload_Frame=Презареждане на съдържанието на рамката
 # visible in the UI, intended for screen readers.
 # Describes the match found when performing a Net panel search (if it is found in the Net summary row)
-console.JSDisabledInFirefoxPrefs=JavaScript е изключен в настройките на Firefox. Ако искате да използвате панела на конзолата, трябва да включите тази възможност от: „Инструменти“ или „Редактиране“ → „Настройки“ → „Съдържание“ → „Включване на JavaScript“.
+CopyLocation=Копиране на адрес
+clipboard.tip.Copy_Location=Копиране на адреса на обекта
+CopyURLParameters=Копиране на параметрите
+net.tip.Copy_URL_Parameters=Копиране на параметрите от адреса на обекта
+CopyPOSTParameters=Копиране на параметрите при POST
+net.tip.Copy_POST_Parameters=Копиране на параметрите от заявката POST
+CopyLocationParameters=Копиране на адрес с параметрите
+net.tip.Copy_Location_Parameters=Копиране на адрес заедно с параметрите
+CopyRequestHeaders=Копиране на заглавните части на заявката
+net.tip.Copy_Request_Headers=Копиране на заглавните части на заявката
+CopyResponseHeaders=Копиране на заглавните части на отговора
+net.tip.Copy_Response_Headers=Копиране на заглавните части на заявката
+CopyResponse=Копиране на тялото на отговора
+net.tip.Copy_Response=Копиране на тялото на отговора
 # first %S = Matched search string, second %S = Column value, in which the match was found
 # examples: Match found for "05" in net summary row: 4.05s
+CopyError=Копиране на грешката
+console.menu.tip.Copy_Error=Копиране на информацията за грешката
 # LOCALIZATION NOTE (a11y.updates.no_matches_found): Used by a11y. Not directly
 # visible in the UI, intended for screen readers.
+CopySource=Копиране на функцията
+dom.tip.Copy_Source=Копиране на изходния код на функцията
 # Indicates that the searched string was not matched
 # %S = Search string
 # examples: No matched found for "wefkhwefkgwekhjgjh"
-console.multiHighlightLimitExceeded=Прекалено много елементи в масива — всичките не могат да се покажат на страницата (текущият максимум е %S).\nПогледнете настройката „extensions.firebug.multiHighlightLimit“.
 # LOCALIZATION NOTE (confirmation.Reset_All_Firebug_Options):
 # Text in the confirmation dialog shown when the options should be reset
+ShowCallsInConsole=Засичане на извикванията на „%S“
+dom.tip.Log_Calls_To_Function=Извеждане на извикванията на „%S“ в панела за конзолата
 # LOCALIZATION NOTE (confirmation.Edit_CSS_Source):
-commandline.disabledForXMLDocs=Командният ред на Firebug не работи на страници от XML. <a>Превключете към HTML</a>, за да го включите.
 # If the user has changed the CSS and clicks on the Source Edit button, a confirmation dialog is
 # displayed containing the following message
+ShowEventsInConsole=Засичане на събитията
+html.tip.Show_Events_In_Console=Извеждане на събитията в панела за конзолата
 # Console messages
 # LOCALIZATION NOTE (message.sourceNotAvailableFor, message.The_resource_from_this_URL_is_not_text):
+panel.Enabled=Включено
+panel.tip.Enabled=Включване/изключване на панела
 # An error message displayed in the Script panel when a source can't be displayed
+# for specific URL.
+# examples: Reload the page to get source for: http://www.example.com/script.js
+panel.tooltip.Show_Command_Line_Popup=Показване на големия панел към командния ред
+# examples: The resource from this URL is not text: http://www.example.com/script.js
+## LOCALIZATION NOTE (firebug.history.Go_back_to_this_script, firebug.history.Go_forward_to_this_script,
+# firebug.history.Stay_on_this_page): Tooltips for menu items in the history popup menu.
+# LOCALIZATION NOTE (firebug.history.Go_back_one_script, firebug.history.Go_forward_one_script):
+console.MethodNotSupported=Конзолата на Firebug не поддържа „%S“
+# Tooltips for back/forward buttons on the Script panel toolbar.
+# LOCALIZATION NOTE (script.warning.inactive_during_page_load, script.suggestion.inactive_during_page_load):
+commandline.errorSourceHeader=ИЗРАЗ, ИЗЧИСЛЕН ОТ КОМАНДНИЯ РЕД НА FIREBUG:
+# Message displayed in the Script panel, if the debugger is inactive during page load.
+# The suggestion message represents an advice how to solve the problem. It contains a link enclosed in <a> and </a>
+commandline.MethodDisabled=Методът за командния ред е временно спрян
+# to reload the sources
+# LOCALIZATION NOTE (script.warning.javascript_not_enabled, script.suggestion.javascript_not_enabled):
+# This message is displayed within the Script panel if javascript is not enabled.
+commandline.MethodNotSupported=Командният ред на Firebug не поддържа „%S“
+# The suggestion message represents an advice how to solve the problem.
+# LOCALIZATION NOTE (script.button.enable_javascript): Title for a link, that is displayed on
+# the Script panel, if Javascript is disabled. This link allows to enable it.
+commandline.CurrentWindow=Текущ прозорец:
+# LOCALIZATION NOTE (script.warning.all_scripts_filtered, script.suggestion.all_scripts_filtered):
+# Message displayed in the Script panel, if no JavaScripts are available for the current page.
+console.Disable_Break_On_All_Errors=Без прекъсване при всички грешки
+console.Break_On_All_Errors=Прекъсване при всички грешки
+# The suggestion message represents an advice how to solve the problem.
+# LOCALIZATION NOTE (script.warning.no_javascript, script.suggestion.no_javascript):
+console.Break_On_This_Error=Прекъсване при тази грешка
+# Message displayed in the Script panel, if the page doesn't include any JavaScript.
+# The suggestion message represents an advice how to solve the problem.
+console.Use_Arrow_keys,_Tab_or_Enter=Използвайте клавишите със стрелки, табулатора или „Enter“
+# LOCALIZATION NOTE (script.warning.no_javascript, script.suggestion.no_javascript):
+# Message displayed in the Script panel, if the page is opened in different tabs/windows and
+console.JSDisabledInFirefoxPrefs=JavaScript е изключен в настройките на Firefox. Ако искате да използвате панела на конзолата, трябва да включите тази възможност от: „Инструменти“ или „Редактиране“ → „Настройки“ → „Съдържание“ → „Включване на JavaScript“.
+# the debugger is already halted at a breakpoint inside another tab/window.
+# The suggestion message represents an advice how to solve the problem.
+# firebug.dtd
+console.ScriptPanelMustBeEnabledForTraces=Панелът за скриптове трябва да е включен за отчитане на стека. <a>Включване на панела за скриптове</a>
+# LOCALIZATION NOTE (firebug.Rerun, firebug.Continue, firebug.StepOver, firebug.StepInto,
+# firebug.StepOut, firebug.RunUntil)
+# Labels used for debugger options available in the Script panel.
+tooltip.multipleFiltersHint=Натиснете Ctrl+основния бутон на мишката, за да изберете повече от един филтър
+# LOCALIZATION NOTE (firebug.Inspect, firebug.InspectElement, firebug.InspectElementWithFirebug)
+# Labels for Firebug Inspector. Used by a button (available in Firefox Customize Toolbar dialog)
+# and also page context menu. As soon as built-in inspector is having its own "Inspect Element"
+# Firebug should start using "Inspect Element with Firebug" to distinguish itself.
+# editors.dtd
+# LOCALIZATION NOTE (firebug.Edit, firebug.css.sourceEdit, firebug.css.liveEdit,
+# firebug.EditCSSTooltip, firebug.css.sourceEdit.tooltip, firebug.css.liveEdit.tooltip)
+console.multiHighlightLimitExceeded=Прекалено много елементи в масива — всичките не могат да се покажат на страницата (текущият максимум е %S).\nПогледнете настройката „extensions.firebug.multiHighlightLimit“.
+# Used in the CSS panel for the Edit button.
+# LOCALIZATION NOTE (firebug.activation.privateBrowsingMode):
+# Message displayed in the Console panel when the private browsing mode is on.
+commandline.disabledForXMLDocs=Командният ред на Firebug не работи на страници от XML. <a>Превключете към HTML</a>, за да го включите.
+# (in Firefox 4+ it's 'Start Private Browsing')
+# LOCALIZATION NOTE (firebug.breakpoint.showBreakNotifications):
+commandline.Use_in_Command_Line=Използване чрез командния ред
+commandline.tip.Use_in_Command_Line=Фокусиране на командния ред, при което тази стойност ще е достъпна като „$p“
+# Label used within Script panel's options menu. Represents an option, that can be used
+# to switch of the break notifications.
+# LOCALIZATION NOTE (firebug.activation.privateBrowsingMode):
+commandline.include.includeSuccess=%S е правилно вмъкнат
+# Message displayed in a break notification popup next to a checkbox.
+# Includes a link enclosed in <a> and </a> to open the panel's options menu.
+# LOCALIZATION NOTE (firebug.bon.cause.disableDebuggerKeyword2, firebug.bon.tooltip.disableDebuggerKeyword2):
+commandline.include.aliasNotFound=Синонимът „%S“ липсва
+# Message displayed in a break notification popup when break on debugger; keyword happens.
+# The keyword can be disabled by creating a disabled breakpoint on the same line.
+# The other label is used for a tooltip on the action button.
+commandline.include.loadFail=Следният скрипт не бе зареден: %S
+# LOCALIZATION NOTE (firebug.bon.scriptPanelNeeded): A label used by 'Break On Next' button
+# This feature needs the Script panel enabled in order to work.
+# LOCALIZATION NOTE (firebug.dom.noChildren):
+commandline.include.invalidRequestProtocol=Поддържат се само протоколите HTTP/HTTPS
+# Message displayed in the DOM panel in cases, in which there are no children objects
+# and so nothing to display.
+# LOCALIZATION NOTE (firebug.reps.more): Label shown when the displayed array/list has
+commandline.include.invalidSyntax=Неуспешно вмъкване поради синтактични грешки. Проверете дали файлът действително съдържа JavaScript
+# more elements then displayed on the screen. "..." is automatically appended.
+# LOCALIZATION NOTE (firebug.storage.totalItems): Semicolon list of plural forms.
+# Label used in the DOM panel for local/session/global storage.
+commandline.include.aliasCreated=Синонимът „%S“ е създаден
+# It's informing the user about the number of items in the storage.
+# %1 = Number of storage items
+# example: 1 item in Storage
+commandline.include.aliasRemoved=Синонимът „%S“ е изтрит
+# example: 2 items in Storage
+# LOCALIZATION NOTE (firebug.reps.table.ObjectProperties):
+# Label used in the header of the output of the console.table() method inside the Console panel,
+commandline.include.invalidAliasName=Името на синоним не трябва да съдържа знаците „.“ или „/“. Името на синонима „%S“ е неправилно
+# if an object is passed into it.
+# LOCALIZATION NOTE (firebug.completion.empty):
+# Label used in the command line by the auto-complete function.
+commandline.include.tooLongAliasName=Името на синоним трябва да е не по-дълго от 30 знака. Името на синонима „%S“ е неправилно
+# Displayed, if there are no possible completions.
+# LOCALIZATION NOTE (firebug.failedToPreviewObjectURL, firebug.failedToPreviewImageURL):
+commandline.include.invalidAliasArgumentType=Неправилен втори аргумент. Очаква се име на синоним
+# Label used in an image preview infotip in the HTML panel when hovering over an <img> element
+# when loading of the given URL fails. The firebug.failedToPreviewObjectURL is specifically used
+commandline.include.invalidUrlArgumentType=Неправилен адрес като аргумент
+# for moz-filedata (HTML5),
+# see: https://developer.mozilla.org/en/Using_files_from_web_applications#Example.3a_Using_object_URLs_to_display_images
+# LOCALIZATION NOTE (firebug.Memory_Profiler_Started):
+commandline.include.confirmDelete=Да се изтрие ли синонимът „%S“?
+# Message logged into the Console panel when memory profiler session starts.
+# LOCALIZATION NOTE (firebug.Objects_Added_While_Profiling):
+commandline.include.noDefinedAlias=(не са дефинирани синоними)
+commandline.tip.Delete_Alias=Изтриване на синоним
+commandline.tip.Edit_Alias_Name=Редактиране на името на синоним
+commandline.tip.Edit_Alias_URL=Редактиране на адреса на синоним
+commandline.tip.Open_In_Scratchpad=Отваряне на съдържанието на скрипта в редактор
+commandline.tip.Include_Script=Изтегляне и изпълнение на скрипт
+commandline.label.DeleteAlias=Изтриване на синоним
+commandline.label.EditAliasName=Редактиране на име на синоним
+commandline.label.EditAliasURL=Редактиране на адреса сочен от синоним
+commandline.label.OpenInScratchpad=Отваряне в редактор
+commandline.label.IncludeScript=Вмъкване на „%S“
+# Title for a group (logged into the Console panel), that contains a list of new objects
+# allocated within memory profiler session.
+# LOCALIZATION NOTE (firebug.Memory_Profiler_Results):
+# Message used within the Console panel when the memory profiler session is finished.
+# LOCALIZATION NOTE (firebug.Entire_Session):
+# Label used within memory profiler results to mark summary information for entire session.
+Do_not_show_this_message_again=Това съобщение да не се показва повече
+#
+#
+#
+scratchpad.loading=Зареждане, изчакайте…
+scratchpad.failLoading=Грешка при зареждането на скрипта
+#
+#
+#
+#
+#
 net.sizeinfo.Response_Body=Тяло на отговора
 net.sizeinfo.Post_Body=Тяло на заявката POST
 net.sizeinfo.Total_Sent=Общо изпратени
@@ -753,47 +923,56 @@ net.sizeinfo.Total_Received=Общо получени
 net.sizeinfo.Including_HTTP_Headers=Заедно със заглавните части
 net.ActivationMessage=Панелът за мрежата е включен. Не са показани заявките докато е бил изключен.
 net.responseSizeLimitMessage=Превишен е максималният размер на отговора за Firebug. Натиснете <a>тук</a>, за да отворите целия отговор в нов подпрозорец на Firefox.
-# for specific URL.
-# examples: Reload the page to get source for: http://www.example.com/script.js
-# examples: The resource from this URL is not text: http://www.example.com/script.js
+#
+#
+#
 net.postDataSizeLimitMessage=Превишен е максималният размер на отговора за Firebug.
 net.Break_On_XHR=Прекъсване при XHR
 net.label.Parameters=Параметри
 net.label.Parts=Части
 net.label.Source=Изходен код
-## LOCALIZATION NOTE (firebug.history.Go_back_to_this_script, firebug.history.Go_forward_to_this_script,
-# firebug.history.Stay_on_this_page): Tooltips for menu items in the history popup menu.
+#
+#
 net.label.Resend=Изпращане наново
-net.tip.Resend=Send the request again
-# LOCALIZATION NOTE (firebug.history.Go_back_one_script, firebug.history.Go_forward_one_script):
-# Tooltips for back/forward buttons on the Script panel toolbar.
+net.tip.Resend=Изпращане на заявката наново
+#
+#
 net.option.Disable_Browser_Cache=Изключване на кеша на браузъра
-net.option.tip.Disable_Browser_Cache=Disable the browser's HTTP cache
-# LOCALIZATION NOTE (script.warning.inactive_during_page_load, script.suggestion.inactive_during_page_load):
-# Message displayed in the Script panel, if the debugger is inactive during page load.
-# The suggestion message represents an advice how to solve the problem. It contains a link enclosed in <a> and </a>
-# to reload the sources
-net.option.Show_Paint_Events=Събития за изобразяване
-net.option.tip.Show_Paint_Events=Show MozAfterPaint events as green lines inside the timeline
-# LOCALIZATION NOTE (script.warning.javascript_not_enabled, script.suggestion.javascript_not_enabled):
-# This message is displayed within the Script panel if javascript is not enabled.
-# The suggestion message represents an advice how to solve the problem.
+net.option.tip.Disable_Browser_Cache=Изключване на кеша на браузъра за HTTP
+#
+#
+#
+#
+net.option.Show_Paint_Events=Събития при изчертаване
+net.option.tip.Show_Paint_Events=Показване на събитията при изчертаване MozAfterPaint като зелени линии в историята
+#
+#
+#
 net.option.Show_BFCache_Responses=Отговори от кеша от историята
 net.option.tip.Show_BFCache_Responses=Панелът за мрежата може да показва и отговорите от кеша от историята
-# LOCALIZATION NOTE (script.button.enable_javascript): Title for a link, that is displayed on
-# the Script panel, if Javascript is disabled. This link allows to enable it.
-# LOCALIZATION NOTE (script.warning.all_scripts_filtered, script.suggestion.all_scripts_filtered):
+#
+#
+#
 script.Break_On_Next=Прекъсване при следващо
 script.Disable_Break_On_Next=Без прекъсване при следващо
 ShowHttpHeaders=Заглавни части на HTTP
-# Message displayed in the Script panel, if no JavaScripts are available for the current page.
-# The suggestion message represents an advice how to solve the problem.
-# LOCALIZATION NOTE (script.warning.no_javascript, script.suggestion.no_javascript):
-# Message displayed in the Script panel, if the page doesn't include any JavaScript.
+#
+#
+#
+#
 plural.Request_Count2=%1$S заявка;%1$S заявки
-FromCache=от кеша
+#
+#
+net.summary.from_cache=%S е от кеша
+#
+#
+#
+net.summary.tip.request_count=Брой заявки
+net.summary.tip.total_size=Общият брой на всички заявки
+net.summary.tip.total_cached_size=Общ размер на заявките удовлетворени от кеша
+net.summary.tip.total_request_time=Общо време за зареждане на всички заявки и момента на настъпването на събитието „onclick“
 StopLoading=Спиране на зареждането
-net.tip.Stop_Loading=Stop loading the request
+net.tip.Stop_Loading=Спиране на зареждането на заявката
 LargeData=(Голям обем данни)
 ShowComputedStyle=Изчислен стил
 StyleGroup-text=Текст
@@ -801,41 +980,57 @@ StyleGroup-background=Фон
 StyleGroup-box=Модел на разполагането
 StyleGroup-layout=Подредба
 StyleGroup-other=Други
-Dimensions=%S × %S
-# The suggestion message represents an advice how to solve the problem.
-# LOCALIZATION NOTE (script.warning.no_javascript, script.suggestion.no_javascript):
-# Message displayed in the Script panel, if the page is opened in different tabs/windows and
+Dimensions=%S × %S
+#
+#
+#
 CopyColor=Копиране на цвета
-css.tip.Copy_Color=Copy the color to the clipboard
-# the debugger is already halted at a breakpoint inside another tab/window.
-# The suggestion message represents an advice how to solve the problem.
-# firebug.dtd
-# LOCALIZATION NOTE (firebug.Rerun, firebug.Continue, firebug.StepOver, firebug.StepInto,
+css.tip.Copy_Color=Копиране на цвета
+#
+#
+#
+#
 CopyImageLocation=Копиране на адреса на изображението
-css.tip.Copy_Image_Location=Copy the URL of the image to the clipboard
+css.tip.Copy_Image_Location=Копиране на адреса на изображението
 OpenImageInNewTab=Отваряне на изображението в нов подпрозорец
-css.tip.Open_Image_In_New_Tab=Open the image in a new browser tab
-# firebug.StepOut, firebug.RunUntil)
-# Labels used for debugger options available in the Script panel.
-# LOCALIZATION NOTE (firebug.Inspect, firebug.InspectElement, firebug.InspectElementWithFirebug)
+css.tip.Open_Image_In_New_Tab=Отваряне на изображението в нов подпрозорец
+#
+#
+#
 OmitObjectPathStack=Пропускане на стека на лентата с инструменти
-callstack.option.tip.Omit_Object_Path_Stack=Do not display the object path stack
+callstack.option.tip.Omit_Object_Path_Stack=Да не се извежда стека на пътя до обекта
 Load_Original_Source=Зареждане на първоначалния код
-css.tip.Load_Original_Source=Discard the changes and load the original CSS
-# Labels for Firebug Inspector. Used by a button (available in Firefox Customize Toolbar dialog)
-# and also page context menu. As soon as built-in inspector is having its own "Inspect Element"
-# Firebug should start using "Inspect Element with Firebug" to distinguish itself.
-Copy_Rule_Declaration=Копиране на декларацията на правилото
-css.tip.Copy_Rule_Declaration=Copy the rule including all its properties to the clipboard
-# editors.dtd
-# LOCALIZATION NOTE (firebug.Edit, firebug.css.sourceEdit, firebug.css.liveEdit,
-# firebug.EditCSSTooltip, firebug.css.sourceEdit.tooltip, firebug.css.liveEdit.tooltip)
-Copy_Style_Declaration=Копиране на декларацията на стила
-css.tip.Copy_Style_Declaration=Copy the rule's properties to the clipboard
-# Used in the CSS panel for the Edit button.
-# LOCALIZATION NOTE (firebug.activation.privateBrowsingMode):
-# Message displayed in the Console panel when the private browsing mode is on.
-# (in Firefox 4+ it's 'Start Private Browsing')
+css.tip.Load_Original_Source=Отмяна на промените и зареждане на първоначалния код
+#
+#
+#
+callstack.option.Show_Arguments=Извеждане на аргументите
+callstack.option.tip.Show_Arguments=Показване и на аргументите на функциите
+#
+#
+#
+Copy_Rule_Declaration=Копиране на правилото
+css.tip.Copy_Rule_Declaration=Копиране на декларацията на правилото заедно със всички принадлежащи свойства
+#
+#
+#
+Copy_Style_Declaration=Копиране на стила
+css.tip.Copy_Style_Declaration=Копиране на всички свойства принадлежащи на правилото
+#
+#
+#
+#
+#
+css.label.Copy_Property_Declaration=Копиране на свойство
+css.tip.Copy_Property_Declaration=Копиране на цялото декларирано свойство
+css.label.Copy_Property_Name=Копиране на име
+css.tip.Copy_Property_Name=Копиране на името на свойството
+css.label.Copy_Property_Value=Копиране на стойност
+css.tip.Copy_Property_Value=Копиране на стойността на свойството
+#
+#
+#
+#
 plural.Error_Count2=%1$S грешка;%1$S грешки
 moduleManager.title=Панелът за „%S“ е изключен
 moduleManager.desc3=Включвайте/изключвайте всички панели на Firebug чрез иконата в лентата за състояние. За контрол на отделните панели използвайте малките менюта към подпрозорците им.
@@ -846,23 +1041,19 @@ Reset_Panels_To_Disabled=Всички панели да са изключени
 Open_Console=Отваряне на конзолата
 Open_Console_Tooltip=Отваряне на конзолата на Firebug за трасиране.
 Scope_Chain=Верига на обхватите
-# LOCALIZATION NOTE (firebug.breakpoint.showBreakNotifications):
-# Label used within Script panel's options menu. Represents an option, that can be used
-# to switch of the break notifications.
+#
+#
+#
 With_Scope=Обхват на with
-# LOCALIZATION NOTE (firebug.activation.privateBrowsingMode):
+#
 Call_Scope=Обхват на call
-# Message displayed in a break notification popup next to a checkbox.
+#
 Window_Scope=Обхват на window
-Logs=Журнали
-Options=Настройки
-Copy_Stack=Копиране на стека
-Copy Exception=Копиране на изключението
-# Includes a link enclosed in <a> and </a> to open the panel's options menu.
-# LOCALIZATION NOTE (firebug.bon.cause.disableDebuggerKeyword2, firebug.bon.tooltip.disableDebuggerKeyword2):
-# Message displayed in a break notification popup when break on debugger; keyword happens.
-# The keyword can be disabled by creating a disabled breakpoint on the same line.
-# The other label is used for a tooltip on the action button.
+#
+#
+#
+#
+#
 requestinfo.Blocking=Блокиране
 requestinfo.Resolving=Търсене по DNS
 requestinfo.Connecting=Свързване
@@ -871,38 +1062,38 @@ requestinfo.Waiting=Изчакване
 requestinfo.Receiving=Получаване
 requestinfo.ContentLoad=„DOMContentLoaded“ (събитие)
 requestinfo.WindowLoad=„load“ (събитие)
-# LOCALIZATION NOTE (firebug.bon.scriptPanelNeeded): A label used by 'Break On Next' button
-# This feature needs the Script panel enabled in order to work.
+#
+#
 requestinfo.started.label=Време спрямо началото на заявката
 requestinfo.phases.label=Фази и изминало време спрямо началото на заявката
 requestinfo.timings.label=Събития спрямо началото на заявката:
 search.Firebug_Search=Търсене на Firebug
-# LOCALIZATION NOTE (firebug.dom.noChildren):
-# Message displayed in the DOM panel in cases, in which there are no children objects
-# and so nothing to display.
+#
+#
+#
 search.Next=Следваща поява
-search.tip.Next=Search for the next match
+search.tip.Next=Търсене на следващата поява
 search.Previous=Предишна поява
-search.tip.Previous=Search for the previous match
+search.tip.Previous=Търсене на предишната поява
 search.Case_Sensitive=Разлика главни/малки
-search.tip.Case_Sensitive=Consider the case when searching
+search.tip.Case_Sensitive=Зачитане на регистъра на буквите при търсене
 search.Case_Insensitive=Без разлика главни/малки
-search.tip.Case_Insensitive=Ignore the case when searching
+search.tip.Case_Insensitive=Игнориране на регистъра на буквите при търсене
 search.Multiple_Files=Много файлове
-search.tip.Multiple_Files=Search inside all files related to this panel
+search.tip.Multiple_Files=Търсене във всички файлове свързани с този панел
 search.Use_Regular_Expression=Регулярни изрази
-search.tip.Use_Regular_Expression=Interpret the entered string as a regular expression when searching
-# LOCALIZATION NOTE (firebug.reps.more): Label shown when the displayed array/list has
-# more elements then displayed on the screen. "..." is automatically appended.
-# LOCALIZATION NOTE (firebug.storage.totalItems): Semicolon list of plural forms.
-# Label used in the DOM panel for local/session/global storage.
+search.tip.Use_Regular_Expression=Интерпретиране на въведения за търсене низ като регулярен израз
+#
+#
+#
+#
 search.html.CSS_Selector=Селектор на CSS
 search.net.Headers=Заглавни части
 search.net.Parameters=Параметри
 search.net.Response_Bodies=Тела на отговорите
-search.net.tip.Response_Bodies=Search also in response bodies
+search.net.tip.Response_Bodies=Търсене и в телата на отговорите
 firebug.console.Persist=Запазване
-firebug.console.Do_Not_Clear_On_Reload2=Do not clear the panel on page reload
+firebug.console.Do_Not_Clear_On_Reload2=Панелът да не се изчиства при зареждане на страница
 firebug.console.Show_All_Log_Entries=Всички журнални записи
 firebug.console.Errors=Грешки
 firebug.console.Filter_by_Errors=Само съобщения за грешки
@@ -912,122 +1103,126 @@ firebug.console.Info=Информация
 firebug.console.Filter_by_Info=Само съобщения за информация
 firebug.console.Debug_Info=Изчистване на грешки
 firebug.console.Filter_by_Debug_Info=Само съобщения за изчистване на грешки
-firebug.Deactivate_Firebug=Deactivate Firebug
-firebug.tip.Deactivate_Firebug=Deactivate Firebug for the current website
+firebug.Deactivate_Firebug=Изключване на Firebug
+firebug.tip.Deactivate_Firebug=Изключване на Firebug за текущия уеб сайт
+#
+#
+#
+firebug.tip.Toggle_Side_Panels=Показване/скриване на страничните панели
 firebug.ShowFirebug=Отваряне на Firebug
-firebug.menu.tip.Open_Firebug=Show the Firebug UI
+firebug.menu.tip.Open_Firebug=Показване на интерфейса на Firebug
 firebug.HideFirebug=Скриване на Firebug
-firebug.menu.tip.Minimize_Firebug=Minimize Firebug, but keep it active
-firebug.FocusFirebug=Focus Firebug Window
-firebug.menu.tip.Focus_Firebug=Focus Detached Firebug Window
+firebug.menu.tip.Minimize_Firebug=Скриване на Firebug без той да се изключва
+firebug.FocusFirebug=Фокусиране на Firebug
+firebug.menu.tip.Focus_Firebug=Предаване на фокуса на отделения прозорец на Firebug
 firebug.menu.Enable_All_Panels=Включване на всички панели
-firebug.menu.tip.Enable_All_Panels=Enable all activable panels
+firebug.menu.tip.Enable_All_Panels=Включване на всички панели
 firebug.menu.Disable_All_Panels=Изключване на всички панели
-firebug.menu.tip.Disable_All_Panels=Disable all activable panels
+firebug.menu.tip.Disable_All_Panels=Изключване на всички панели
 firebug.menu.Customize_shortcuts=Промяна на клавишните комбинации
-firebug.menu.tip.Customize_Shortcuts=Customize Firebug's internal key bindings
+firebug.menu.tip.Customize_Shortcuts=Промяна на клавишните комбинации на Firebug
 firebug.Options=Настройки
-firebug.menu.tip.Options=Global Firebug preferences
+firebug.menu.tip.Options=Настройки на Firebug
 firebug.menu.Enable_Accessibility_Enhancements=Включване на достъпността
-firebug.menu.tip.Enable_Accessibility_Enhancements=Enable full control via keyboard and other accessibility enhancements
-firebug.menu.Activate_Same_Origin_URLs2=Activate For Same Origin URLs
-firebug.menu.tip.Activate_Same_Origin_URLs=Activate Firebug for URLs matching the same origin policy
-firebug.menu.Reset_All_Firebug_Options=Стандартни стойности за всички настройки на Firebug
-firebug.menu.tip.Reset_All_Firebug_Options=Reset all Firebug preferences to their default values
+firebug.menu.tip.Enable_Accessibility_Enhancements=Включване на пълен контрол чрез клавиатурата, както и другите подобрения за достъпността
+firebug.menu.Activate_Same_Origin_URLs2=Включване при еднакъв произход
+firebug.menu.tip.Activate_Same_Origin_URLs=Включване на Firebug за адресите, които съвпадат по политиката за еднакъв произход
+firebug.menu.Reset_All_Firebug_Options=Стандартни стойности за всичко
+firebug.menu.tip.Reset_All_Firebug_Options=Връщане на стандартните стойности за всички настройки на Firebug
 firebug.menu.Firebug_Online=Firebug в Мрежата
-firebug.menu.tip.Firebug_Online=Websites related to Firebug
-firebug.menu.Extensions=Firebug Extensions...
-firebug.menu.tip.Extensions=Download and Install Firebug Extensions
-firebug.menu.Vertical_Panels=Vertical Panels
-firebug.menu.tip.Vertical_Panels=Toggle the layout of the Firebug main and side panels
-firebug.menu.Show_Info_Tips=Show Info Tips
-firebug.menu.tip.Show_Info_Tips=Show popups with information about the hovered element
-firebug.Show_Error_Count=Показване на броя на грешките
-firebug.menu.tip.Show_Error_Count=Show the number of errors logged inside the console
+firebug.menu.tip.Firebug_Online=Уеб сайтове посветени на Firebug
+firebug.menu.Extensions=Разширения за Firebug…
+firebug.menu.tip.Extensions=Изтегляне и инсталиране на разширения за Firebug
+firebug.menu.Vertical_Panels=Вертикални панели
+firebug.menu.tip.Vertical_Panels=Превключване на разположението на основния и страничните панели на Firebug
+firebug.menu.Show_Info_Tips=Подсказки
+firebug.menu.tip.Show_Info_Tips=Показване на изскачащи прозорци с информация за елемента под показалеца
+firebug.Show_Error_Count=Брой на грешките
+firebug.menu.tip.Show_Error_Count=Показване на броя на грешките отчетени в конзолата
 firebug.TextSize=Размер на шрифта
-firebug.menu.tip.Text_Size=Change the text size used in Firebug
+firebug.menu.tip.Text_Size=Промяна на размера на шрифта във Firebug
 firebug.IncreaseTextSize=Увеличаване
-firebug.menu.tip.Increase_Text_Size=Increase the text sizes used in Firebug
+firebug.menu.tip.Increase_Text_Size=Увеличаване на размера на шрифта във Firebug
 firebug.DecreaseTextSize=Намаляване
-firebug.menu.tip.Decrease_Text_Size=Decrease the text sizes used in Firebug
+firebug.menu.tip.Decrease_Text_Size=Намаляване на размера на шрифта във Firebug
 firebug.NormalTextSize=Стандартен
-firebug.menu.tip.Normal_Text_Size=Reset the text size used in Firebug to the default
+firebug.menu.tip.Normal_Text_Size=Връщане на стандартния размер на шрифта във Firebug
 firebug.Website=Сайт на Firebug…
-firebug.menu.tip.Website=Open the official Firebug website
-firebug.help=Help...
-firebug.menu.tip.help=Open the page with links to pages explaining Firebug
+firebug.menu.tip.Website=Отваряне на официалния уеб сайт на Firebug
+firebug.help=Помощ…
+firebug.menu.tip.help=Отваряне на страницата с връзките към документацията на Firebug
 firebug.Documentation=Документация…
-firebug.menu.tip.Documentation=Open the documentation about Firebug
+firebug.menu.tip.Documentation=Отваряне на документацията на Firebug
 firebug.KeyShortcuts=Клавишни комбинации…
-firebug.menu.tip.Key_Shortcuts=Open the list of mouse and keyboard shortcuts available in Firebug
-firebug.Forums=Група за дискусии…
-firebug.menu.tip.Forums=Open the discussion group site
+firebug.menu.tip.Key_Shortcuts=Отваряне на списъка с наличните комбинации от клавиши и бутони на мишката във Firebug
+firebug.Forums=Форум…
+firebug.menu.tip.Forums=Отваряне на уеб сайта с групата за дискусии
 firebug.Issues=Проследяване на грешки…
-firebug.menu.tip.Issues=Open the issue tracker site
+firebug.menu.tip.Issues=Отваряне на сайта за проследяване на грешки
 firebug.Donate=Допринасяне…
-firebug.menu.tip.Donate=Open the contribution site
+firebug.menu.tip.Donate=Отваряне на сайта за сътрудници
 firebug.About=Относно…
-firebug.menu.tip.About=Information about Firebug
-ProfileJavaScript=Profile JavaScript
-firebug.menu.tip.Profile_JavaScript=Profile JavaScript execution time
+firebug.menu.tip.About=Информация относно Firebug
+ProfileJavaScript=Отчитане на JavaScript
+firebug.menu.tip.Profile_JavaScript=Отчитане на времето за изпълнение на JavaScript
 firebug.Search=Търсене
-firebug.menu.tip.Search=Set focus to the search field
-# It's informing the user about the number of items in the storage.
-firebug.shortcut.reenterCommand.label=Въведете командата отново
-firebug.shortcut.tip.reenterCommand=Re-enter the last command into the Command Line
-firebug.shortcut.toggleInspecting.label=Превключване на инспекцията
-firebug.shortcut.tip.toggleInspecting=Enable/disable the Inspector
+firebug.menu.tip.Search=Фокусиране върху полето за търсене
+#
+firebug.shortcut.reenterCommand.label=Повтаряне на команда
+firebug.shortcut.tip.reenterCommand=Въвеждане на последната команда на командния ред
+firebug.shortcut.toggleInspecting.label=Инспекция
+firebug.shortcut.tip.toggleInspecting=Включване/изключване на инспектора
 firebug.shortcut.toggleQuickInfoBox.label=Превключване на полето за бърза информация
-firebug.shortcut.tip.toggleQuickInfoBox=Enable/disable the display of a panel with information about the currently inspected element
+firebug.shortcut.tip.toggleQuickInfoBox=Включване/изключване на полето за бърза информация за текущо инспектирания елемент
 firebug.shortcut.toggleProfiling.label=Превключване на отчетите
-firebug.shortcut.tip.toggleProfiling=Enable/disable the JavaScript Profiler
+firebug.shortcut.tip.toggleProfiling==Включване/изключване на отчитането на времето за изпълнение на JavaScript
 firebug.shortcut.focusCommandLine.label=Фокусиране на командния ред
-firebug.shortcut.tip.focusCommandLine=Open Firebug and set the focus to the Command Line / toggle the Command Line Popup
+firebug.shortcut.tip.focusCommandLine=Отваряне на Firebug и поставяне на фокуса на командния ред, включване/изключване на панела за командния ред
 firebug.shortcut.focusFirebugSearch.label=Фокусиране на търсенето на Firebug
-firebug.shortcut.tip.focusFirebugSearch=Set the focus to the search field
+firebug.shortcut.tip.focusFirebugSearch=Поставяне на фокуса на полето за търсене
 firebug.shortcut.focusWatchEditor.label=Фокусиране на редактора на следените изрази
-firebug.shortcut.tip.focusWatchEditor=Switch to the Script panel and set the focus to the field for entering a new watch expression
+firebug.shortcut.tip.focusWatchEditor=Превключване към панела за скриптове и поставяне на фокуса върху поле за въвеждане на нов следен израз
 firebug.shortcut.focusLocation.label=Фокусиране на местоположението
-firebug.shortcut.tip.focusLocation=Open the Location Menu
+firebug.shortcut.tip.focusLocation=Отваряне на менюто за местоположението
 firebug.shortcut.nextObject.label=Следващ обект
-firebug.shortcut.tip.nextObject=Select the next object in the element path of a panel
+firebug.shortcut.tip.nextObject=Избиране на следващия обект от пътя за елементи в панел
 firebug.shortcut.previousObject.label=Предишен обект
-firebug.shortcut.tip.previousObject=Select the previous object in the element path of a panel
+firebug.shortcut.tip.previousObject=Избиране на предишния обект от пътя за елементи в панел
 firebug.shortcut.customizeFBKeys.label=Промяна на клавишните комбинации
-firebug.shortcut.tip.customizeFBKeys=Open the Firebug Shortcut Bindings dialog
-firebug.shortcut.detachFirebug.label=Отваряне на Firebug в нов прозорец
-firebug.shortcut.tip.detachFirebug=Detach Firebug into its own window
+firebug.shortcut.tip.customizeFBKeys=Отваряне на прозореца за редактиране на клавишните комбинации на Firebug
+firebug.shortcut.detachFirebug.label=Отваряне на Firebug в отделен прозорец
+firebug.shortcut.tip.detachFirebug=Отваряне на Firebug в самостоятелен прозорец
 firebug.shortcut.leftFirebugTab.label=Превключване към левия панел на Firebug
-firebug.shortcut.tip.leftFirebugTab=Switch to the Firebug panel to the left
+firebug.shortcut.tip.leftFirebugTab=Превключване към левия панел на Firebug
 firebug.shortcut.rightFirebugTab.label=Превключване към десния панел на Firebug
-firebug.shortcut.tip.rightFirebugTab=Switch to the Firebug panel to the right
+firebug.shortcut.tip.rightFirebugTab=Превключване към десния панел на Firebug
 firebug.shortcut.toggleFirebug.label=Отваряне на Firebug
-firebug.shortcut.tip.toggleFirebug=Open/Minimize Firebug UI
-firebug.shortcut.closeFirebug.label=Deactivate Firebug
-firebug.shortcut.tip.closeFirebug=Deactivate Firebug for the current website
+firebug.shortcut.tip.toggleFirebug=Отваряне/минимизиране на интерфейса на Firebug
+firebug.shortcut.closeFirebug.label=Изключване на Firebug
+firebug.shortcut.tip.closeFirebug=Изключване на Firebug за текущия сайт
 firebug.shortcut.previousFirebugTab.label=Предишен подпрозорец на Firebug
-firebug.shortcut.tip.previousFirebugTab=Switch to the previously selected Firebug panel
+firebug.shortcut.tip.previousFirebugTab=Превключване към предишно избрания прозорец на Firebug
 firebug.shortcut.clearConsole.label=Изчистване на конзолата
-firebug.shortcut.tip.clearConsole=Remove all logs from the console
+firebug.shortcut.tip.clearConsole=Изчистване на всички съобщения в конзолата
 firebug.shortcut.openTraceConsole.label=Отваряне на конзолата за трасиране
-firebug.shortcut.tip.openTraceConsole=Open the FBTrace Console
+firebug.shortcut.tip.openTraceConsole=Отваряне на конзолата за трасиране на Firebug
 firebug.shortcut.navBack.label=Назад
-firebug.shortcut.tip.navBack=Switch to the previous panel or location list item of the navigation history
+firebug.shortcut.tip.navBack=Превключване към предишно избрания панел или местоположение от историята на навигацията
 firebug.shortcut.navForward.label=Напред
-firebug.shortcut.tip.navForward=Switch to the next panel or location list item of the navigation history
+firebug.shortcut.tip.navForward=Превключване към следващия панел или местоположение от историята на навигацията
 firebug.shortcut.increaseTextSize.label=Увеличаване на размера на текста
-firebug.shortcut.tip.increaseTextSize=Increase the text sizes used in Firebug
+firebug.shortcut.tip.increaseTextSize=Увеличаване на размера на шрифтовете във Firebug
 firebug.shortcut.decreaseTextSize.label=Намаляване на размера на текста
-firebug.shortcut.tip.decreaseTextSize=Decrease the text sizes used in Firebug
+firebug.shortcut.tip.decreaseTextSize=Намаляване на размера на шрифтовете във Firebug
 firebug.shortcut.normalTextSize.label=Нормален размер на текста
-firebug.shortcut.tip.normalTextSize=Reset the text sizes used in Firebug to the default
-firebug.shortcut.help.label=Open help
-firebug.shortcut.tip.help=Open the page answering the frequently asked questions
-firebug.shortcut.toggleBreakOn.label=Toggle Break On ...
-firebug.shortcut.tip.toggleBreakOn=Enable/disable stopping the script execution on specific events occurring inside a panel
+firebug.shortcut.tip.normalTextSize=Използване на стандартния размер на шрифт във Firebug
+firebug.shortcut.help.label=Отваряне на помощта
+firebug.shortcut.tip.help=Отваряне на страницата с най-често задаваните въпроси
+firebug.shortcut.toggleBreakOn.label=Превключване на прекъсванията…
+firebug.shortcut.tip.toggleBreakOn=Включване/изключване на прекъсването на изпълнението на скрипт при настъпването на определени събития в панел
 firebug.panel_selector=Избор на панел
 customizeShortcuts=Клавишни комбинации на Firebug
-# %1 = Number of storage items
+#
 a11y.labels.panel_tools=инструменти на панела
 a11y.labels.firebug_panels=панели на Firebug
 a11y.labels.firebug_side_panels=странични панели на Firebug
@@ -1036,7 +1231,7 @@ a11y.labels.firebug_status=състояние на Firebug
 a11y.labels.reset=изчистване
 a11y.labels.reset_shortcut=изчистване на клавишната комбинация за %S
 aria.labels.inactive_panel=изключен панел
-# example: 1 item in Storage
+#
 a11y.labels.log_rows=редове на журнала
 a11y.labels.call_stack=стек на извикванията
 a11y.labels.document_structure=структура на документа
@@ -1044,7 +1239,7 @@ a11y.labels.title_panel=панел %S
 a11y.labels.title_side_panel=страничен панел %S
 a11y.labels.cached=кеширани
 aria.labels.stack_trace=стек за трасиране
-# example: 2 items in Storage
+#
 a11y.layout.padding=отстъп
 a11y.layout.border=контур
 a11y.layout.margin=граница
@@ -1080,9 +1275,9 @@ a11y.labels.style_rules=стилови правила
 aria.labels.inherited_style_rules=наследени стилови правила
 a11y.labels.computed_styles=изчислени стилове
 a11y.labels.dom_properties=свойства на DOM
-# LOCALIZATION NOTE (firebug.reps.table.ObjectProperties):
-# Label used in the header of the output of the console.table() method inside the Console panel,
-# if an object is passed into it.
+#
+#
+#
 a11y.labels.inline_editor=вътрешен редактор
 a11y.labels.value_for_attribute_in_element=стойност на атрибута %S на елемента %S
 a11y.labels.attribute_for_element=атрибут на елемента %S
@@ -1094,156 +1289,161 @@ a11y.labels.value_property_in_selector=стойност на свойствот
 a11y.labels.css_selector=селектор на CSS
 a11y.labels.source_code_for_file=изходен код на файла %S
 a11y.labels.press_enter_to_add_new_watch_expression=натиснете Enter, за да добавите нов израз за следене
-# LOCALIZATION NOTE (firebug.completion.empty):
-# Label used in the command line by the auto-complete function.
-# Displayed, if there are no possible completions.
+#
+#
+#
 a11y.labels.overridden=променен при унаследяване
-# LOCALIZATION NOTE (firebug.failedToPreviewObjectURL, firebug.failedToPreviewImageURL):
-# Label used in an image preview infotip in the HTML panel when hovering over an <img> element
-# when loading of the given URL fails. The firebug.failedToPreviewObjectURL is specifically used
+#
+#
+#
 a11y.updates.has_conditional_break_point=има условно прекъсване
 a11y.updates.has_disabled_break_point=има изключено прекъсване
-# for moz-filedata (HTML5),
-# see: https://developer.mozilla.org/en/Using_files_from_web_applications#Example.3a_Using_object_URLs_to_display_images
-# LOCALIZATION NOTE (firebug.Memory_Profiler_Started):
+#
+#
+#
 a11y.updates.script_suspended_on_line_in_file=Скриптът е спрян на ред %S в %S, файл %S
-# Message logged into the Console panel when memory profiler session starts.
-# LOCALIZATION NOTE (firebug.Objects_Added_While_Profiling):
-# Title for a group (logged into the Console panel), that contains a list of new objects
-# allocated within memory profiler session.
-# LOCALIZATION NOTE (firebug.Memory_Profiler_Results):
+#
+#
+#
+#
+#
 a11y.updates.match_found_in_logrows=открито е съвпадение за „%S“ в %S реда на журналите
-# Message used within the Console panel when the memory profiler session is finished.
-# LOCALIZATION NOTE (firebug.Entire_Session):
-# Label used within memory profiler results to mark summary information for entire session.
-# first %S = String key the user is looking for, second $S = Line number the match was found on, third %S = File name the match was found in
-# examples: Match found for "window.alert" on line 322 in utilities.js
+#
+#
+#
+#
+#
 a11y.updates.match_found_for_on_line=открито е съвпадение за „%S“ на ред %S в %S
-# LOCALIZATION NOTE (a11y.updates.match_found_in_element): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing an HTML panel search (if it is found in an element node)
-# first %S = Matched search string, second %S = HTML element name containing the matched string, third %S = XPATH string specifying the matched element
-# example: Match found for "obj" in object element at /html/body/object[2]
+#
+#
+#
+#
+#
 a11y.updates.match_found_in_element=открито е съвпадение за „%S“ в елемента %S, с път %S
-# LOCALIZATION NOTE (a11y.updates.match_found_in_attribute): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing an HTML  panel search (if it is found in an attribute node)
-# first %S = Search string that was matched, second %S = Attribute name, third %S = Attribute value,
-# fourth %S = HTML element name containing, fifth %S = XPATH string specifying  the matched element
-# example: Match found for "abindex" in tabindex="0" in span element at /html/body/span[2]
+#
+#
+#
+#
+#
+#
 a11y.updates.match_found_in_attribute=открито е съвпадение за „%S“ в атрибута %S=%S на елемента %S, с път %S
-# LOCALIZATION NOTE (a11y.updates.match_found_in_text_content): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing an HTML panel search (if it is found in a text element's contents)
-# first %S = Matched search string, second %S = Element's text content,
-# third %S = HTML element name containing, fourth %S = XPATH string specifying  the matched element
-# example: Match found for "Firebug Rocks!" in h2 element at /html/body/h2[2]
+#
+#
+#
+#
+#
+#
 a11y.updates.match_found_in_text_content=открито е съвпадение за „%S“ в текста: %S на елемента %S, с път %S
-# LOCALIZATION NOTE (a11y.updates.match_found_in_selector): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing a CSS panel search (if it is found in a selector)
-# first %S = Matched search string, second %S = Selector, in which the match was found
-# example: Match found for "main" in #mainContent h2 {
+#
+#
+#
+#
+#
 a11y.updates.match_found_in_selector=открито е съвпадение за „%S“ в селектора %S
-# LOCALIZATION NOTE (a11y.updates.match_found_in_style_property): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing a CSS panel search (if it is found in a style declaration)
-# first %S = Matched search string, second %S = Style property, in which the match was found
-# third %S = Selector the style declaration applies to
-# example: Match found for background in style declaration background-repeat: "repeat-x"; in selector #mainContent {
+#
+#
+#
+#
+#
+#
 a11y.updates.match_found_in_style_declaration=открито е съвпадение за „%S“ в декларацията на стила %S, в селектора %S
-# LOCALIZATION NOTE (a11y.updates.match_found_in_dom_property): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing a DOM panel search
-# first %S = Matched search string, second %S = DOM property, in which the match was found
-# examples: Match found for "time" in DOM property _starttime
+#
+#
+#
+#
+#
 a11y.updates.match_found_in_dom_property=открито е съвпадение за „%S“ за свойството в DOM %S
-# LOCALIZATION NOTE (a11y.updates.match_found_in_net_row): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing a Net panel search
-# first %S = Matched search string, second %S = File name associated to the row, in which the match was found,
-# third %S = Column, in which the match was found, fourth %S = Column value
-# examples: Match found for "792" in GET loading_animation.gif, timeline: 792 ms
+#
+#
+#
+#
+#
+#
 a11y.updates.match_found_in_net_row=открито е съвпадение за „%S“ в %S, %S : %S;
-# LOCALIZATION NOTE (a11y.updates.match_found_in_net_summary_row): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing a Net panel search (if it is found in the Net summary row)
-# first %S = Matched search string, second %S = Column value, in which the match was found
-# examples: Match found for "05" in net summary row: 4.05s
+#
+#
+#
+#
+#
 a11y.updates.match_found_in_net_summary_row=открито е съвпадение за „%S“ в обобщения ред: %S
-# LOCALIZATION NOTE (a11y.updates.no_matches_found): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Indicates that the searched string was not matched
-# %S = Search string
-# examples: No matched found for "wefkhwefkgwekhjgjh"
+#
+#
+#
+#
+#
 a11y.updates.no_matches_found=няма съвпадения за „%S“
-# LOCALIZATION NOTE (confirmation.Reset_All_Firebug_Options):
-# Text in the confirmation dialog shown when the options should be reset
+#
+#
 confirmation.Reset_All_Firebug_Options=Наистина ли всички настройки на Firebug да се върнат към стандартните стойности?
-# LOCALIZATION NOTE (confirmation.Edit_CSS_Source):
-# If the user has changed the CSS and clicks on the Source Edit button, a confirmation dialog is
-# displayed containing the following message
+#
+#
+#
 confirmation.Edit_CSS_Source=Текущите редакции на CSS ще бъдат отхвърлени.\nСигурни ли сте, че искате да редактирате кода?
-# Console messages
+#
 warning.Console_must_be_enabled=Конзолата трябва да бъде включена
 warning.Command_line_blocked?=Блокиран ли е командният ред?
-warning.dollar_change=The console command line function $() has changed meaning from $=getElementById(id) to $=querySelector(selector). You might try $("#%S") instead.
+warning.dollar_change=Функцията на командния ред на конзолата $() е с променена семантика — от $=getElementById(идентификатор) на $=querySelector(селектор). Пробвайте с $("#%S")
 message.Reload_to_activate_window_console=Презаредете, за да включите конзолата на прозореца
-# LOCALIZATION NOTE (message.sourceNotAvailableFor, message.The_resource_from_this_URL_is_not_text):
-# An error message displayed in the Script panel when a source can't be displayed
-# for specific URL.
-# examples: Reload the page to get source for: http://www.example.com/script.js
-# examples: The resource from this URL is not text: http://www.example.com/script.js
+#
+#
+#
+#
+#
 message.sourceNotAvailableFor=Презаредете страницата за изходния код на
 message.The_resource_from_this_URL_is_not_text=Ресурсът на този адрес не е текст
-# LOCALIZATION NOTE (firebug.history.Go_back_to_this_script, firebug.history.Go_forward_to_this_script,
-# firebug.history.Stay_on_this_page): Tooltips for menu items in the history popup menu.
+#
+#
 firebug.history.Go_back_to_this_panel=Назад до този панел
 firebug.history.Stay_on_this_panel=Оставане на този панел
 firebug.history.Go_forward_to_this_panel=Напред до този панел
-# LOCALIZATION NOTE (firebug.history.Go_back_one_script, firebug.history.Go_forward_one_script):
-# Tooltips for back/forward buttons on the Script panel toolbar.
+#
+#
 firebug.history.Go_back=Назад
 firebug.history.Go_forward=Напред
-# LOCALIZATION NOTE (script.warning.inactive_during_page_load, script.suggestion.inactive_during_page_load):
-# Message displayed in the Script panel, if the debugger is inactive during page load.
-# The suggestion message represents an advice how to solve the problem. It contains a link enclosed in <a> and </a>
-# to reload the sources
+#
+#
+#
+#
 script.warning.inactive_during_page_load=Панелът за скриптове не е бил включен при зареждане на страницата
 script.suggestion.inactive_during_page_load2=<a>Презаредете</a>, за да видите целия изходен код
-# LOCALIZATION NOTE (script.warning.javascript_not_enabled, script.suggestion.javascript_not_enabled):
-# This message is displayed within the Script panel if javascript is not enabled.
-# The suggestion message represents an advice how to solve the problem.
+#
+#
+#
 script.warning.javascript_not_enabled=Javascript е изключен
 script.suggestion.javascript_not_enabled=Проверете „Firefox“ → „Инструменти/Редактиране“ → „Настройки“ → „Съдържание“ → „Включване на Javascript“
-# LOCALIZATION NOTE (script.button.enable_javascript): Title for a link, that is displayed on
-# the Script panel, if Javascript is disabled. This link allows to enable it.
+#
+#
 script.button.enable_javascript=Включете JavaScript и презаредете страницата
-# LOCALIZATION NOTE (script.warning.all_scripts_filtered, script.suggestion.all_scripts_filtered):
-# Message displayed in the Script panel, if no JavaScripts are available for the current page.
-# The suggestion message represents an advice how to solve the problem.
+#
+#
+#
 script.warning.all_scripts_filtered=Всички скриптове са били филтрирани
-script.suggestion.all_scripts_filtered=Проверете в лентата с инструменти кои скриптове се показват или настройката „Изходен код на chrome“
-# LOCALIZATION NOTE (script.warning.no_system_source_debugging, script.suggestion.no_system_source_debugging):
-# Message displayed in the Script panel, if the page opened is accessed via a chrome URL.
-# The suggestion message represents an advice how to solve the problem.
-script.warning.no_system_source_debugging=System sources can't be debugged
-script.suggestion.no_system_source_debugging=Firebug currently can't be used to debug user agent internal files. See <a>issue 5110</a> for the reason.
-# LOCALIZATION NOTE (script.warning.debugger_active, script.suggestion.debugger_active):
-# Message displayed in the Script panel, if the page doesn't include any JavaScript.
-# The suggestion message represents an advice how to solve the problem.
+script.suggestion.all_scripts_filtered=Проверете в лентата с инструменти кои скриптове се показват или настройката „Изходен код от браузъра и разширенията“
+#
+#
+#
+script.warning.no_system_source_debugging=Системният изходен код не може да бъде прекъсван за изчистване на грешки
+script.suggestion.no_system_source_debugging=Firebug не е в състояние да прекъсва работа по време на изпълнение на файловете на потребителския агент. Причината е дадена в дефект <a>№ 5110</a>
+#
+#
+#
 script.warning.no_javascript=На страницата няма Javascript
-script.suggestion.no_javascript2=If <script> tags have a "type" attribute, it should equal "text/javascript" or "application/javascript". Also scripts must be parsable (syntactically correct).
-# LOCALIZATION NOTE (script.warning.debugger_active, script.suggestion.debugger_active):
-# Message displayed in the Script panel, if the page is opened in different tabs/windows and
-# the debugger is already halted at a breakpoint inside another tab/window.
-# The suggestion message represents an advice how to solve the problem.
+script.suggestion.no_javascript2=Ако етикетите <script> имат атрибут „type“, неговата стойност трябва да е „text/javascript“ или „application/javascript“. Скриптовете трябва да бъдат с правилен синтаксис, за да минат проверката на синтаксиса
+#
+#
+#
+#
 script.warning.debugger_active=Изчистването на грешки вече е включено
 script.suggestion.debugger_active=Изчистването на грешки е спряно на точка на прекъсване на друга страница.
 script.button.Go_to_that_page=Към другата страница
 script.warning.debugger_not_activated=Изчистването на грешки е изключено
 script.suggestion.debugger_not_activated=Изчистването на грешки е изключено
-# firebug.dtd
+#
+#
+#
+#
+script.Script_panel_must_be_enabled=%S (панелът за скриптовете трябва да е включен)
+#
 firebug.Firebug=Firebug
 firebug.Close=Затваряне
 firebug.View=Изглед
@@ -1257,39 +1457,39 @@ firebug.Copy_the_script_as_a_bookmarklet=Копиране на скрипта к
 firebug.Insert_a_previously_entered_command=Въвеждане на предишна команда
 firebug.AlwaysOpenInWindow=Винаги да се отваря в нов прозорец
 firebug.OpenWith=Отваряне с редактор
-firebug.menu.tip.Open_With=Open the content in an external editor
+firebug.menu.tip.Open_With=Отваряне на съдържанието с външен редактор
 firebug.Permissions=Сайтове…
 firebug.Configure_Editors=Настройване на редакторите
-script.tip.Script_Type=Filter on script type
-script.tip.Script_Filter_Static=Just display scripts loaded together with the page
-script.tip.Script_Filter_Evals=Display scripts loaded together with the page and scripts created via eval()
-script.tip.Script_Filter_Events=Display scripts loaded together with the page, scripts created via eval() and event listeners
-script.tip.Script_Filter_All=Display all kinds of scripts
-# LOCALIZATION NOTE (firebug.labelWithShortcut):
-# Label for an item incl. assigned keyboard shortcut
-# example: Continue (F8)
-# example: Step Out (Shift+F11)
+script.tip.Script_Type=Филтриране по вид на скрипта 
+script.tip.Script_Filter_Static=Извеждане само на скриптовете, които се зареждат заедно със страницата
+script.tip.Script_Filter_Evals=Извеждане само на скриптовете, които се зареждат заедно със страницата или са създадени чрез eval()
+script.tip.Script_Filter_Events=Извеждане само на скриптовете, които се зареждат заедно със страницата, създадени са чрез eval() или са функции, следящи събитията
+script.tip.Script_Filter_All=Извеждане на всички скриптове
+#
+#
+#
+#
 firebug.labelWithShortcut=%S (%S)
-# LOCALIZATION NOTE (firebug.Rerun, script.tip.Rerun, firebug.Continue, script.tip.Continue,
-# firebug.StepOver, script.tip.Step_Over, firebug.StepInto, script.tip.Step_Into,
-# firebug.StepOut, script.tip.Step_Out, firebug.RunUntil, script.tip.Run_Until):
-# Labels used for debugger options available in the Script panel.
-script.Rerun=Rerun
-script.tip.Rerun=Rerun the current function call stack
-script.Continue=Continue
-script.tip.Continue=Continue the JavaScript execution
-script.Step_Over=Step Over
-script.tip.Step_Over=Execute the next command
-script.Step_Into=Step Into
-script.tip.Step_Into=Execute the next command and jump into functions
-script.Step_Out=Step Out
-script.tip.Step_Out=Execute the rest of the function's body and returns to its caller
-firebug.RunUntil=Изпълнение до този ред
-script.tip.Run_Until=Execute the JavaScript until the specified line
-# LOCALIZATION NOTE (firebug.Inspect, firebug.InspectElement, firebug.InspectElementWithFirebug)
-# Labels for Firebug Inspector. Used by a button (available in Firefox Customize Toolbar dialog)
-# and also page context menu. As soon as built-in inspector is having its own "Inspect Element"
-# Firebug should start using "Inspect Element with Firebug" to distinguish itself.
+#
+#
+#
+#
+script.Rerun=Отново
+script.tip.Rerun=Повторно изпълнение на текущия стек с функции
+script.Continue=Продължаване
+script.tip.Continue=Продължаване на текущо изпълнявания JavaScript
+script.Step_Over=Стъпка
+script.tip.Step_Over=Изпълняване на следващата команда
+script.Step_Into=Стъпка навътре
+script.tip.Step_Into=Изпълняване на следващата команда и влизане във извикваната функция
+script.Step_Out=Стъпка извън
+script.tip.Step_Out=Изпълняване на следващите команди до излизането от текущата функция и връщане във викащата
+firebug.RunUntil=Изпълнение до ред
+script.tip.Run_Until=Изпълнение на JavaScript до указания ред
+#
+#
+#
+#
 firebug.Inspect=Изследване
 firebug.InspectElement=Изследване на елемент
 firebug.InspectElementWithFirebug=Изследване на елемент с Firebug
@@ -1300,10 +1500,7 @@ firebug.Profile=Отчет
 firebug.Clear=Изчистване
 firebug.ClearConsole=Изчистване на конзолата
 firebug.ClearTooltip=Изчистване на конзолата
-firebug.All=Всички
-firebug.Images=Изображения
-firebug.Flash=Flash
-# editors.dtd
+#
 editors.Configured_Firebug_Editors=Настроени редактори на Firebug
 editors.Editor=Редактор
 editors.Executable=Изпълним файл
@@ -1324,183 +1521,182 @@ changeEditor.Path_to_local_file=пътят към локалния файл (и
 changeEditor.Line_number=номер на реда (ако е наличен)
 changeEditor.Invalid_Application_Path=Неправилен път до програма
 changeEditor.Application_does_not_exist=Указаната програма не съществува
-# LOCALIZATION NOTE (firebug.Edit, firebug.css.sourceEdit, firebug.css.liveEdit,
-# firebug.EditCSSTooltip, firebug.css.sourceEdit.tooltip, firebug.css.liveEdit.tooltip)
-# Used in the CSS panel for the Edit button.
+#
+#
+#
 firebug.Edit=Редактиране
 firebug.css.sourceEdit=Редактиране на изходния код
 firebug.css.sourceEdit.tooltip=Редактиране на изходния код на CSS зареден от браузъра
 firebug.css.liveEdit=Директно редактиране
 firebug.css.liveEdit.tooltip=Редактиране на изходния код на CSS извлечен от браузъра
 firebug.EditCSSTooltip=Редактиране на този CSS
-# LOCALIZATION NOTE (firebug.activation.privateBrowsingMode):
-# Message displayed in the Console panel when the private browsing mode is on.
-# (in Firefox 4+ it's 'Start Private Browsing')
+#
+#
+#
 firebug.activation.privateBrowsingMode=В режим на „Поверително сърфиране“ сайтовете не биват запомняни
-# LOCALIZATION NOTE (firebug.breakpoint.showBreakNotifications):
-# Label used within Script panel's options menu. Represents an option, that can be used
-# to switch of the break notifications.
+#
+#
+#
 firebug.breakpoint.showBreakNotifications=Известяване при прекъсване
-firebug.breakpoint.tip.Show_Break_Notifications=Show a notification box, when a Break On ... feature or the debugger; keyword stopped the JavaScript execution
-# LOCALIZATION NOTE (firebug.activation.privateBrowsingMode):
-# Message displayed in a break notification popup next to a checkbox.
-# Includes a link enclosed in <a> and </a> to open the panel's options menu.
+firebug.breakpoint.tip.Show_Break_Notifications=Известяване с изскачащ прозорец при прекъсване чрез „Прекъсване при…“ или при достигането на командата „debugger“
+#
+#
+#
 firebug.breakpoint.doNotShowBreakNotification2=Може да включвате/изключвате точките на прекъсване в <a>менюто на панела</a>.
-# LOCALIZATION NOTE (firebug.bon.cause.disableDebuggerKeyword2, firebug.bon.tooltip.disableDebuggerKeyword2):
-# Message displayed in a break notification popup when break on debugger; keyword happens.
-# The keyword can be disabled by creating a disabled breakpoint on the same line.
-# The other label is used for a tooltip on the action button.
+#
+#
+#
+#
 firebug.bon.cause.disableDebuggerKeyword2=Натискането на бутона „Изключване“ е с по-голям приоритет от „debugger“ с изключена точка на прекъсване.
 firebug.bon.tooltip.disableDebuggerKeyword2=Изключена точка на прекъсване
-# LOCALIZATION NOTE (firebug.bon.scriptPanelNeeded): A label used by 'Break On Next' button
-# This feature needs the Script panel enabled in order to work.
+#
+#
 firebug.bon.scriptPanelNeeded=(Панелът за скриптове трябва да е включен, за да ползвате тази възможност)
-# LOCALIZATION NOTE (firebug.dom.noChildren):
-# Message displayed in the DOM panel in cases, in which there are no children objects
-# and so nothing to display.
+#
+#
+#
 firebug.dom.noChildren2=Липсват елементи-наследници
-# LOCALIZATION NOTE (firebug.reps.more): Label shown when the displayed array/list has
-# more elements then displayed on the screen. "..." is automatically appended.
+#
+#
 firebug.reps.more=още
-# LOCALIZATION NOTE (firebug.reps.reference): Label shown when the displayed array/list has
-# a reference to itself (a cycle).
-firebug.reps.reference=Circular reference
-# LOCALIZATION NOTE (firebug.storage.totalItems): Semicolon list of plural forms.
-# Label used in the DOM panel for local/session/global storage.
-# It's informing the user about the number of items in the storage.
-# %1 = Number of storage items
-# example: 1 item in Storage
-# example: 2 items in Storage
+#
+#
+firebug.reps.reference=Указател към себе си
+#
+#
+#
+#
+#
+#
 firebug.storage.totalItems=%1$S съхранен обект;%1$S съхранени обекта
-# LOCALIZATION NOTE (firebug.reps.table.ObjectProperties):
-# Label used in the header of the output of the console.table() method inside the Console panel,
-# if an object is passed into it.
+#
+#
+#
+firebug.reps.historyEntries=%1$S елемент в историята;%1$S елемента в историята
+#
+#
+#
 firebug.reps.table.ObjectProperties=Свойства на обект
-# LOCALIZATION NOTE (firebug.completion.empty):
-# Label used in the command line by the auto-complete function.
-# Displayed, if there are no possible completions.
+#
+#
+#
 firebug.completion.empty=(няма подходящо дописване)
-# LOCALIZATION NOTE (firebug.failedToPreviewObjectURL, firebug.failedToPreviewImageURL):
-# Label used in an image preview infotip in the HTML panel when hovering over an <img> element
-# when loading of the given URL fails. The firebug.failedToPreviewObjectURL is specifically used
-# for moz-filedata (HTML5),
-# see: https://developer.mozilla.org/en/Using_files_from_web_applications#Example.3a_Using_object_URLs_to_display_images
+#
+#
+#
+#
+#
 firebug.failedToPreviewObjectURL=Обектът за адрес най-вероятно е отхвърлен чрез метода revokeObjectURL
 firebug.failedToPreviewImageURL=Неуспешно зареждане на този адрес
-# LOCALIZATION NOTE (firebug.Memory_Profiler_Started):
-# Message logged into the Console panel when memory profiler session starts.
+#
+#
 firebug.Memory_Profiler_Started=Отчетът за паметта е стартиран
-# LOCALIZATION NOTE (firebug.Objects_Added_While_Profiling):
-# Title for a group (logged into the Console panel), that contains a list of new objects
-# allocated within memory profiler session.
+#
+#
+#
 firebug.Objects_Added_While_Profiling=Добавени обекти по време на отчитането
-# LOCALIZATION NOTE (firebug.Memory_Profiler_Results):
-# Message used within the Console panel when the memory profiler session is finished.
+#
+#
 firebug.Memory_Profiler_Results=Резултати от отчитането на времето
-# LOCALIZATION NOTE (firebug.Entire_Session):
-# Label used within memory profiler results to mark summary information for entire session.
+#
+#
 firebug.Entire_Session=За цялата сесия
-# LOCALIZATION NOTE (console.msg.nothing_to_output):
-# Used by the console panel if a Console API is used without any argument.
-console.msg.nothing_to_output=(nothing to output)
-# LOCALIZATION NOTE (console.msg.nothing_to_output):
-# Used by the console panel if an empty string is passed into a Console API.
-console.msg.an_empty_string=(an empty string)
-# LOCALIZATION NOTE (cookies.legacy.firecookie_detected, cookies.legacy.uninstall, cookies.legacy.uninstall_and_restart):
-# A message and labels used when Firecookie is detected. This extension has been integrated with
-# Firebu and should not be installed together with Firebug 1.10+
-cookies.legacy.firecookie_detected=Firecookie add-on is detected. This add-on has been integrated with Firebug 1.10 by default. To avoid a collision you need to uninstall Firecookie. \n\nYou must restart to finish uninstalling the add-on.
-cookies.legacy.uninstall=Uninstall
-cookies.legacy.uninstall_and_restart=Uninstall && Restart
-# LOCALIZATION NOTE (firebug.cmd.help.values, console.cmd.help_title_desc):
-console.cmd.help_title=Command Line API
-console.cmd.help_title_desc=Press F1 to open online Firebug help
-# LOCALIZATION NOTE (console.cmd.help.$): Description for Command Line API that is logged
-# in the the Console panel if the user types "help" into the command line.
-console.cmd.help.$=Returns a single element with the given id.
-console.cmd.help.$$=Returns an array of elements that match the given CSS selector.
-console.cmd.help.$x=Returns an array of elements that match the given XPath expression.
-console.cmd.help.dir=Prints an interactive listing of all properties of the object. This looks identical to the view inside the DOM panel.
-console.cmd.help.dirxml=Prints the XML source tree of an HTML or XML element. This looks identical to the view inside the HTML panel. You can click on any node to inspect it in the HTML panel.
-console.cmd.help.cd=By default, command line expressions are relative to the top-level window of the page. cd() allows you to use the window of a frame in the page instead.
-console.cmd.help.clear=Clears the console.
-console.cmd.help.copy=Copies the given parameter to the clipboard. This can be a return value of a function or an object.
-console.cmd.help.inspect=Inspects an object in the most suitable panel, or the panel identified by the optional second argument. The available panel names are "html", "stylesheet", "script", and "dom".
-console.cmd.help.keys=Returns an array containing the names of all properties of the object.
-console.cmd.help.values=Returns an array containing the values of all properties of the object.
-console.cmd.help.debug=Adds a breakpoint on the first line of a function.
-console.cmd.help.undebug=Removes the breakpoint on the first line of a function.
-console.cmd.help.monitor=Turns on logging for all calls to a function.
-console.cmd.help.unmonitor=Turns off logging for all calls to a function.
-console.cmd.help.monitorEvents=Turns on logging for all events dispatched to an object. The optional second argument may define specific events or event types to log. The available event types are "composition", "contextmenu", "drag", "focus", "form", "key", "load", "mouse", "mutation", "paint", "scroll", "text", "ui", "xul", and "clipboard".
-console.cmd.help.unmonitorEvents=Turns off logging for all events dispatched to an object. The optional second argument may define specific events or event families, for which to turn logging off.
-console.cmd.help.profile=Turns on the JavaScript profiler. The optional second argument contains the text to be printed in the header of the profile report.
-console.cmd.help.profileEnd=Turns off the JavaScript profiler and prints its report.
-console.cmd.help.table=Allows to log provided data using tabular layout. The method takes one required parameter that represents table-like data (array of arrays or list of objects). The optional second parameter can be used to specify columns and/or properties to be logged.
-console.cmd.help.$0=Represents the last element selected via the Inspector.
-console.cmd.help.$1=Represents the second last element selected via the Inspector.
-console.cmd.help.$n=Returns one of the 5 last elements selected via the Inspector. This method takes one required parameter, which represents the index of the element (starting at 0).
-console.cmd.help.help=Displays help for all available commands.
-# LOCALIZATION NOTE (console.cmd.helpUrlNotAvailable): A message used displayed to the user
-# if registered command doesn't have help URL associated and the user clicks on the command name.
-# List of command names is displayed if you type "help" (without quotes) into the command line.
-console.cmd.helpUrlNotAvailable=Help page for this command is not available.
-# LOCALIZATION NOTE (css.selector.noSelection): A help description used in empty
-# Selection side panel.
-css.selector.noSelection=Type custom selector or right click CSS rule and pick <b>Get Matching Elements</b>.
-css.selector.noSelectionResults=No matching elements
-css.selector.selectorError=Selection failed:
-# LOCALIZATION NOTE (css.selector.Selection): Title for Selector side panel displayed
-# in the CSS panel.
-css.selector.Selection=Elements
-# LOCALIZATION NOTE (panel.tip.selector): Tooltip text for the Selection side panel
-# Shown when hovering the Selection panel tab
-panel.tip.selector=Displays elements matching a CSS selector
-css.selector.TryASelector=Try a selector...
-# LOCALIZATION NOTE (css.selector.cmd.getMatchingElements): A label for context menu item.
-# The menu-item is used in the CSS panel's context menu and allows to get matched elements
-# for the clicked rule selector. Elements are displayed in the side panel.
-css.selector.cmd.getMatchingElements=Get Matching Elements
-# LOCALIZATION NOTE (css.selector.unknownErrorMessage): An error message displayed
-# to the user if querySelectorAll (used by the Selector side panel) fails and there is no
-# explanantion coming from the platform.
-css.selector.unknownErrorMessage=Failed to execute specified selector string
-# LOCALIZATION NOTE (perftiming.bars.label, perftiming.events.label): A label used in a tooltip
-# for performance.timing graph.
-# The graph is displayed in the Console when the user executes "performance.timing" expression.
-perftiming.bars.label=Document phases start and elapsed time relative to the document load:
-perftiming.events.label=Event timing relative to the document load:
-# LOCALIZATION NOTE (perftiming.details_title, perftiming.details_title_desc): A label used
-# for detailed performance timing info table.
-perftiming.details_title=Perfomance Timing
-perftiming.details_title_desc=Detailed timing
-# LOCALIZATION NOTE (perftiming.connectEnd, perftiming.connectStart,
-# perftiming.domContentLoadedEventEnd, perftiming.domContentLoadedEventStart,
-# perftiming.domInteractive, perftiming.domLoading, perftiming.domainLookupEnd,
-# perftiming.domainLookupStart, perftiming.fetchStart, perftiming.loadEventEnd,
-# perftiming.loadEventStart, perftiming.avigationStart, perftiming.redirectCount,
-# perftiming.redirectEnd, perftiming.redirectStart, perftiming.requestStart,
-# perftiming.responseEnd, perftiming.responseStart, perftiming.timing, perftiming.unloadEventEnd,
-# perftiming.unloadEventStart): Description for performance timing field. Displayed when
-# the user executes 'performance.timing' in the command line.
-perftiming.connectEnd=Time when server connection is finished.
-perftiming.connectStart=Time just before server connection begins.
-perftiming.domComplete=Time just before document readiness completes.
-perftiming.domContentLoadedEventEnd=Time after DOMContentLoaded event completes.
-perftiming.domContentLoadedEventStart=Time just before DOMContentLoaded starts.
-perftiming.domInteractive=Time just before readiness set to interactive.
-perftiming.domLoading=Time just before readiness set to loading.
-perftiming.domainLookupEnd=Time after domain name lookup.
-perftiming.domainLookupStart=Time just before domain name lookup.
-perftiming.fetchStart=Time when the resource starts being fetched.
-perftiming.loadEventEnd=Time when the load event is complete.
-perftiming.loadEventStart=Time just before the load event is fired.
-perftiming.navigationStart=Time after the previous document begins unload.
-perftiming.redirectCount=Number of redirects since the last non-redirect.
-perftiming.redirectEnd=Time after last redirect response ends.
-perftiming.redirectStart=Time of fetch that initiated a redirect.
-perftiming.requestStart=Time just before a server request.
-perftiming.responseEnd=Time after the end of a response or connection.
-perftiming.responseStart=Time just before the start of a response.
-perftiming.unloadEventEnd=Time after the previous document is unloaded.
-perftiming.unloadEventStart=Time just before the unload event is fired.
+#
+#
+console.msg.nothing_to_output=(няма нищо за извеждане)
+#
+#
+console.msg.an_empty_string=(празен низ)
+#
+#
+#
+cookies.legacy.firecookie_detected=Изглежда сте инсталирали разширението Firecookie. Неговата функционалност е интегрирана във Firebug от версия 1.10 нататък. За да се избегнат проблеми ще трябва да деинсталирате Firecookie. \n\nЗа да завършите деинсталацията ще трябва да рестартирате Firefox
+cookies.legacy.uninstall=Деинсталиране
+cookies.legacy.uninstall_and_restart=Деинсталиране и рестартиране
+#
+console.cmd.help_title=API на командния ред
+console.cmd.help_title_desc=Натиснете „F1“, за да отворите помощта на Firebug
+#
+console.cmd.tip_title=Трикове за командния ред
+console.cmd.tip_title_desc=Научете триковете на командния ред
+#
+#
+#
+console.cmd.tip.javascript=На командния ред можете да изпълните всеки синтактично верен израз на JavaScript. Например:
+console.cmd.tip.closures=За да достъпите променливите от захватите, използвайте синтаксиса с „%“. Например:
+#
+#
+console.cmd.help.$=Връща единствен елемент с дадения идентификатор
+console.cmd.help.$$=Връща масив от елементи съвпадащи с дадения селектор за CSS
+console.cmd.help.$x=Връща масив от елементи съвпадащи с дадения израз на XPath
+console.cmd.help.dir=Извежда интерактивен списък с всички свойства на дадения обект. Това е аналог на списъка от панела за DOM
+console.cmd.help.dirxml=Извежда изходния код в XML на дадения елемент от XML или HTML. Това е аналог на списъка от панела за HTML. Можете да натиснете всеки от елементите, за да ги покажете в панела за HTML
+console.cmd.help.cd=Стандартно изразите на командния ред се изчисляват спрямо основния прозорец на страницата. С „cd()“ можете да изберете прозореца на някоя от рамките на страницата
+console.cmd.help.clear=Изчиства конзолата
+console.cmd.help.copy=Копира дадения параметър в буфера за обмен. Параметърът може да е стойност върната от функция или обект
+console.cmd.help.inspect=Отваря обекта в най-подходящия панел или в панела указан от втория параметър, ако такъв присъства. Вторият параметър може да е някой от низовете "html", "stylesheet", "script" или "dom"
+console.cmd.help.keys=Връща масив, съдържащ имената на всички свойства на обект
+console.cmd.help.values=Връща масив, съдържащ всички стойностите на всички свойства на обект
+console.cmd.help.debug=Добавя прекъсване на първия ред на функция
+console.cmd.help.undebug=Премахва прекъсването на първия ред на функция
+console.cmd.help.monitor=Включва проследяването на всички извиквания на функция
+console.cmd.help.unmonitor=Изключва проследяването на всички извиквания на функция
+console.cmd.help.monitorEvents=Включва проследяването на всички или определени събития изпратени към обект. Вторият параметър е незадължителен и указва събития или видове събития, които да се проследяват. Възможните видове събития са: "composition", "contextmenu", "drag", "focus", "form", "key", "load","mouse", "mutation", "paint", "scroll", "text", "ui", "xul", и "clipboard"
+console.cmd.help.unmonitorEvents=Изключва проследяването на всички или определени събития изпратени към обект. Вторият параметър е незадължителен и указва събития или видове събития, които да спрат да се проследяват.
+console.cmd.help.profile=Включва отчитането на времето за изпълнение на JavaScript. Вторият параметър е незадължителен и съдържа текст, който се отпечатва като заглавие на отчета
+console.cmd.help.profileEnd=Изключва отчитането на времето за изпълнение на JavaScript и извежда отчета
+console.cmd.help.table=Извеждане на съобщения в табличен вид. Методът приема като параметър данни, които приличат на таблица — масив от масиви или списък от обекти. Вторият параметър е незадължителен и указва колоните и/или стойностите, които да бъдат извеждани
+console.cmd.help.$0=Представлява последно избрания елемент с инспектора
+console.cmd.help.$1=Представлява предпоследно избрания елемент с инспектора
+console.cmd.help.$2=Представлява пред-предпоследно избрания елемент с инспектора
+console.cmd.help.$3=Представлява последно избрания четвърти елемент с инспектора
+console.cmd.help.$4=Представлява последно избрания пети елемент с инспектора
+console.cmd.help.$n=Представлява един от последните 5 избрани с инспектора елементи. Задължителният втори параметър указва индекса отзад напред, започвайки от 0
+console.cmd.help.$_=Представлява резултата на последно изчисления израз на командния ред
+console.cmd.help.help=Извежда помощта за всички налични команди
+console.cmd.help.include=Вмъква скрипт, приема като параметър адрес — URL
+console.cmd.help.$p=След натискането на обект/стойност с втория бутон на мишката и избиране на „Използване чрез командния ред“, тази променлива приема стойността, която е била натисната
+console.cmd.help.getEventListeners=Връща обект с всички функции регистрирани върху обекта, които следят за настъпването на събития
+#
+#
+#
+console.cmd.helpUrlNotAvailable=Липсва помощ за тази команда
+#
+#
+#
+perftiming.bars.label=Фази на документа — начало и продължителност спрямо момента на зареждането:
+perftiming.events.label=Време на настъпване на събитията спрямо момента на зареждането на документа:
+#
+#
+perftiming.details_title=Времена
+perftiming.details_title_desc=Подробна информация за времената
+#
+#
+#
+#
+#
+#
+#
+#
+#
+perftiming.connectEnd=Край на връзката със сървъра
+perftiming.connectStart=Начало на връзката със
+perftiming.domComplete=Завършване на изграждането на документа
+perftiming.domContentLoadedEventEnd=Край на събитието DOMContentLoaded
+perftiming.domContentLoadedEventStart=Начало на събитието DOMContentLoaded
+perftiming.domInteractive=Начало на интерактивността
+perftiming.domLoading=Начало на зареждането
+perftiming.domainLookupEnd=Край на търсенето на домейна
+perftiming.domainLookupStart=Начало на търсенето на домейна
+perftiming.fetchStart=Начало на изтеглянето на ресурс
+perftiming.loadEventEnd=Завършване на събитието за зареждане
+perftiming.loadEventStart=Начало на събитието за зареждане
+perftiming.navigationStart=Преди началото на затварянето на предишния документ
+perftiming.redirectCount=Брой пренасочвания след последния пряк отговор
+perftiming.redirectEnd=След доставяне на ресурс предизвикал пренасочване
+perftiming.redirectStart=Преди доставяне на ресурс предизвикал пренасочване
+perftiming.requestStart=Преди заявка към сървъра
+perftiming.responseEnd=След отговора от сървъра
+perftiming.responseStart=Преди отговора от сървъра
+perftiming.unloadEventEnd=Край на затварянето на предишния документ
+perftiming.unloadEventStart=Начало на събитието за затваряне на документ
diff --git a/locale/bg/selectors.properties b/locale/bg/selectors.properties
new file mode 100644
index 0000000..8750552
--- /dev/null
+++ b/locale/bg/selectors.properties
@@ -0,0 +1,10 @@
+Panel-selectors=Селектори
+panel.tip.selectors=Показва елементите съответстващи на селектор за CSS
+css.selector.noSelection=Въведете селектор или изберете правило за CSS и изберете с десния бутон на мишката „<b>Съвпадащи елементи</b>“.
+css.selector.noSelectionResults=Никой елемент не съответства
+css.selector.readMore=Можете да научите как да <a>използвате панела</a>
+css.selector.invalidSelector=Неправилен селектор
+css.selector.TryASelector=Въведете селектор…
+css.selector.cmd.getMatchingElements=Съвпадащи елементи
+aria.labels.Selectors=Страничен панел за селектори
+a11y.labels.press_enter_to_add_new_selector=Натиснете клавиша „Enter“, за да въведете нов селектор
diff --git a/locale/de/cookies.properties b/locale/de/cookies.properties
index d708306..b36aaaa 100644
--- a/locale/de/cookies.properties
+++ b/locale/de/cookies.properties
@@ -142,6 +142,7 @@ cookies.host.session=Akzeptiere Sitzungs-Cookies von %S
 cookies.host.accept=Akzeptiere Cookies von %S
 cookies.host.reject=Cookies von %S zurückweisen
 cookies.host.limitThirdParty=Cookies von dritten für %S zurückweisen
+
 # LOCALIZATION NOTE (cookies.edit.invalidname, cookies.edit.invalidhost,
 # cookies.edit.invalidpath): Various error messages used when a new cookie is created
 # using a cookie dialog. Use Cookies->Create Cookie menu to show the dialog.
@@ -158,7 +159,7 @@ cookies.header.value=Wert
 cookies.header.rawValue=Originalwert
 cookies.header.domain=Domain
 cookies.header.size=Größe
-cookies.header.rawSize= Originalgröße
+cookies.header.rawSize=Originalgröße
 cookies.header.path=Pfad
 cookies.header.expires=Verfallsdatum
 cookies.header.security=Sicherheit
diff --git a/locale/de/firebug-amo.properties b/locale/de/firebug-amo.properties
index 2c8decf..7d3d3cd 100644
--- a/locale/de/firebug-amo.properties
+++ b/locale/de/firebug-amo.properties
@@ -2,6 +2,6 @@
 # These texts are used on Mozilla Add-on site: https://addons.mozilla.org/en-US/firefox/addon/1843
 # They are not direct part of Firebug extension and so, you can't see them in Firebug's UI.
 # Note that firebug.amo.summary must not exceed 250 characters (limitation by AMO site)
-firebug.amo.summary1.6=Firebug integriert sich in Firefox, um Ihnen eine ganze Reihe nützlicher Entwicklungswerkzeugen während des Surfens an die Hand zu geben. Sie können CSS, HTML und JavaScript live in jeder Webseite bearbeiten, debuggen und überwachen...\\\n\\\nFirebug 1.6 benötigt Firefox 3.6 oder höher.
-firebug.amo.description=Firebug integriert sich in Firefox, um Ihnen eine ganze Reihe nützlicher Entwicklungswerkzeugen während des Surfens an die Hand zu geben. Sie können CSS, HTML und JavaScript live in jeder Webseite bearbeiten, debuggen und überwachen.\\\n\\\nBesuchen Sie die Firebug-Website, um die Dokumentation, Bildschirmfotos und Diskussionsforen einzusehen: http://getfirebug.com (Englisch)
+firebug.amo.summary1.6=Firebug integriert sich in Firefox, um Ihnen eine ganze Reihe nützlicher Entwicklungswerkzeugen während des Surfens an die Hand zu geben. Sie können CSS, HTML und JavaScript live in jeder Webseite bearbeiten, debuggen und überwachen...\n\nFirebug 1.6 benötigt Firefox 3.6 oder höher.
+firebug.amo.description=Firebug integriert sich in Firefox, um Ihnen eine ganze Reihe nützlicher Entwicklungswerkzeugen während des Surfens an die Hand zu geben. Sie können CSS, HTML und JavaScript live in jeder Webseite bearbeiten, debuggen und überwachen.\n\nBesuchen Sie die Firebug-Website, um die Dokumentation, Bildschirmfotos und Diskussionsforen einzusehen: http://getfirebug.com (Englisch)
 firebug.amo.developer.comments=Falls Sie irgendwelche Probleme haben, lesen Sie bitte die Firebug-FAQ.\\\n\\\nhttp://getfirebug.com/faq.html (Englisch)
diff --git a/locale/de/firebug.properties b/locale/de/firebug.properties
index 894bde6..b5cc18e 100644
--- a/locale/de/firebug.properties
+++ b/locale/de/firebug.properties
@@ -183,7 +183,7 @@ html.option.tip.Scroll_To_Mutations=Baumansicht scrollen, um geänderte Knoten a
 # LOCALIZATION NOTE (html.option.Scroll_To_Mutations, html.option.tip.Scroll_To_Mutations):
 # Inspector option (located in HTML tab's option menu and Firebug menu). If set to true,
 # a panel will be shown including information about the currently inspected element
-ShowQuickInfoBox=Schnellinfo Box anzeigen
+ShowQuickInfoBox=Schnellinfo-Box anzeigen
 inspect.option.tip.Show_Quick_Info_Box=Informationen über das aktuell untersuchte Element in einer die Webseite überlagernden Infobox anzeigen
 # LOCALIZATION NOTE (html.option.Scroll_To_Mutations, html.option.tip.Scroll_To_Mutations):
 # Inspector option (located in HTML tab's option menu and Firebug menu). If set to true, the tree view
@@ -208,7 +208,7 @@ computedStyle=Berechneter Style
 # button that are used when the HTML panel is currently selected. The button allows stopping
 # JS execution when DOM of the current page is modified.
 html.Break_On_Mutate=Bei Modifizierung anhalten
-html.Disable_Break_On_Mutate=\\"Bei Modifizierung anhalten\\" deaktivieren
+html.Disable_Break_On_Mutate="Bei Modifizierung anhalten" deaktivieren
 html.label.Break_On_Text_Change=Bei Textänderung anhalten
 html.label.HTML_Breakpoints=HTML-Haltepunkte
 html.label.Break_On_Attribute_Change=Bei Attributänderung anhalten
@@ -262,19 +262,19 @@ dom.label.DOM_Breakpoints=DOM-Haltepunkte
 # editing an existing HTML element attribute.
 # %S = Name of the clicked attribute
 # examples: Edit Attribute "onclick"...
-EditAttribute=Attribut \\"%S\\" bearbeiten...
+EditAttribute=Attribut "%S" bearbeiten...
 html.tip.Edit_Attribute=Den Wert des Attributs "%S" dieses Elements bearbeiten
 # LOCALIZATION NOTE (DeleteAttribute, html.tip.Delete_Attribute): Menu item label used in HTML panel context menu. Allows
 # deleting an existing HTML element attribute.
 # %S = Name of the clicked attribute
 # examples: Delete Attribute "onclick"...
-DeleteAttribute=Attribut \\"%S\\" löschen
+DeleteAttribute=Attribut "%S" löschen
 html.tip.Delete_Attribute=Das Attribut "%S" dieses Elements löschen
 # LOCALIZATION NOTE (InheritedFrom): Displaying an HTML element name + an applied CSS rule,
 # that has been inherited. Used in the Style side panel (under HTML panel).
 # examples: Inherited from table.tabView
 InheritedFrom=Geerbt von
-SothinkWarning=Die \\"Sothink SWF Catcher\\"-Erweiterung hindert Firebug an der ordnungsgemäßen Ausführung.<br/><br/>Bitte lesen Sie <a href=\\"http://www.getfirebug.com/faq.html#Sothink\\" target=\\"_new\\">diesen Artikel in der Firebug-FAQ (Englisch)</a> für weitere Hilfe.
+SothinkWarning=Die "Sothink SWF Catcher"-Erweiterung hindert Firebug an der ordnungsgemäßen Ausführung.<br/><br/>Bitte lesen Sie <a href="http://www.getfirebug.com/faq.html#Sothink" target="_new">diesen Artikel in der Firebug-FAQ (Englisch)</a> für weitere Hilfe.
 # LOCALIZATION NOTE (css.fontFamilyPreview): Part of a tooltip in the CSS panel
 # and Style side panel (within HTML panel) when the mouse hovers a font name
 css.fontFamilyPreview=Zwölf Boxkämpfer jagen Viktor quer über den großen Sylter Deich. 0123456789
@@ -309,19 +309,19 @@ css.tip.New_Prop=Eine neue Eigenschaft zu der aktuellen Regel hinzufügen
 # Allows to edit an existing CSS rule property.
 # %S = Name of the clicked property
 # examples: Edit "background-color"...
-EditProp=\\"%S\\" bearbeiten...
+EditProp="%S" bearbeiten...
 css.tip.Edit_Prop=Den Wert der Eigenschaft "%S" bearbeiten
 # LOCALIZATION NOTE (DisableProp): Menu item label used in the CSS panel context menu.
 # Allows to disable an existing CSS rule property.
 # %S = Name of the clicked property
 # examples: Disable "background-color"
-DisableProp=\\"%S\\" deaktivieren
+DisableProp="%S" deaktivieren
 css.tip.Disable_Prop=Die Eigenschaft "%S" deaktivieren
 # LOCALIZATION NOTE (DeleteProp, css.tip.Delete_Prop): Menu item label used in the CSS panel context menu.
 # Allows to delete an existing CSS rule property.
 # %S = Name of the clicked property
 # examples: Delete "background-color"
-DeleteProp=\\"%S\\" löschen
+DeleteProp="%S" löschen
 css.tip.Delete_Prop=Die Eigenschaft "%S" löschen
 # Console context menu labels.
 BreakOnThisError=Bei diesem Fehler anhalten
@@ -638,7 +638,7 @@ jsonviewer.do_not_sort=Nicht sortieren
 # in the Net & Console panel when copying JSON replies.
 # %S = Part of the JSON, that was clicked
 # example: Copy "person" as JSON
-net.jsonviewer.Copy_JSON=\\\"%S\\\" als JSON kopieren
+net.jsonviewer.Copy_JSON=\"%S\" als JSON kopieren
 # LOCALIZATION NOTE (RequestHeaders, ResponseHeaders, CachedResponseHeaders, PostRequestHeaders):
 # Label (noun) used in the Net panel (displayed inside the Headers tab of a request).
 RequestHeaders=Anfrage-Header
@@ -672,7 +672,7 @@ net.tip.Open_Response_In_New_Tab=Die Antwort in einem neuen Browsertab öffnen
 # LOCALIZATION NOTE (Profile): Caption (verb) for reported profile info.
 # (result of JavaScript profiler tool).
 Profile=Zeitmessung
-ProfilerStarted=Die Zeitmessung läuft. Klicken Sie erneut auf \\"Zeitmessung\\" um den Report zu sehen.
+ProfilerStarted=Die Zeitmessung läuft. Klicken Sie erneut auf "Zeitmessung" um den Report zu sehen.
 ProfilerRequiresTheScriptPanel=Das Skript Panel muss aktiviert sein, damit das Profiling funktioniert.
 # LOCALIZATION NOTE (plural.Profile_Time2): Semicolon list of plural forms.
 # Caption for reported profile info (result of JavaScript profiler tool).
@@ -732,7 +732,7 @@ html.menu.Paste_AsFirstChild=Als erstes Kind
 html.tip.Paste_AsFirstChild=Als erstes Kind dieses Knoten einfügen
 html.menu.Paste_AsLastChild=Als letztes Kind
 html.tip.Paste_AsLastChild=Als letztes Kind dieses Knotens einfügen
-html.menu.Paste_Before=bevor 
+html.menu.Paste_Before=Davor
 html.tip.Paste_Before=Vor diesem Knoten einfügen
 html.menu.Paste_After=Nach
 html.tip.Paste_After=Nach diesem Knoten einfügen
@@ -769,7 +769,7 @@ dom.tip.Copy_Source=Den Funktionsquelltext in die Zwischenablage kopieren
 # %S = Name of the function
 # example: Log Calls to "getData"
 # example: Log calls to the function "getData" inside the Console panel
-ShowCallsInConsole=Aufrufe in \\"%S\\" protokollieren
+ShowCallsInConsole=Aufrufe in "%S" protokollieren
 dom.tip.Log_Calls_To_Function=Aufrufe der Funktion "%" im Konsole Panel mitprotokollieren
 # LOCALIZATION NOTE (ShowEventsInConsole, html.tip.Show_Events_In_Console):
 # Menu item label used in HTML elements context menu. Allows logging of event information
@@ -788,7 +788,7 @@ panel.tooltip.Show_Command_Line_Popup=Kommandozeilenpopup anzeigen
 # if a specific method is not supported.
 # %S = Name of the unsupported method
 # example: Firebug console does not support 'bind'
-console.MethodNotSupported=Die Firebug-Konsole unterstützt \\'%S\\' nicht.
+console.MethodNotSupported=Die Firebug-Konsole unterstützt '%S' nicht.
 # LOCALIZATION NOTE (commandline.errorSourceHeader): Message displayed in the header of the
 # source code where an exception has occured.
 commandline.errorSourceHeader=IN DER FIREBUG KOMMANDOZEILE AUSGEFÜHRTER AUSDRUCK:
@@ -798,14 +798,14 @@ commandline.MethodDisabled=Diese Kommandozeilenmethode ist temporär deaktiviert
 # LOCALIZATION NOTE (commandline.MethodNotSupported): Message displayed in the Console panel,
 # if an unsupported method is entered via the Command Line.
 # %S = Name of the unsupported method
-commandline.MethodNotSupported=Die Firebug-Kommandozeile unterstützt \\'%S\\' nicht.
+commandline.MethodNotSupported=Die Firebug-Kommandozeile unterstützt '%S' nicht.
 # LOCALIZATION NOTE (commandline.CurrentWindow): Message displayed in the Console panel when
 # cd(someWindow) is run. A space and a representation of the window object is appended
 # internally by Firebug.
 commandline.CurrentWindow=Aktuelles Fenster:
 # LOCALIZATION NOTE (console.Disable_Break_On_All_Errors, console.Break_On_All_Errors):
 # Tooltip for the "Break on... " button used when the Console panel is selected.
-console.Disable_Break_On_All_Errors=\\"Bei allen Fehlern anhalten\\" deaktivieren
+console.Disable_Break_On_All_Errors="Bei allen Fehlern anhalten" deaktivieren
 console.Break_On_All_Errors=Bei allen Fehlern anhalten
 # LOCALIZATION NOTE (console.Break_On_This_Error): Tooltip for the breakpoint besides an error message
 # in the Console panel
@@ -815,7 +815,7 @@ console.Break_On_This_Error=Bei diesem Fehler anhalten
 console.Use_Arrow_keys,_Tab_or_Enter=Pfeiltasten, Tab oder Enter benutzen
 # LOCALIZATION NOTE (console.JSDisabledInFirefoxPrefs): Hint shown inside the Console panel in the case
 # JavaScript is not available
-console.JSDisabledInFirefoxPrefs=JavaScript ist in Ihren Firefox-Einstellungen deaktiviert. Falls Sie das Konsolenmodul benutzen möchten, aktivieren Sie JavaScript unter: \\"Extras\\" -> \\"Einstellungen...\\" -> \\"Inhalt\\" -> \\"JavaScript aktivieren\\".
+console.JSDisabledInFirefoxPrefs=JavaScript ist in Ihren Firefox-Einstellungen deaktiviert. Falls Sie das Konsolenmodul benutzen möchten, aktivieren Sie JavaScript unter: "Extras" -> "Einstellungen..." -> "Inhalt" -> "JavaScript aktivieren".
 # LOCALIZATION NOTE (console.tip.ScriptPanelMustBeEnabledForTraces): Message shown inside the Console
 # panel instead of a stack trace when it is missing because the script panel is disabled. The text
 # enclosed in <a></a> is a link which enables the Script panel.
@@ -831,7 +831,7 @@ tooltip.multipleFiltersHint=Strg+Klicken benutzen, um mehrere Filter auszuwähle
 # %S = Maximal number of elements to highlight
 # example: There are too many elements in the array to highlight on the page (current limit is 100).
 #          See 'extensions.firebug.multiHighlightLimit' preference.
-console.multiHighlightLimitExceeded=Es gibt zu viele Elemente in diesem Array, um sie auf der Seite zu hervorzuheben (aktuelles Limit ist %S).\\\\nBitte die Einstellung \\'extensions.firebug.multiHighlightLimit\\' beachten.
+console.multiHighlightLimitExceeded=Es gibt zu viele Elemente in diesem Array, um sie auf der Seite zu hervorzuheben (aktuelles Limit ist %S).nBitte die Einstellung 'extensions.firebug.multiHighlightLimit' beachten.
 # LOCALIZATION NOTE (commandline.disabledForXMLDocs): This message is displayed in the Console panel
 # in cases when the current page is an XML document. The text between <a> and </a> is a link,
 # that causes to switch to HTML rendering of the document.
@@ -1037,7 +1037,7 @@ moduleManager.desc3=Benutzen Sie das Menü des Firebug-Statusleistensymbols um a
 moduleManager.Enable=Aktivieren
 Suspend_Firebug=Firebug unterbrechen
 Resume_Firebug=Firebug fortsetzen
-Reset_Panels_To_Disabled=Module auf \\"Deaktiviert\\" zurücksetzen
+Reset_Panels_To_Disabled=Module auf "Deaktiviert" zurücksetzen
 Open_Console=Konsole öffnen
 Open_Console_Tooltip=Firebug-Ablaufverfolgungskonsole öffnen
 Scope_Chain=Ablauf im Scope
@@ -1060,8 +1060,8 @@ requestinfo.Connecting=Verbinden
 requestinfo.Sending=Senden
 requestinfo.Waiting=Warten
 requestinfo.Receiving=Empfangen
-requestinfo.ContentLoad=\\"DOMContentLoaded\\" (Ereignis)
-requestinfo.WindowLoad=\\"load\\" (Ereignis)
+requestinfo.ContentLoad="DOMContentLoaded" (Ereignis)
+requestinfo.WindowLoad="load" (Ereignis)
 # LOCALIZATION NOTE (requestinfo.started.label, requestinfo.phases.label, requestinfo.timings.label):
 # Labels used within a tooltip (aka time-info-tip) for waterfall graph in the Net panel.
 requestinfo.started.label=Anfrage Startzeit seit Beginn
@@ -1172,7 +1172,7 @@ firebug.shortcut.reenterCommand.label=Befehl erneut ausführen
 firebug.shortcut.tip.reenterCommand=Den letzten Befehl erneut in die Kommandozeile schreiben
 firebug.shortcut.toggleInspecting.label=Untersuchung an/aus
 firebug.shortcut.tip.toggleInspecting=Den Inspector aktivieren/deaktivieren
-firebug.shortcut.toggleQuickInfoBox.label=Schnellinfo Box an/aus
+firebug.shortcut.toggleQuickInfoBox.label=Schnellinfo-Box an/aus
 firebug.shortcut.tip.toggleQuickInfoBox=Die Box mit Informationen über das aktuell untersuchte Element aktivieren/deaktivieren
 firebug.shortcut.toggleProfiling.label=Zeitmessung an/aus
 firebug.shortcut.tip.toggleProfiling=Den JavaScript Profiler aktivieren/deaktivieren
@@ -1283,7 +1283,7 @@ a11y.labels.value_for_attribute_in_element=Wert für %S Attribut in %S Element
 a11y.labels.attribute_for_element=Attribut für %S Element
 a11y.labels.text_contents_for_element=Textinhalte für %S Element
 a11y.labels.defined_in_file=definiert in %S
-a11y.labels.declarations_for_selector=Style-Defintionen für \\"%S\\" Selektor
+a11y.labels.declarations_for_selector=Style-Defintionen für "%S" Selektor
 a11y.labels.property_for_selector=CSS Eigenschaften für Selektor: %S
 a11y.labels.value_property_in_selector=%S Eigenschaftswert für Selektor %S
 a11y.labels.css_selector=CSS-Selektor
@@ -1307,78 +1307,78 @@ a11y.updates.script_suspended_on_line_in_file=Skript unterbrochen in Zeile %S in
 # Describes the match found when performing a console panel search
 # first %S = String key the user is looking for, second %S = Number of rows that contain the matched text
 # examples: Match found for "test" in 17 log rows
-a11y.updates.match_found_in_logrows=Treffer gefunden für \\"%S\\" in %S Protokollzeilen
+a11y.updates.match_found_in_logrows=Treffer gefunden für "%S" in %S Protokollzeilen
 # LOCALIZATION NOTE (a11y.updates.match_found_for_on_line): Used by a11y. Not directly
 # visible in the UI, intended for screen readers.
 # Describes the match found when performing a script panel search
 # first %S = String key the user is looking for, second $S = Line number the match was found on, third %S = File name the match was found in
 # examples: Match found for "window.alert" on line 322 in utilities.js
-a11y.updates.match_found_for_on_line=Treffer gefunden für \\"%S\\" in Zeile %S in %S
+a11y.updates.match_found_for_on_line=Treffer gefunden für "%S" in Zeile %S in %S
 # LOCALIZATION NOTE (a11y.updates.match_found_in_element): Used by a11y. Not directly
 # visible in the UI, intended for screen readers.
 # Describes the match found when performing an HTML panel search (if it is found in an element node)
 # first %S = Matched search string, second %S = HTML element name containing the matched string, third %S = XPATH string specifying the matched element
 # example: Match found for "obj" in object element at /html/body/object[2]
-a11y.updates.match_found_in_element=Treffer gefunden für \\"%S\\" in %S Element in Pfad %S
+a11y.updates.match_found_in_element=Treffer gefunden für "%S" in %S Element in Pfad %S
 # LOCALIZATION NOTE (a11y.updates.match_found_in_attribute): Used by a11y. Not directly
 # visible in the UI, intended for screen readers.
 # Describes the match found when performing an HTML  panel search (if it is found in an attribute node)
 # first %S = Search string that was matched, second %S = Attribute name, third %S = Attribute value,
 # fourth %S = HTML element name containing, fifth %S = XPATH string specifying  the matched element
 # example: Match found for "abindex" in tabindex="0" in span element at /html/body/span[2]
-a11y.updates.match_found_in_attribute=Treffer gefunden für \\"%S\\" in Attribut %S=%S von %S Element in Pfad %S
+a11y.updates.match_found_in_attribute=Treffer gefunden für "%S" in Attribut %S=%S von %S Element in Pfad %S
 # LOCALIZATION NOTE (a11y.updates.match_found_in_text_content): Used by a11y. Not directly
 # visible in the UI, intended for screen readers.
 # Describes the match found when performing an HTML panel search (if it is found in a text element's contents)
 # first %S = Matched search string, second %S = Element's text content,
 # third %S = HTML element name containing, fourth %S = XPATH string specifying  the matched element
 # example: Match found for "Firebug Rocks!" in h2 element at /html/body/h2[2]
-a11y.updates.match_found_in_text_content=Treffer gefunden für \\"%S\\" im Textinhalt: %S von %S Element in Pfad %S
+a11y.updates.match_found_in_text_content=Treffer gefunden für "%S" im Textinhalt: %S von %S Element in Pfad %S
 # LOCALIZATION NOTE (a11y.updates.match_found_in_selector): Used by a11y. Not directly
 # visible in the UI, intended for screen readers.
 # Describes the match found when performing a CSS panel search (if it is found in a selector)
 # first %S = Matched search string, second %S = Selector, in which the match was found
 # example: Match found for "main" in #mainContent h2 {
-a11y.updates.match_found_in_selector=Treffer gefunden für \\"%S\\" in Selektor %S
+a11y.updates.match_found_in_selector=Treffer gefunden für "%S" in Selektor %S
 # LOCALIZATION NOTE (a11y.updates.match_found_in_style_property): Used by a11y. Not directly
 # visible in the UI, intended for screen readers.
 # Describes the match found when performing a CSS panel search (if it is found in a style declaration)
 # first %S = Matched search string, second %S = Style property, in which the match was found
 # third %S = Selector the style declaration applies to
 # example: Match found for background in style declaration background-repeat: "repeat-x"; in selector #mainContent {
-a11y.updates.match_found_in_style_declaration=Treffer gefunden für \\"%S\\" in Style-Definition %S in Selektor %S
+a11y.updates.match_found_in_style_declaration=Treffer gefunden für "%S" in Style-Definition %S in Selektor %S
 # LOCALIZATION NOTE (a11y.updates.match_found_in_dom_property): Used by a11y. Not directly
 # visible in the UI, intended for screen readers.
 # Describes the match found when performing a DOM panel search
 # first %S = Matched search string, second %S = DOM property, in which the match was found
 # examples: Match found for "time" in DOM property _starttime
-a11y.updates.match_found_in_dom_property=Treffer gefunden für \\"%S\\" in DOM-Eigenschaft %S
+a11y.updates.match_found_in_dom_property=Treffer gefunden für "%S" in DOM-Eigenschaft %S
 # LOCALIZATION NOTE (a11y.updates.match_found_in_net_row): Used by a11y. Not directly
 # visible in the UI, intended for screen readers.
 # Describes the match found when performing a Net panel search
 # first %S = Matched search string, second %S = File name associated to the row, in which the match was found,
 # third %S = Column, in which the match was found, fourth %S = Column value
 # examples: Match found for "792" in GET loading_animation.gif, timeline: 792 ms
-a11y.updates.match_found_in_net_row=Treffer gefunden für \\"%S\\" in %S, %S : %S;
+a11y.updates.match_found_in_net_row=Treffer gefunden für "%S" in %S, %S : %S;
 # LOCALIZATION NOTE (a11y.updates.match_found_in_net_summary_row): Used by a11y. Not directly
 # visible in the UI, intended for screen readers.
 # Describes the match found when performing a Net panel search (if it is found in the Net summary row)
 # first %S = Matched search string, second %S = Column value, in which the match was found
 # examples: Match found for "05" in net summary row: 4.05s
-a11y.updates.match_found_in_net_summary_row=Treffer gefunden für \\"%S\\" in Netzwerk-Zusammenfassung, Zeile: %S
+a11y.updates.match_found_in_net_summary_row=Treffer gefunden für "%S" in Netzwerk-Zusammenfassung, Zeile: %S
 # LOCALIZATION NOTE (a11y.updates.no_matches_found): Used by a11y. Not directly
 # visible in the UI, intended for screen readers.
 # Indicates that the searched string was not matched
 # %S = Search string
 # examples: No matched found for "wefkhwefkgwekhjgjh"
-a11y.updates.no_matches_found=Keine Treffer gefunden für \\"%S\\"
+a11y.updates.no_matches_found=Keine Treffer gefunden für "%S"
 # LOCALIZATION NOTE (confirmation.Reset_All_Firebug_Options):
 # Text in the confirmation dialog shown when the options should be reset
 confirmation.Reset_All_Firebug_Options=Sind Sie sicher, dass Sie alle Firebug-Einstellungen auf die Standardwerte zurücksetzen wollen?
 # LOCALIZATION NOTE (confirmation.Edit_CSS_Source):
 # If the user has changed the CSS and clicks on the Source Edit button, a confirmation dialog is
 # displayed containing the following message
-confirmation.Edit_CSS_Source=Ihre existierenden CSS Änderungen werden verworfen.\\\\nSind Sie sicher, dass Sie den Quelltext bearbeiten wollen?
+confirmation.Edit_CSS_Source=Ihre existierenden CSS Änderungen werden verworfen.\nSind Sie sicher, dass Sie den Quelltext bearbeiten wollen?
 # Console messages
 warning.Console_must_be_enabled=Konsole muss aktiviert sein
 warning.Command_line_blocked?=Kommandozeile blockiert?
@@ -1418,7 +1418,7 @@ script.button.enable_javascript=JavaScript aktivieren und neuladen
 # Message displayed in the Script panel, if no JavaScripts are available for the current page.
 # The suggestion message represents an advice how to solve the problem.
 script.warning.all_scripts_filtered=Alle Skripts wurden gefiltert
-script.suggestion.all_scripts_filtered=Siehe die Einstellung für den Skriptfilter in der Symbolleiste oder die Option \\"Chrome Quellen anzeigen\\"
+script.suggestion.all_scripts_filtered=Siehe die Einstellung für den Skriptfilter in der Symbolleiste oder die Option "Chrome Quellen anzeigen"
 # LOCALIZATION NOTE (script.warning.no_system_source_debugging, script.suggestion.no_system_source_debugging):
 # Message displayed in the Script panel, if the page opened is accessed via a chrome URL.
 # The suggestion message represents an advice how to solve the problem.
@@ -1516,9 +1516,9 @@ changeEditor.Name=Name:
 changeEditor.Executable=Anwendungsdatei:
 changeEditor.CmdLine=Parameter:
 changeEditor.Supplied_arguments=Von Firebug vorgegebene Parameter:
-changeEditor.URL_of_file=<label class=\\'text-link\\'>%url</label> URL der Datei (falls %url nicht angegeben wurde, wird standardmäßig %file hinzufügt)
-changeEditor.Path_to_local_file=<label class=\\'text-link\\'>%file</label> Pfad zur lokalen Datei (oder zur temporären Kopie)
-changeEditor.Line_number=<label class=\\'text-link\\'>%line</label> Zeilennummer (falls verfügbar)
+changeEditor.URL_of_file=<label class='text-link'>%url</label> URL der Datei (falls %url nicht angegeben wurde, wird standardmäßig %file hinzufügt)
+changeEditor.Path_to_local_file=<label class='text-link'>%file</label> Pfad zur lokalen Datei (oder zur temporären Kopie)
+changeEditor.Line_number=<label class='text-link'>%line</label> Zeilennummer (falls verfügbar)
 changeEditor.Invalid_Application_Path=Ungültiger Anwendungspfad
 changeEditor.Application_does_not_exist=Die angegebene Anwendung existiert nicht!
 # LOCALIZATION NOTE (firebug.Edit, firebug.css.sourceEdit, firebug.css.liveEdit,
@@ -1547,7 +1547,7 @@ firebug.breakpoint.doNotShowBreakNotification2=Stopp-Nachrichten können im <a>P
 # Message displayed in a break notification popup when break on debugger; keyword happens.
 # The keyword can be disabled by creating a disabled breakpoint on the same line.
 # The other label is used for a tooltip on the action button.
-firebug.bon.cause.disableDebuggerKeyword2=Der \\"Deaktivieren\\"-Button überschreibt \\"debugger\\" mit einem deaktiviertem Breakpoint.
+firebug.bon.cause.disableDebuggerKeyword2=Der "Deaktivieren"-Button überschreibt "debugger" mit einem deaktiviertem Breakpoint.
 firebug.bon.tooltip.disableDebuggerKeyword2=Erstellt einen deaktivierten Breakpoint
 # LOCALIZATION NOTE (firebug.bon.scriptPanelNeeded): A label used by 'Break On Next' button
 # This feature needs the Script panel enabled in order to work.
diff --git a/locale/de/selectors.properties b/locale/de/selectors.properties
index d3feed1..6a5fba1 100644
--- a/locale/de/selectors.properties
+++ b/locale/de/selectors.properties
@@ -23,4 +23,4 @@ css.selector.TryASelector=Selektor eingeben...
 # for the clicked rule selector. Elements are displayed in the side panel.
 css.selector.cmd.getMatchingElements=Passende Elemente finden
 aria.labels.Selectors=Selektoren Seitenpanel
-a11y.labels.press_enter_to_add_new_selector=Enter drücken, um einen neuen Selektor hinzuzufügen
+a11y.labels.press_enter_to_add_new_selector=Enter drücken, um einen neuen Selektor hinzuzufügen
\ No newline at end of file
diff --git a/locale/en-US/cookies.properties b/locale/en-US/cookies.properties
index d8cce96..0bab5fd 100644
--- a/locale/en-US/cookies.properties
+++ b/locale/en-US/cookies.properties
@@ -273,5 +273,6 @@ cookies.console.Filter_By_Cookies=Filter By Cookies
 # LOCALIZATION NOTE (firebug.shortcut.removeAllCookies.label) Label used by the
 # Customize Shortcuts dialog (Firebug menu)
 firebug.shortcut.removeAllCookies.label=Remove All Cookies
+firebug.shortcut.tip.removeAllCookies=Remove all listed cookies
 cookie.sizeinfo.Size=Size
 cookie.sizeinfo.Raw_Size=Raw Size
diff --git a/locale/en-US/firebug.properties b/locale/en-US/firebug.properties
index 0fe7562..bd9dc49 100644
--- a/locale/en-US/firebug.properties
+++ b/locale/en-US/firebug.properties
@@ -40,15 +40,21 @@ firebug.AttachFirebug=Attach Firebug to Browser Window
 pluralRule=1
 # LOCALIZATION NOTE (plural.Total_Firebugs2): Semicolon list of plural forms.
 # See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
-# Used in a tooltip that is displayed for the Firebug icon located within Firefox toolbar.
+# Used in a tooltip that is displayed for the Firebug icon located within Firefox UI.
 # Displays the number of pages with Firebug activated.
 # %1 = number of Firebug instances activated
 # example: 2 Total Firebugs
 plural.Total_Firebugs2=%1$S Total Firebug;%1$S Total Firebugs
 # LOCALIZATION NOTE (startbutton.tip.deactivated):
-# Used in a tooltip that is displayed for the Firebug icon located within Firefox toolbar.
+# Used in a tooltip that is displayed for the Firebug icon located within Firefox UI.
 # Displays the deactivated status of Firebug
 startbutton.tip.deactivated=Deactivated
+# LOCALIZATION NOTE (startbutton.tip.errors):
+# Used in a tooltip that is displayed for the Firebug icon located within Firefox UI.
+# Displays the number of errors, which occurred on the current website
+# %1 = number of errors
+# example: 2 errors occurred on this page
+plural.startbutton.tip.errors=%1$S error occurred on this page;%1$S errors occurred on this page
 # LOCALIZATION NOTE (panel.status): Label showing the status of an activable panel
 # inside a tooltip when hovering the Start Button. Will be shown for each panel.
 # first %S = panel name
@@ -61,14 +67,9 @@ enablement.for_all_pages=for all pages
 enablement.on=On
 enablement.off=Off
 enablement.Panel_activation_status=Panel activation status:
-
-# LOCALIZATION NOTE (enablement.active_in_background): Label used within Start button tooltip.
-enablement.active_in_background=Firebug is active in a background tab
-
 none=Closed
 Firebug_-_inactive_for_current_website=Firebug - inactive for current website
 Activate_Firebug_for_the_current_website=Activate Firebug for the current website
-Minimized=Minimized
 Minimize_Firebug=Minimize Firebug
 On_for_all_web_pages=On for All Web Pages
 firebug.menu.tip.On_for_all_Web_Sites=Activate Firebug by default for all websites
@@ -144,17 +145,13 @@ SystemItem=<System>
 panel.Inspect_In_Panel=Inspect in %S Panel
 panel.tip.Inspect_In_Panel=Switch to the %S panel to examine the object there
 NoName=(no name)
-# LOCALIZATION NOTE (jsdIScript): an internal Firefox object used for debugging Firebug
-# do not translate.
-# %S = jsdIScript.tag
-jsdIScript=jsdIScript %S
 # LOCALIZATION NOTE (html.option.Show_Full_Text, html.option.tip.Show_Full_Text):
 # HTML panel option (located in tab's option menu). If set to true, contents
 # of an element will not be cropped
 ShowFullText=Show Full Text
 html.option.tip.Show_Full_Text=Don't crop element contents
 # LOCALIZATION NOTE (html.option.Show_Whitespace, html.option.tip.Show_Whitespace):
-# HTML panel option (located in tab's option menu). If set to true, whitepace inside of
+# HTML panel option (located in tab's option menu). If set to true, whitespace inside of
 # nodes will be shown
 ShowWhitespace=Show Whitespace
 html.option.tip.Show_Whitespace=Show Whitespace inside of nodes
@@ -283,6 +280,10 @@ InheritedFrom=Inherited from
 SothinkWarning=The Sothink SWF Catcher extension is preventing Firebug from working properly.<br/><br/>Please read <a href="http://www.getfirebug.com/faq.html#Sothink" target="_new">this item on the Firebug FAQ</a> for help.
 # LOCALIZATION NOTE (css.fontFamilyPreview): Part of a tooltip in the CSS panel
 # and Style side panel (within HTML panel) when the mouse hovers a font name
+# The translation should be a pangram sentence (http://en.wikipedia.org/wiki/Pangram),
+# so DO NOT directly translate the sentence. If you can't find a pangram in your language,
+# just write down the characters of your alphabet or leave the sentence untranslated.
+# The sentence should be followed by the numbers 0 to 9.
 css.fontFamilyPreview=The quick brown fox jumps over the lazy dog. 0123456789
 # LOCALIZATION NOTE (css.EmptyStyleSheet): Displayed in the CSS panel
 # in case there are no stylesheets attached to the current page.
@@ -339,8 +340,6 @@ console.menu.tip.Break_On_All_Errors=Stop the JavaScript execution as soon as an
 # throw/catch blocks is enabled.
 TrackThrowCatch=Track Throw/Catch
 script.option.tip.Track_Throw_Catch=Track exceptions even when they are caught by try/catch blocks
-UseLastLineForEvalName=Use Last Source Line for eval() names
-UseMD5ForEvalName=Use MD5 for eval() names
 # Breakpoints side panel
 Breakpoints=Breakpoints
 ErrorBreakpoints=Error Breakpoints
@@ -460,11 +459,15 @@ style.option.tip.Only_Show_Applied_Styles=Just show styles applied to the elemen
 # also display styles defined by the user agent.
 Show_User_Agent_CSS=Show User Agent CSS
 style.option.tip.Show_User_Agent_CSS=Also show the CSS defined by the user agent
-# LOCALIZATION NOTE (computed.option.label.Colors_As_Hex, computed.option.tip.Colors_As_Hex,
+# LOCALIZATION NOTE (computed.option.label.Colors_As_Authored,
+#   computed.option.tip.Colors_As_Authored,
+#   computed.option.label.Colors_As_Hex, computed.option.tip.Colors_As_Hex,
 #   computed.option.label.Colors_As_RGB, computed.option.tip.Colors_As_RGB,
 #   computed.option.label.Colors_As_HSL, computed.option.tip.Colors_As_HSL):
 # CSS panel, Style side panel and Computed side panel option (located in tab's option menu).
 # Allows switching the display of CSS colors between hex, rgb(a) and hsl(a) format
+computed.option.label.Colors_As_Authored=Colors As Authored
+computed.option.tip.Colors_As_Authored=Show colors as they were defined
 computed.option.label.Colors_As_Hex=Colors As Hex
 computed.option.tip.Colors_As_Hex=Show colors in hexadecimal format
 computed.option.label.Colors_As_RGB=Colors As RGB
@@ -523,14 +526,13 @@ location.inline=Inline
 # Label used within the Location Menu for the group of scripts,
 # which don't have a domain specified like e.g. eval()'ed scripts
 location.no_domain=No Domain
-# LOCALIZATION NOTE (LayoutPadding, LayoutBorder, LayoutMargin, LayoutPosition, LayoutAdjacent):
+# LOCALIZATION NOTE (LayoutPadding, LayoutBorder, LayoutMargin, LayoutPosition):
 # Labels used to describe layout properties a the selected HTML element.
 # Used in the Layout side panel (within HTML panel).
 LayoutPadding=padding
 LayoutBorder=border
 LayoutMargin=margin
 LayoutPosition=position
-LayoutAdjacent=adjacent
 position=position
 # LOCALIZATION NOTE (layout.option.Show_Rulers, layout.option.tip.Show_Rulers):
 # Layout side panel option (located in tab's option menu). If set to true,
@@ -607,6 +609,9 @@ net.filter.tooltip.Media=Show only audios and videos
 net.filter.label.Fonts=Fonts
 net.filter.tooltip.Fonts=Show only fonts 
 
+Name=Name
+Description=Description
+
 # LOCALIZATION NOTE (Post, Put): Label (verb) used in the Net panel for detailed info about
 # a network request (displayed when a Net panel entry is expanded). The content of
 # this tab displays sent data (related to an HTTP send method).
@@ -622,6 +627,7 @@ HTML=HTML
 jsonviewer.tab.JSON=JSON
 xmlviewer.tab.XML=XML
 svgviewer.tab.SVG=SVG
+fontviewer.tab.Font=Font
 fontviewer.General_Info=General Info
 fontviewer.Meta_Data=Meta Data
 fontviewer.view_source=view source
@@ -789,8 +795,14 @@ dom.tip.Log_Calls_To_Function=Log calls to the function "%S" inside the Console
 # to the console.
 ShowEventsInConsole=Log Events
 html.tip.Show_Events_In_Console=Log event information to the console
+
+# LOCALIZATION NOTE (html.logAllEvents, html.logAllEvents.tip): Menu item label/tooltip
+# used in HTML Panel context menu. Allows checking all event families at once.
+html.logAllEvents=Log All Events
+html.logAllEvents.tip=Monitor all available events
+
 # LOCALIZATION NOTE (panel.Enabled, panel.tip.Enabled):
-# Option inside the options menu of activatable panels. Enables/Disables the panel.
+# Option inside the options menu of activable panels. Enables/Disables the panel.
 panel.Enabled=Enabled
 panel.tip.Enabled=Toggle the panel activation
 # LOCALIZATION NOTE (panel.tooltip.Show_Command_Line_Popup): Tooltip used for a button on main
@@ -805,7 +817,7 @@ panel.tooltip.Show_Command_Line_Popup=Show Command Line Popup
 console.MethodNotSupported=Firebug console does not support '%S'
 
 # LOCALIZATION NOTE (commandline.errorSourceHeader): Message displayed in the header of the
-# source code where an exception has occured.
+# source code where an exception has occurred.
 commandline.errorSourceHeader=EXPRESSION EVALUATED USING THE FIREBUG COMMAND LINE:
 
 # LOCALIZATION NOTE (commandline.MethodDisabled): Message displayed in the Console panel,
@@ -830,9 +842,6 @@ console.Break_On_This_Error=Break On This Error
 # LOCALIZATION NOTE (console.Use_Arrow_keys,_Tab_or_Enter): Hint at the top of the Completion List Popup
 # in the Command Line
 console.Use_Arrow_keys,_Tab_or_Enter=Use Arrow keys, Tab or Enter
-# LOCALIZATION NOTE (console.JSDisabledInFirefoxPrefs): Hint shown inside the Console panel in the case
-# JavaScript is not available
-console.JSDisabledInFirefoxPrefs=JavaScript is disabled in your Firefox preferences. If you want to use the Console panel, then please enable this option via Tools > Options > Content > Enable JavaScript
 
 # LOCALIZATION NOTE (console.ScriptPanelMustBeEnabledForTraces): Message shown inside the Console
 # panel instead of a stack trace when it is missing because the script panel is disabled. The text
@@ -867,6 +876,14 @@ commandline.disabledForXMLDocs=Firebug command line is disabled for XML pages. Y
 commandline.Use_in_Command_Line=Use in Command Line
 commandline.tip.Use_in_Command_Line=Focus the Command Line, and make this value available as "$p"
 
+# LOCALIZATION NOTE (commandline.include.Alias):
+# For the include() function. Alias list column title for the alias name.
+commandline.include.Alias=Alias
+
+# LOCALIZATION NOTE (commandline.include.URL):
+# For the include() function. Alias list column title for the URL the alias is referencing.
+commandline.include.URL=URL
+
 # LOCALIZATION NOTE (commandline.include.includeSuccess): For the include() function. This message is displayed
 # in the Console panel when a remote script evaluation succeeded
 # %S = the filename
@@ -917,7 +934,7 @@ commandline.include.tooLongAliasName=Alias names must not contain more than 30 c
 commandline.include.invalidAliasArgumentType=Invalid second argument; expected alias name.
 
 # LOCALIZATION NOTE (commandline.include.wrongUrlArgument): For the include() function. This message is displayed
-# in the Console panel if the type of the url arguement is invalid (a string or null are expected)
+# in the Console panel if the type of the url argument is invalid (a string or null are expected)
 commandline.include.invalidUrlArgumentType=Invalid url argument.
 
 # LOCALIZATION NOTE (commandline.include.confirmDelete): For the include() function. This message is displayed
@@ -971,11 +988,12 @@ net.responseSizeLimitMessage=Firebug response size limit has been reached. Click
 # LOCALIZATION NOTE (net.postDataSizeLimitMessage): A warning message displayed within the Net
 # panel (inside the Post tab of an expanded request entry). The message informs the user that
 # posted data reached Firebug's size limit and only part of it is displayed in the UI.
-net.postDataSizeLimitMessage=Firebug request size limit has been reached by Firebug.
+net.postDataSizeLimitMessage=POST data request size limit has been reached by Firebug.
 net.Break_On_XHR=Break On XHR
 net.label.Parameters=Parameters
 net.label.Parts=Parts
 net.label.Source=Source
+net.label.Patch=Patch
 # LOCALIZATION NOTE (net.label.Resend): Label for context menu item. Used when clicking
 # on a HTTP request (in the Console or Net panel) to re-send it with the same arguments.
 net.label.Resend=Resend
@@ -1076,16 +1094,9 @@ css.tip.Copy_Property_Name=Copy the property's name to the clipboard
 css.label.Copy_Property_Value=Copy Property Value
 css.tip.Copy_Property_Value=Copy the property's value to the clipboard
 
-# LOCALIZATION NOTE (plural.Error_Count2): Semicolon list of plural forms.
-# A label used in for Firebug Start Button. Displays the number of JavaScript errors found by Firebug.
-# %1 = Number of errors
-# example: 111 Errors
-plural.Error_Count2=%1$S Error;%1$S Errors
 moduleManager.title=%S Panel is disabled
 moduleManager.desc3=Use Firebug's toolbar button to enable/disable all panels at once. Use each panel's tab menu for individual control.
 moduleManager.Enable=Enable
-Suspend_Firebug=Suspend Firebug
-Resume_Firebug=Resume Firebug
 Reset_Panels_To_Disabled=Reset Panels To Disabled
 Open_Console=Open Console
 Open_Console_Tooltip=Open Trace Console for Firebug.
@@ -1132,11 +1143,13 @@ search.Multiple_Files=Multiple Files
 search.tip.Multiple_Files=Search inside all files related to this panel
 search.Use_Regular_Expression=Use Regular Expression
 search.tip.Use_Regular_Expression=Interpret the entered string as a regular expression when searching
+search.Placeholder=Search within %S panel
 # LOCALIZATION NOTE (search.html.CSS_Selector, search.net.Headers, search.net.Parameters, search.net.Response_Bodies,
 # search.script.Multiple_Files):
 # Labels used within an options menu for the search box. This menu is displayed if the search box is focused.
 # These labels are specific to a certain panel.
 search.html.CSS_Selector=CSS Selector
+search.html.Search_by_text_or_CSS_selector=Search by text or CSS selector
 search.net.Headers=Headers
 search.net.Parameters=Parameters
 search.net.Response_Bodies=Response Bodies
@@ -1274,8 +1287,10 @@ firebug.shortcut.toggleBreakOn.label=Toggle Break On ...
 firebug.shortcut.tip.toggleBreakOn=Enable/disable stopping the script execution on specific events occurring inside a panel
 firebug.panel_selector=Panel Selector
 customizeShortcuts=Firebug Shortcut Bindings
+a11y.labels.file_selector=file selector
 # A11y Chrome Labels (not visible, spoken by screen readers)
 a11y.labels.panel_tools=panel tools
+a11y.labels.firebug_tools=Firebug tools
 a11y.labels.firebug_panels=Firebug panels
 a11y.labels.firebug_side_panels=Firebug side panels
 a11y.labels.firebug_window=Firebug window
@@ -1495,6 +1510,12 @@ script.suggestion.debugger_not_activated=Debugger not activated
 # %S = original message
 # example: "Profile JavaScript execution time (Script panel must be enabled)"
 script.Script_panel_must_be_enabled=%S (Script panel must be enabled)
+
+# LOCALIZATION NOTE (script.SourceLimited): Displayed at the top of the Script panel when
+# the Script source has been limited due to cache max size preference:
+# extensions.firebug.cache.responseLimit
+script.SourceLimited=Firebug's cache limit has been exceeded. Parts of the script are not shown.
+
 # firebug.dtd
 firebug.Firebug=Firebug
 firebug.Close=Close
@@ -1569,9 +1590,9 @@ changeEditor.Name=Name:
 changeEditor.Executable=Executable:
 changeEditor.CmdLine=Arguments:
 changeEditor.Supplied_arguments=Arguments supplied by Firebug:
-changeEditor.URL_of_file=URL of the file (if %url is not present, %file will be added by default)
-changeEditor.Path_to_local_file=Path to the local file (or to the temporary copy)
-changeEditor.Line_number=Line number (if available)
+changeEditor.URL_of_file2=URL of the file (if %url is not present, %file will be added by default)
+changeEditor.Path_to_local_file2=Path to the local file (or to the temporary copy)
+changeEditor.Line_number2=Line number (if available)
 changeEditor.Invalid_Application_Path=Invalid Application Path
 changeEditor.Application_does_not_exist=The specified application doesn't exist!
 # LOCALIZATION NOTE (firebug.Edit, firebug.css.sourceEdit, firebug.css.liveEdit,
@@ -1626,10 +1647,11 @@ firebug.storage.totalItems=%1$S item in Storage;%1$S items in Storage
 # Displayed when evaluating "history" - informs the user about the number of entries in history.
 # %1 = Number of history entries
 firebug.reps.historyEntries=%1$S history entry;%1$S history entries
-# LOCALIZATION NOTE (firebug.reps.table.ObjectProperties):
+# LOCALIZATION NOTE (firebug.reps.table.ObjectProperties, firebug.reps.table.ObjectValues):
 # Label used in the header of the output of the console.table() method inside the Console panel,
 # if an object is passed into it.
 firebug.reps.table.ObjectProperties=Object Properties
+firebug.reps.table.ObjectValues=Values
 # LOCALIZATION NOTE (firebug.completion.empty):
 # Label used in the command line by the auto-complete function.
 # Displayed, if there are no possible completions.
@@ -1759,10 +1781,16 @@ perftiming.responseStart=Time just before the start of a response.
 perftiming.unloadEventEnd=Time after the previous document is unloaded.
 perftiming.unloadEventStart=Time just before the unload event is fired.
 
+# LOCALIZATION NOTE (eventListeners.group_title, mutationObservers.group_title): Labels used
+# by getEventListeners() command line command that displays list of registered event listeners
+# and list of mutation observers for given target (usually an element).
+# See also: https://getfirebug.com/wiki/index.php/GetEventListeners
+eventListeners.group_title=Event Listeners
+mutationObservers.group_title=Mutation Observers
+
 # LOCALIZATION NOTE (knownissues.message.slowJSD, knownissues.message.slowJSD.GotIt):
 # A message displayed when the Script panel is disabled. It warns users about known platform
 # problems related to JSD. The message is also displayed in the Console panel + a button that
 # allows to hide it.
-knownissues.message.slowJSD=<B>Warning:</B> Enabling the Script panel causes a Firefox slow-down due to a <a>platform bug</a>. This will be fixed with the next major Firefox and Firebug versions.
+knownissues.message.slowJSD=<B>Warning:</B> Enabling the Script panel slows down tab switching and Firebug activation due to a <a>platform problem</a>. This will be fixed with the next major Firebug version.
 knownissues.message.slowJSD.GotIt=Got It
-
diff --git a/locale/en-US/keys.properties b/locale/en-US/keys.properties
new file mode 100644
index 0000000..249f8d8
--- /dev/null
+++ b/locale/en-US/keys.properties
@@ -0,0 +1,12 @@
+VK_SPACE=Space
+VK_NUM_LOCK=Num Lock
+VK_NUMPAD0=Numpad 0
+VK_NUMPAD1=Numpad 1
+VK_NUMPAD2=Numpad 2
+VK_NUMPAD3=Numpad 3
+VK_NUMPAD4=Numpad 4
+VK_NUMPAD5=Numpad 5
+VK_NUMPAD6=Numpad 6
+VK_NUMPAD7=Numpad 7
+VK_NUMPAD8=Numpad 8
+VK_NUMPAD9=Numpad 9
diff --git a/locale/en-US/selectors.properties b/locale/en-US/selectors.properties
index 088021a..9fef008 100644
--- a/locale/en-US/selectors.properties
+++ b/locale/en-US/selectors.properties
@@ -4,6 +4,9 @@ Panel-selectors=Selectors
 # LOCALIZATION NOTE (panel.tip.selector): Tooltip text for the Selection side panel
 # Shown when hovering the Selection panel tab
 panel.tip.selectors=Displays elements matching a CSS selector
+# LOCALIZATION NOTE (css.selector.tip.Selector): Tooltip text displayed when hovering
+# the selector input field.
+css.selector.tip.Selector=Selector
 # LOCALIZATION NOTE (css.selector.noSelection): A help description used in empty
 # Selectors side panel.
 css.selector.noSelection=Type a custom selector or right click a CSS rule and pick <b>Get Matching Elements</b>.
@@ -23,4 +26,4 @@ css.selector.TryASelector=Try a selector...
 # for the clicked rule selector. Elements are displayed in the side panel.
 css.selector.cmd.getMatchingElements=Get Matching Elements
 aria.labels.Selectors=Selectors side panel
-a11y.labels.press_enter_to_add_new_selector=Press Enter to add a new selector
\ No newline at end of file
+a11y.labels.press_enter_to_add_new_selector=Press Enter to add a new selector
diff --git a/locale/fr/cookies.properties b/locale/fr/cookies.properties
index 0b79bf4..7f3f1ae 100644
--- a/locale/fr/cookies.properties
+++ b/locale/fr/cookies.properties
@@ -1,272 +1,138 @@
-# LOCALIZATION NOTE (cookies.Panel): Title of the panel in Firebug's UI.
 cookies.Panel=Cookies
-panel.tip.cookies=Inspecter et manipuler les cookies
-# LOCALIZATION NOTE (cookies.Session): Label used to mark session cookies.
+panel.tip.cookies=Permet d'inspecter et manipuler les cookies
 cookies.Session=Session
-# LOCALIZATION NOTE (cookies.AllowGlobally, cookies.tip.AllowGlobally):
-# Label used for cookies permission.
-cookies.AllowGlobally=Accepter les cookies des autres sites
-cookies.tip.AllowGlobally=Accepter tous les cookies par défaut ou bloquer tous les cookies par défaut
-# LOCALIZATION NOTE (cookies.showCookieEvents, cookies.tip.showCookieEvents):
-# Label used in Cookies panel options menu (the small arrow next to the Cookies panel label).
-# If checked, various cookies events are displayed in Firebug's Console panel.
-cookies.showCookieEvents=Afficher les événements liés aux cookies
-cookies.tip.showCookieEvents=Journaliser les événements des cookies (modifié, supprimé) dans la console
-# LOCALIZATION NOTE (cookies.clearWhenDeny): Label used in Cookies panel options menu (the
-# small arrow next to the Cookies panel label). If checked, cookies are automatically removed
-# if the permission is changed to deny.
-# xxxHonza: currently not displayed in the UI
+cookies.AllowGlobally=Accepter les cookies des sites
+cookies.tip.AllowGlobally=Accepte tous les cookies par défaut ou les bloque par défaut
+cookies.showCookieEvents=Afficher les évènements liés aux cookies
+cookies.tip.showCookieEvents=Inscrire les évènements liés aux cookies (modifiés, supprimés) dans la console
 cookies.clearWhenDeny=Effacer les cookies lors d'un refus
-# LOCALIZATION NOTE (cookies.Cut, cookies.Copy, cookies.CopyAll, cookies.Paste,
-# cookies.Delete): Support for clipboard actions. Used in a cookie context menu
-# (right click on a cookie in the Cookies panel).
 cookies.Cut=Couper
 cookies.Copy=Copier
 cookies.CopyAll=Tout copier
 cookies.Paste=Coller
 cookies.Delete=Supprimer
-# LOCALIZATION NOTE (cookies.Clear Value): Label for an item in the cookie context menu.
-# Clears cookie value, but not removes the cookie itself.
 cookies.Clear_Value=Effacer la valeur
-# LOCALIZATION NOTE (cookies.Edit): Label for an item in the cookie context menu. Displays
-# a dialog for editing clicked cookie.
-cookies.Edit=Modifier
+cookies.Edit=Éditer
 cookies.Accept=Accepter
-# LOCALIZATION NOTE (cookies.header.Reset_Header): Used in cookie header context menu (right
-# click on a header in the Cookies panel). This action restores default state of the header
-# (visibility and size of all columns)
-cookies.header.Reset_Header=Réinitialiser l'en-tête
-# LOCALIZATION NOTE (cookies.Intro, cookies.ExceptionsTitle): Used for managing Cookie panel
-# enablement. Used only if Firebug 1.2 and 1.3 is installed
-cookies.Intro=Vous pouvez préciser quels sites Web sont toujours ou jamais autorisés à utiliser les cookies.\nTapez l'adresse exacte du site que vous souhaitez gérer, puis cliquez sur Bloquer,\nAutoriser la session, ou Autoriser.
+cookies.header.Reset_Header=Réinitialiser l'entête
+cookies.Intro=Vous pouvez préciser quels sites Web sont toujours ou jamais autorisés à utiliser les cookies.\nIndiquez l'adresse exacte du site que vous souhaitez gérer, puis cliquez sur « Bloquer »,\n« Autoriser la session », ou « Autoriser ».
 cookies.ExceptionsTitle=Exceptions - Cookies
-# LOCALIZATION NOTE (cookies.modulemanager.description, cookies.HostEnable, cookies.HostDisable,
-# cookies.Permissions, cookies.PermissionsIntro): Various labels used for mangaing Cookies panel
-# enablement. Used only if Firebug 1.2 and 1.3 is installed.
-# examples: Enable Cookies panel for www.softwareishard.com
-cookies.modulemanager.description=Support pour le contrôle des cookies
+cookies.modulemanager.description=Prise en charge du contrôle des cookies
 cookies.HostEnable=Activer le panneau des cookies pour %S
 cookies.HostDisable=Désactiver le panneau des cookies pour %S
 cookies.Permissions=Activer ou désactiver le panneau des cookies
 cookies.PermissionsIntro=Choisir les sites Web dans lesquels le panneau des cookies sera activé ou désactivé.
-# LOCALIZATION NOTE (cookies.SystemPages, cookies.LocalFiles): Labels used in the Cookies
-# panel if it's disabled (only for Firebug 1.2 and 1.3).
 cookies.SystemPages=Pages système
 cookies.LocalFiles=Fichiers locaux
-# LOCALIZATION NOTE (cookies.confirm.removeall): Used in a confirmation dialog when all cookies
-# of a website are going to be deleted (or permission is set do deny and cookies should be deleted).
-cookies.confirm.removeall=Souhaitez-vous retirer tous les cookies de la liste ?
-# LOCALIZATION NOTE (cookies.confirm.removeallsession): Used in a confirmation dialog when
-# all session cookies are going to be deleted
-cookies.confirm.removeallsession=Voulez vous supprimer tous les cookies de session listés ?
-# LOCALIZATION NOTE (cookies.confirm.Remove_All_From_Host): Used in a confirmation dialog when cookies
-# from a specific host are going to be deleted (or permission is set do deny and cookies should be deleted).
-cookies.confirm.Remove_All_From_Host=Do you want to remove all cookies from %S?
-# LOCALIZATION NOTE (cookies.msg.Do_not_show_this_message_again): 
-# Message within a confirmation dialog that is displayed when deleting cookies.
-# This message is displayed next to a check-box that can be used to disabled this
-# confirmation.
-cookies.msg.Do_not_show_this_message_again=Ne plus afficher ce message
-# LOCALIZATION NOTE (cookies.Confirm_cookie_removal): A label used for option (mini tab menu)
-# that says whether a confirmation dialog is displayed when removing cookies. 
+cookies.confirm.removeall=Souhaitez-vous vraiment retirer tous les cookies listés ?
+cookies.confirm.removeallsession=Souhaitez-vous vraiment supprimer tous les cookies de session listés ?
+cookies.confirm.Remove_All_From_Host=Souhaitez-vous retirer tous les cookies de %S ?
 cookies.Confirm_cookie_removal=Confirmation de la suppression de cookie
-cookies.tip.Confirm_cookie_removal=Si coché, une confirmation est affichée avant la suppression de tous les cookie.
-# LOCALIZATION NOTE (cookies.removeall.tooltip): A tooltip for Cookies->Remove Cookies menu
-cookies.removeall.tooltip=Retirer tous les cookies de la liste.
-# LOCALIZATION NOTE (cookies.Remove_Session_Cookies): A label used for
-# Cookies->Remove Session Cookies menu
+cookies.tip.Confirm_cookie_removal=Si coché, une confirmation est affichée avant la suppression de tous les cookies.
+cookies.removeall.tooltip=Retire tous les cookies listés.
 cookies.Remove_Session_Cookies=Suppression des cookies de session
-# LOCALIZATION NOTE (cookies.removeall.tooltip): A tooltip for Cookies->Remove Session Cookies menu
-cookies.removeallsession.tooltip=Supprimer tous les cookie de session listés
-# LOCALIZATION NOTE (cookies.createcookie.tooltip): A tooltip for Cookies->Create Cookie menu
-# examples: Create new cookie for www.softwareishard.com
-cookies.createcookie.tooltip=Créer un nouveau cookie pour %S
-# LOCALIZATION NOTE (cookies.createcookie.defaultvalue): Default value for newly created cookie.
-cookies.createcookie.defaultvalue=Value
-# LOCALIZATION NOTE (cookies.perm.manage.tooltip): A tooltip for permissions button that
-# is located on a Cookis panel toolbar.
-# examples: Manage cookie permissions for www.softwareishard.com
-cookies.perm.manage.tooltip=Gérer les permissions des cookies pour %S
-# LOCALIZATION NOTE (cookies.console.cookiescleared): A label for a cookie event that is
-# displayed in Firebug's Console panel when all cookie in Firefox are removed
-# To remove all cookies use menu on Cookis panel toolbar: Tools->Show All Cookies and click
-# Remove All Cookies in the dialog.
+cookies.removeallsession.tooltip=Supprime tous les cookies de session listés.
+cookies.createcookie.tooltip=Crée un nouveau cookie pour %S
+cookies.createcookie.defaultvalue=Valeur
+cookies.perm.manage.tooltip=Gère les permissions des cookies pour %S
 cookies.console.cookiescleared=Tous les cookies ont été retirés.
-# LOCALIZATION NOTE (cookies.console.cookiescleared): A label for a cookie event that is
-# displayed in Firebug's Console panel when all cookie in Firefox are removed
-# To remove all cookies use menu on Cookis panel toolbar: Tools->Show All Cookies and click
-# Remove All Cookies in the dialog.
 cookies.console.sessioncookiescleared=Tous les cookies de sesion ont été supprimés.
-# LOCALIZATION NOTE (cookies.console.cookiesrejected, cookies.console.nocookiesreceived):
-# A label for a cookie event that is displayed in Firebug's Console panel when cookies are
-# rejected by the current site.
 cookies.console.cookiesrejected=Cookies rejetés :
 cookies.console.nocookiesreceived=Aucun cookie reçu
-# LOCALIZATION NOTE (cookies.console.cookie, cookies.console.deleted, cookies.console.added,
-# cookies.console.changed, cookies.console.cleared): Various labels that are used for cookie
-# events displayed in Firebug's Console panel.
 cookies.console.cookie=Cookie
 cookies.console.deleted=supprimé
 cookies.console.added=ajouté
 cookies.console.changed=modifié
 cookies.console.cleared=effacé
-# LOCALIZATION NOTE (cookies.domain.label): Label used for marking domain cookie.
-# Displayed in the Cookies panel for domain cookies.
-# xxxHonza: not used in the UI now.
 cookies.domain.label=Domaine
-# LOCALIZATION NOTE (cookies.secure.label): Label used for marking secure cookie.
-# Displayed in the Cookies panel for secure cookies.
 cookies.secure.label=Sécurisé
-# LOCALIZATION NOTE (cookies.status.accepted, cookies.status.downgraded,
-# cookies.status.flagged, cookies.status.rejected): Various statuses of a cookie
-# displayed in Status column.
 cookies.status.accepted=Accepté
-cookies.status.downgraded=Remis à une version antérieure
+cookies.status.downgraded=Rétrogradé
 cookies.status.flagged=Marqué
 cookies.status.rejected=Rejeté
-# LOCALIZATION NOTE (cookies.info.valuetab.label, cookies.info.rawdatatab.Raw_Data,
-# cookies.info.jsontab.JSON, cookies.info.xmltab.XML): A label for tabs displayed
-# if a cookie entry is expanded. Tab are only available in the UI, if necessary.
 cookies.info.valuetab.label=Valeur
 cookies.info.rawdatatab.Raw_Data=Données brutes
 cookies.info.jsontab.JSON=JSON
 cookies.info.xmltab.XML=XML
-# LOCALIZATION NOTE (cookies.default.session, cookies.default.thirdPartySession,
-# cookies.default.thirdParty, cookies.default.allow, cookies.default.deny,
-# cookies.default.warn, cookies.host.session, cookies.host.accept,
-# cookies.host.reject): Various labels for cookie permissions.
-# examples: Accept cookies from www.softwareishard.com
-cookies.default.session=Par défaut (Accepter les cookies de session)
-cookies.default.thirdPartySession=Par défaut (Accepter les cookies de session)
-cookies.default.thirdParty=Par défaut (Accepter les cookies)
-cookies.default.allow=Par défaut (Accepter les cookies)
-cookies.default.deny=Par défaut (Refuser les cookies)
-cookies.default.warn=Par défaut (Avertir avant d'accepter les cookies)
+cookies.default.session=Par défaut (accepter les cookies de session)
+cookies.default.thirdPartySession=Par défaut (accepter les cookies de session)
+cookies.default.thirdParty=Par défaut (accepter les cookies)
+cookies.default.allow=Par défaut (accepter les cookies)
+cookies.default.deny=Par défaut (refuser les cookies)
+cookies.default.warn=Par défaut (avertir avant d'accepter les cookies)
+cookies.default.limitThirdParty=Par défaut (limite les cookies provenant d'autres domaines)
 cookies.host.session=Accepter les cookies de session de %S
 cookies.host.accept=Accepter les cookies de %S
 cookies.host.reject=Refuser les cookies de %S
-# LOCALIZATION NOTE (cookies.edit.invalidname, cookies.edit.invalidhost,
-# cookies.edit.invalidpath): Various error messages used when a new cookie is created
-# using a cookie dialog. Use Cookies->Create Cookie menu to show the dialog.
+cookies.host.limitThirdParty=Limiter les cookies provenant d'autres domaines pour %S
 cookies.edit.invalidname=Le nom du cookie n'est pas valide.
 cookies.edit.invalidhost=L'hôte du cookie n'est pas valide.
 cookies.edit.invalidpath=Le chemin du cookie n'est pas valide.
-# LOCALIZATION NOTE (cookies.header.name, cookies.header.value, cookies.header.rawValue,
-# cookies.header.domain, cookies.header.size, cookies.header.path, cookies.header.expires,
-# cookies.header.security, cookies.header.status, cookies.header.httponly):
-# Column labels used in the cookie header.
 cookies.header.name=Nom
 cookies.header.value=Contenu
 cookies.header.rawValue=Valeur brute
 cookies.header.domain=Hôte
 cookies.header.size=Taille
+cookies.header.rawSize=Taille brute
 cookies.header.path=Chemin
 cookies.header.expires=Expire
 cookies.header.security=Sécurité
 cookies.header.httponly=HttpOnly
-# LOCALIZATION NOTE (cookies.header.name.tooltip, cookies.header.value.tooltip,
-# cookies.header.rawValue.tooltip, cookies.header.domain.tooltip, cookies.header.size.tooltip,
-# cookies.header.path.tooltip, cookies.header.expires.tooltip, cookies.header.security.tooltip,
-# cookies.header.httponly.tooltip):
-# Column tooltips used in the cookie header.
-cookies.header.name.tooltip=Nom
-cookies.header.value.tooltip=Contenu
-cookies.header.rawValue.tooltip=Valeur brute stockée du cookie
-cookies.header.domain.tooltip=Hôte
-cookies.header.size.tooltip=Taille
-cookies.header.path.tooltip=Chemin
-cookies.header.expires.tooltip=Expire
-cookies.header.security.tooltip=Sécurité
-cookies.header.httponly.tooltip=Montre si le cookie est un cookie uniquement HTTP
-# LOCALIZATION NOTE (cookies.netinfo.Received_Cookies, cookies.netinfo.Sent_Cookies):
-# Labels used in the Firebug's net panel. If there are any cookies associated with a network
-# request, there is an additional Cookies tab displayed when the user expands the request.
-# These labels are used within this tab.
+cookies.header.maxAge=Ancienneté max.
+cookies.header.name.tooltip=Nom du cookie
+cookies.header.value.tooltip=Contenu stocké pour le cookie
+cookies.header.rawValue.tooltip=Valeur brute stockée pour le cookie
+cookies.header.domain.tooltip=Hôte qui a stocké le cookie
+cookies.header.rawSize.tooltip=Taille brute du cookie stocké
+cookies.header.size.tooltip=Taille du cookie stocké
+cookies.header.path.tooltip=Dossier dans lequel se trouve le cookie
+cookies.header.expires.tooltip=Date d'expiration pour ce cookie
+cookies.header.security.tooltip=Indique si ce cookie est sûr ou pas
+cookies.header.httponly.tooltip=Indique si le cookie est un cookie uniquement HTTP
+cookies.header.maxAge.tooltip=Temps maximum de stockage du cookie
 cookies.netinfo.Received_Cookies=Cookies reçus
 cookies.netinfo.Sent_Cookies=Cookies envoyés
-# LOCALIZATION NOTE (cookies.Path_Filter): Label for a Filter->Path Filter
-# xxxHonza: Not implemented yet.
-cookies.Path_Filter=Filtre du chemin
-# LOCALIZATION NOTE (cookies.menu.Cookies): Label for menu Cookies, dislayed on the toolbar.
+cookies.netinfo.deleted.tooltip=La requête supprime le cookie
+cookies.Path_Filter=Filtre de chemin
 cookies.menu.Cookies=Cookies
-# LOCALIZATION NOTE (cookies.export.Export_All_Cookies, cookies.export.Export_All_Cookies_Tooltip,
-# cookies.export.Export_For_Site, cookies.export.Export_For_Site_Tooltip): Labels and 
-# tooltips for exporting menus available under Cookies menus.
-cookies.export.Export_All_Cookies=Exporter tous les cookies ...
-cookies.export.Export_All_Cookies_Tooltip=Exporter tous les cookies du navigateur dans un fichier cookies.txt
-cookies.export.Export_For_Site=Exporter les cookies pour ce site ...
-cookies.export.Export_For_Site_Tooltip=Exporter les cookies pour %S dans un fichier cookies.txt
-# LOCALIZATION NOTE (cookies.message.There_is_no_active_page): An error message displayed
-# when the user is trying to create a cookie and there is no active page (site). This should
-# never happen.
-cookies.message.There_is_no_active_page=Il n'existe aucune page active
-# LOCALIZATION NOTE (cookies.Break_On_Cookie, cookies.Disable_Break_On_Cookie):
-# Tooltips for resume button that are used when the Cookies panel is currently selected.
-# The button allows stopping JS execution when a cookie on the current page is modified
-# added or removed.
+cookies.export.Export_All_Cookies=Exporter tous les cookies
+cookies.export.Export_All_Cookies_Tooltip=Exporter tous les cookies du navigateur vers le fichier cookies.txt
+cookies.export.Export_For_Site=Exporter les cookies pour ce site
+cookies.export.Export_For_Site_Tooltip=Exporter les cookies pour %S vers le fichier cookies.txt
+cookies.message.There_is_no_active_page=Aucune page n'est active.
 cookies.Break_On_Cookie=Arrêter quand les cookies sont modifiés
 cookies.Disable_Break_On_Cookie=Désactiver l'arrêt quand les cookies sont modifiés
-# LOCALIZATION NOTE (cookies.Cookie_Breakpoints): Name of Cookie breakpoint group
-# displayed in Breakpoints panel (in the Script panel)
 cookies.Cookie_Breakpoints=Points d'arrêt de cookie
-# LOCALIZATION NOTE (cookies.Break_On_Cookie, cookies.menu.tooltip.Break_On_Cookie):
-# Label and tooltip for a context menu item used when the user right clicks on a cookie. 
-# examples: Break on 'MyCookie' cookie
-# examples: Break on 'MyCookie' when removed or changed.
-cookies.menu.Break_On_Cookie=Arrêter sur le cookie '%S'
-cookies.menu.tooltip.Break_On_Cookie=Arrêter sur '%S' quand il est supprimé ou modifié
-# LOCALIZATION NOTE (cookies.menu.Edit_Breakpoint_Condition): Label for context menu item
-# used when user right clicks on a cookie with existing breakpoint.
-cookies.menu.Edit_Breakpoint_Condition=Modifier les conditions du point d'arrêt
-# LOCALIZATION NOTE (cookies.Breakpoint_condition_evaluation_fails): Message displayed
-# within the Firebug Console panel if a cookie breakpoint condition fails when evaluated. 
-cookies.Breakpoint_condition_evaluation_fails=L'évaluation de la condition du point d'arrêt a échoué
-# DTD strings converted (main Firecokie UI, see cookiePanel.xul)
-cookies.RemoveAll=Retirer du site
-cookies.Create=Créer le cookie
-# LOCALIZATION NOTE (cookies.Tools, cookies.ToolsTooltip) Label and tooltip for Tools
-# menu on Cookies toolbar.
+cookies.menu.Break_On_Cookie=Arrêter pour le cookie « %S »
+cookies.menu.tooltip.Break_On_Cookie=Arrêter quand « %S » est supprimé ou modifié.
+cookies.menu.Edit_Breakpoint_Condition=Modifier les conditions d'arrêt
+cookies.Breakpoint_condition_evaluation_fails=L'évaluation de la condition d'arrêt a échoué
+cookies.RemoveAll=Retirer les cookies
+cookies.Create=Créer un cookie
 cookies.Tools=Outils
 cookies.ToolsTooltip=Outils
-# LOCALIZATION NOTE (cookies.ViewAll, cookies.ViewAllTooltip) Label and tooltip for
-# view all cookies menu item (Tools menu). This action opens Firefox built-in cookie manager window.
-cookies.ViewAll=Montrer tous les cookies...
-cookies.ViewAllTooltip=Ouvrir le gestionnaire de téléchargements des cookies
-# LOCALIZATION NOTE (cookies.ViewExceptions, cookies.ViewExceptionsTooltip) Label and
-# tooltip for Site Permissions menu item (Tools menu). This action opens Firefox built-in
-# dialog for setting web site cookie permissions.
+cookies.ViewAll=Afficher tous les cookies
+cookies.ViewAllTooltip=Ouvre le gestionnaire des cookies intégré
 cookies.ViewExceptions=Autorisation des sites Web
-cookies.ViewExceptionsTooltip=Voir la liste des sites Web autorisés ou interdits
-# LOCALIZATION NOTE (cookies.Filter, cookies.FilterTooltip, cookies.filter.byPath,
-# cookies.filter.byPathTooltip, cookies.filter.showRejectedCookies,
-# cookies.filter.showRejectedCookiesTooltip): Labels and tooltips for cookie Filter menu
-# presented on the Cookie toolbar.
+cookies.ViewExceptionsTooltip=Affiche la liste des sites Web autorisés ou interdits
 cookies.Filter=Filtre
-cookies.FilterTooltip=Utiliser les options données pour filtrer la liste de cookies.
+cookies.FilterTooltip=Utilise les critères indiqués pour filtrer la liste des cookies.
 cookies.filter.byPath=Filtrer les cookies par emplacement
-cookies.filter.byPathTooltip=N'afficher que les cookies qui correspondent à l'emplacement actuel.
+cookies.filter.byPathTooltip=N'affiche que les cookies qui correspondent à l'emplacement actuel.
 cookies.filter.showRejectedCookies=Afficher les cookies rejetés
-cookies.filter.showRejectedCookiesTooltip=Afficher aussi les cookies rejetés dans la liste.
-# LOCALIZATION NOTE (cookies.edit.title, cookies.edit.name.label,
-# cookies.edit.domain.label, cookies.edit.path.label, cookies.edit.expire.label,
-# cookies.edit.value.label, cookies.edit.secure.label, cookies.edit.httponly.label,
-# cookies.edit.session.label, cookies.edit.urlEncode.label): Edit Cookie dialog UI
-cookies.edit.title=Modifier le cookie
+cookies.filter.showRejectedCookiesTooltip=Affiche même les cookies rejetés dans la liste.
+cookies.edit.title=Éditer le cookie
 cookies.edit.name.label=Nom :
 cookies.edit.domain.label=Hôte :
 cookies.edit.path.label=Chemin :
 cookies.edit.expire.label=Expire :
 cookies.edit.value.label=Contenu :
-cookies.edit.secure.label=Sécuriser le cookie
+cookies.edit.secure.label=Cookie sûr
 cookies.edit.httponly.label=HTTP Only
 cookies.edit.session.label=Session
-cookies.edit.urlEncode.label=Encodage URL de la valeur
-# LOCALIZATION NOTE (cookies.console.Cookies, cookies.console.Filter_By_Cookies)
-# Label and tooltip for a toolbar button displayed on the Console panel. Used for filtering.
+cookies.edit.urlEncode.label=Valeur d'encodage de l'URL
 cookies.console.Cookies=Cookies
 cookies.console.Filter_By_Cookies=Filtrer par cookies
-# LOCALIZATION NOTE (firebug.shortcut.removeAllCookies.label) Label used by the
-# Customize Shortcuts dialog (Firebug menu)
 firebug.shortcut.removeAllCookies.label=Supprimer tous les cookies
-cookie.sizeinfo.Size=Size
-cookie.sizeinfo.Raw_Size=Raw Size
+cookie.sizeinfo.Size=Taille
+cookie.sizeinfo.Raw_Size=Taille brute
diff --git a/locale/fr/firebug-amo.properties b/locale/fr/firebug-amo.properties
index b26a027..9192587 100644
--- a/locale/fr/firebug-amo.properties
+++ b/locale/fr/firebug-amo.properties
@@ -1,7 +1,3 @@
-# LOCALIZATION NOTE (firebug.amo.summary, firebug.amo.description, firebug.amo.developer.comments):
-# These texts are used on Mozilla Add-on site: https://addons.mozilla.org/en-US/firefox/addon/1843
-# They are not direct part of Firebug extension and so, you can't see them in Firebug's UI.
-# Note that firebug.amo.summary must not exceed 250 characters (limitation by AMO site)
-firebug.amo.summary1.6=Firebug intègre à Firefox des outils de développement disponibles pendant la navigation. Vous pouvez modifier, débugger ou surveiller CSS, HTML et Javascript sur n\'importe quelle page web...\\n\\nFirebug 1.6 requiert Firefox 3.6 a minima.
-firebug.amo.description=Firebug ajoute à Firefox une mine d\'outils de développement à portée de main durant votre navigation. Vous pouvez éditer, déboguer, et contrôler les CSS, HTML et JavaScript de n\'importe quelle page web en direct...\\n\\nSur le site de Firebug vous trouverez de la documentation, des captures d\'écran, et des forums de discussion: http://getfirebug.com
-firebug.amo.developer.comments=Si vous rencontrez des problèmes, veuillez lire la FAQ Firebug.\\n\\nhttp://getfirebug.com/faq.html
+firebug.amo.summary1.6=Firebug s'intègre à Firefox pour mettre à disposition des outils de développement prêts à être utilisés pendant la navigation. Vous pouvez modifier, déboguer et contrôler les CSS, le code HTML et Javascript sur n'importe quelle page Web…\n\nFirebug 1.6 nécessite Firefox 3.6 à minima.
+firebug.amo.description=Firebug ajoute à Firefox une mine d\'outils de développement à portée de main durant votre navigation. Vous pouvez éditer, déboguer et contrôler les CSS, le code HTML et JavaScript de n'importe quelle page Web en direct…\n\nSur le site de Firebug vous trouverez de la documentation, des captures d'écran et des forums de discussion : http://getfirebug.com
+firebug.amo.developer.comments=Si vous rencontrez des problèmes, veuillez lire la FAQ Firebug.\n\nhttp://getfirebug.com/faq.html
diff --git a/locale/fr/firebug-tracing.properties b/locale/fr/firebug-tracing.properties
index 7e1ca45..cfd7b07 100644
--- a/locale/fr/firebug-tracing.properties
+++ b/locale/fr/firebug-tracing.properties
@@ -4,21 +4,21 @@ Open_Firebug_Tracing=Ouvrir Firebug Tracing
 Always_Open_Firebug_Tracing=Toujours ouvrir Firebug Tracing
 # LOCALIZATION NOTE (title.Tracing): Title for Firebug tracing console window (verb).n\n
 title.Tracing=Traçage
-tracing.Show_Scope_Variables=Afficher les variables scope
+tracing.Show_Scope_Variables=Afficher les variables concernées
 tracing.Show_Time=Afficher le temps
-tracing.tab.Stack=Stack
+tracing.tab.Stack=Pile
 tracing.tab.Exception=Exception
 tracing.tab.Properties=Propriétés
-tracing.tab.Scope=Scope
-tracing.tab.Response=Retour
+tracing.tab.Scope=Étendue
+tracing.tab.Response=Réponse
 tracing.tab.Source=Source
 tracing.tab.Interfaces=Interfaces
 tracing.tab.Object=Objet
-tracing.tab.Event=Event
+tracing.tab.Event=Évènement
 tracing.cmd.Clear=Effacer
 tracing.cmd.tip.Clear=Supprime tous les messages
 tracing.cmd.Find=Chercher
-tracing.cmd.tip.Find=Chercher du texte
+tracing.cmd.tip.Find=Recherche du texte
 tracing.cmd.Bookmark=Marque-page
 tracing.cmd.tip.Bookmark=Insère un marque-page
 tracing.cmd.Restart=Redémarrer Firefox
@@ -28,24 +28,24 @@ tracing.cmd.tip.Exit=Quitte Firefox
 tracing.cmd.Save=Enregistrer dans un fichier
 tracing.cmd.tip.Save=Enregistre les logs dans un fichier
 tracing.cmd.Load=Charger depuis un fichier
-tracing.cmd.tip.Load=Charger les logs depuis un fichier
+tracing.cmd.tip.Load=Charge les logs depuis un fichier
 tracing.cmd.Expand_All=Tout développer
 tracing.cmd.Collapse_All=Tout replier
 tracing.cmd.Tools=Outils
 tracing.cmd.tip.Tools=Outils
-tracing.cmd.Clear_Browser_Cache=Effacer le cache du navigateur
-tracing.cmd.tip.Clear_Browser_Cache=Efface le cache du navigateur
+tracing.cmd.Clear_Browser_Cache=Vider le cache du navigateur
+tracing.cmd.tip.Clear_Browser_Cache=Vide le cache du navigateur
 tracing.cmd.Force_Garbage_Collector=Forcer le Garbage Collector
 tracing.cmd.tip.Force_Garbage_Collector=Force le Garbage Collector (ramasse-miettes)
-tracing.cmd.Open_Profile_Directory=Ouvrir le répertoire du profil
-tracing.cmd.tip.Open_Profile_Directory=Ouvre le répertoire du profil
+tracing.cmd.Open_Profile_Directory=Ouvrir le répertoire profil
+tracing.cmd.tip.Open_Profile_Directory=Ouvre le dossier du profil
 tracing.option.A11Y_Description=Problèmes d'accessiblité
 tracing.option.ACTIVATION_Description=Activation de Firebug
-tracing.option.ACTIVITYOBSERVER_Description=Observateur de l'activité de Firebug
-tracing.option.ANNOTATIONS_Description=Annotation du site web de Firebug
+tracing.option.ACTIVITYOBSERVER_Description=Observateur d'activité de Firebug
+tracing.option.ANNOTATIONS_Description=Annotation du site Web de Firebug
 tracing.option.BP_Description=Points d'arrêts
-tracing.option.CACHE_Description=Cache du source
-tracing.option.COMMANDLINE_Description=Ligne de commande & popup de la ligne de commande
+tracing.option.CACHE_Description=Cache de la source
+tracing.option.COMMANDLINE_Description=Ligne de commande & invite de commande
 tracing.option.COMPILATION_UNITS_Description=Unités de compilation de script
 tracing.option.CONSOLE_Description=Panneau de la console
 tracing.option.CSS_Description=Analyse CSS
@@ -60,35 +60,35 @@ tracing.option.FBS_BP_Description=Points d'arrêt du service Firebug
 tracing.option.FBS_CREATION_Description=Script de création du service Firebug
 tracing.option.FBS_ERRORS_Description=Erreur du service Firebug
 tracing.option.FBS_FINDDEBUGGER_Description=Recherche de débogueur du service Firebug
-tracing.option.FBS_FUNCTION_Description=fonction du service Firebug
-tracing.option.FBS_JSDCONTEXT_Description=Firebug service JavaScript Debugger context
-tracing.option.FBS_SRCUNITS_Description=Firebug service source units
-tracing.option.FBS_STEP_Description=Firebug service JavaScript Debugger stepping
-tracing.option.FBS_TRACKFILES_Description=Firebug service tracked files
-tracing.option.FUNCTION_NAMES_Description=JavaScript function names
-tracing.option.HISTORY_Description=Firebug Navigation History
+tracing.option.FBS_FUNCTION_Description=Fonction du service Firebug
+tracing.option.FBS_JSDCONTEXT_Description=Menu contextuel débogage JavaScript du service Firebug
+tracing.option.FBS_SRCUNITS_Description=Unités de code source du service Firebug
+tracing.option.FBS_STEP_Description=Débogage pas à pas JavaScript du service Firebug
+tracing.option.FBS_TRACKFILES_Description=Fichiers surveillés par le service Firebug
+tracing.option.FUNCTION_NAMES_Description=Noms de fonctions JavaScript
+tracing.option.HISTORY_Description=Historique de navigation de Firebug
 tracing.option.HTML_Description=HTML
-tracing.option.HTTPOBSERVER_Description=HTTP request observer
-tracing.option.INFOTIP_Description=Infotip
-tracing.option.INITIALIZE_Description=Firebug initialization
-tracing.option.INSPECT_Description=Inspector
-tracing.option.JSONVIEWER_Description=JSON viewer
-tracing.option.LINETABLE_Description=Script line table
-tracing.option.LOCALE_Description=Localization
-tracing.option.LOCATIONS_Description=Source locations
-tracing.option.NET_Description=Net Panel
-tracing.option.NET_EVENTS_Description=Network events
-tracing.option.OPTIONS_Description=Firebug preferences
-tracing.option.PANELS_Description=Panels
-tracing.option.SHORTCUTS_Description=Keyboard shortcuts
-tracing.option.SOURCEFILES_Description=JavaScript source files
-tracing.option.SPY_Description=XMLHttpRequests observer
-tracing.option.STACK_Description=JavaScript call stack
-tracing.option.STORAGE_Description=Settings storage
-tracing.option.SVGVIEWER_Description=SVG viewer
-tracing.option.FONTS_Description=Fonts information and font viewer
-tracing.option.TOOLTIP_Description=Start Button tooltip
-tracing.option.TOPLEVEL_Description=Top level JavaScript
-tracing.option.UI_LOOP_Description=JavaScript debugging user interface
-tracing.option.WINDOWS_Description=Firebug windows & Tab Watcher
-tracing.option.XMLVIEWER_Description=XML viewer
+tracing.option.HTTPOBSERVER_Description=Observateur des requêtes HTTP
+tracing.option.INFOTIP_Description=Astuce
+tracing.option.INITIALIZE_Description=Initialisation de Firebug
+tracing.option.INSPECT_Description=Inspecteur
+tracing.option.JSONVIEWER_Description=Visionneuse JSON
+tracing.option.LINETABLE_Description=Tableau de ligne de script
+tracing.option.LOCALE_Description=Localisation
+tracing.option.LOCATIONS_Description=Emplacements des sources
+tracing.option.NET_Description=Panneau réseau
+tracing.option.NET_EVENTS_Description=Évènements réseau
+tracing.option.OPTIONS_Description=Préférences de Firebug
+tracing.option.PANELS_Description=Panneaux
+tracing.option.SHORTCUTS_Description=Raccourcis clavier
+tracing.option.SOURCEFILES_Description=Fichiers sources en JavaScript
+tracing.option.SPY_Description=Observateur XMLHttpRequests
+tracing.option.STACK_Description=Pile d'exécution JavaScript
+tracing.option.STORAGE_Description=Stockage des paramètres
+tracing.option.SVGVIEWER_Description=Visionneuse SVG
+tracing.option.FONTS_Description=Informations sur les polices et visionneuse de polices
+tracing.option.TOOLTIP_Description=Infobulle du bouton « Démarrer »
+tracing.option.TOPLEVEL_Description=JavaScript de niveau supérieur
+tracing.option.UI_LOOP_Description=Interface utilisateur de débogage JavaScript
+tracing.option.WINDOWS_Description=Fenêtres & onglet observateur de Firebug
+tracing.option.XMLVIEWER_Description=Visionneuse de XML
diff --git a/locale/fr/firebug.properties b/locale/fr/firebug.properties
index 441894c..1c81c03 100644
--- a/locale/fr/firebug.properties
+++ b/locale/fr/firebug.properties
@@ -5,15 +5,15 @@ Firebug=Firebug
 WindowTitle=Firebug - %S
 # Panel titlesn\n
 Panel-console=Console
-panel.tip.console=Observer les messages de la console et exécuter des commandes JavaScript
+panel.tip.console=Permet de vérifier les messages de la console et d'exécuter des commandes JavaScript
 Panel-net=Réseau
-panel.tip.net=Analyser le trafic réseau
+panel.tip.net=Analyse le trafic réseau
 Panel-html=HTML
-panel.tip.html=Inspecter et modifier les nœuds DOM
+panel.tip.html=Permet d'inspecter et modifier les nœuds DOM
 Panel-stylesheet=CSS
-panel.tip.stylesheet=Inspecter et modifier les feuilles de style CSS
+panel.tip.stylesheet=Permet d'inspecter et modifier les feuilles de style CSS
 Panel-script=Script
-panel.tip.script=Déboguer du JavaScript
+panel.tip.script=Permet de déboguer du JavaScript
 Panel-dom=DOM
 panel.tip.dom=Inspecter et modifier des propriétés DOM
 Panel-css=Style
@@ -54,7 +54,7 @@ startbutton.tip.deactivated=Désactivé
 # clicked element in the DOM panel (tab).n\n
 # #1 Target panel titlen\n
 # examples: Inspect in DOM Tabn\n
-panel.status=%S: %S
+panel.status=%S : %S
 inBrowser=dans le navigateur
 minimized=Réduit
 enablement.for_all_pages=pour toutes les pages
@@ -63,564 +63,586 @@ enablement.off=Arrêt
 enablement.Panel_activation_status=Activité des panneaux :
 none=Fermé
 Firebug_-_inactive_for_current_website=Firebug - inactif pour le site web actuel
-Activate_Firebug_for_the_current_website=Activer Firebug pour le site web actuel
+Activate_Firebug_for_the_current_website=Activer Firebug pour le site Web actuel
 Minimized=Réduit
 Minimize_Firebug=Réduire Firebug
 On_for_all_web_pages=Activé pour toutes les pages web
-firebug.menu.tip.On_for_all_Web_Sites=Activer Firebug par défaut pour tous les sites web
+firebug.menu.tip.On_for_all_Web_Sites=Active Firebug par défaut pour tous les sites web
 firebug.menu.Clear_Activation_List=Désactiver les sites surveillés
-firebug.menu.tip.Clear_Activation_List=Désactiver les sites surveillés par Firebug
+firebug.menu.tip.Clear_Activation_List=Désactive les sites surveillés par Firebug
 firebug.menu.Detached=Détaché
-firebug.menu.tip.Detached=Détaché Firebug dans sa propre fenêtre
+firebug.menu.tip.Detached=Affiche Firebug dans sa propre fenêtre
 firebug.menu.Top=Haut
-firebug.menu.tip.Top=Placer Firebug en haut de la fenêtre
+firebug.menu.tip.Top=Place Firebug en haut de la fenêtre
 firebug.menu.Bottom=Bas
-firebug.menu.tip.Bottom=Placer Firebug en bas de la fenêtre
+firebug.menu.tip.Bottom=Place Firebug en bas de la fenêtre
 firebug.menu.Left=Gauche
-firebug.menu.tip.Left=Placer Firebug à gauche de la fenêtre
+firebug.menu.tip.Left=Place Firebug à gauche de la fenêtre
 firebug.menu.Right=Droite
-firebug.menu.tip.Right=Placer Firebug à droite de la fenêtre
+firebug.menu.tip.Right=Place Firebug à droite de la fenêtre
 firebug.uiLocation=Disposition de Firebug
-firebug.menu.tip.UI_Location=Position de l'interface de Firebug
+firebug.menu.tip.UI_Location=Position de l'interface utilisateur de Firebug
 # LOCALIZATION NOTE (jsdIScript): an internal Firefox object used for debugging Firebugn\n
 # do not translate.n\n
-firebug_options=Options de Firebug
+annotations.confirm.clear=Souhaitez-vous vraiment effacer la liste des annotations Firebug pour tous les sites Web ?
 # #1 jsdIScript.tagn\n
 # HTML panel context menu items.n\n
+firebug_options=Options de Firebug
+# Quick Info Boxn\n
+# LOCALIZATION NOTE (html.Break_On_Mutate, html.Disable_Break_On_Mutate): Tooltips for resumen\n
 firebug.Show_All_Panels=Afficher tous les panneaux
 console.option.Show_Command_Line=Afficher l'invite de commande
 console.option.tip.Show_Command_Line=Activer / montrer l'invite de commande
-# Quick Info Boxn\n
+# button that are used when the HTML panel is currently selected. The button allows stoppingn\n
 ShowJavaScriptErrors=Afficher les erreurs JavaScript
-console.option.tip.Show_JavaScript_Errors=Journaliser les erreurs JavaScript dans la console
+console.option.tip.Show_JavaScript_Errors=Inscrire les erreurs JavaScript dans la console
 ShowJavaScriptWarnings=Afficher les avertissements JavaScript
-console.option.tip.Show_JavaScript_Warnings=Journaliser les avertissements JavaScript dans la console
+console.option.tip.Show_JavaScript_Warnings=Inscrire les avertissements JavaScript dans la console
 ShowCSSErrors=Afficher les erreurs CSS
-console.option.tip.Show_CSS_Errors=Journaliser les erreurs CSS dans la console
-ShowXMLHTMLErrors=Show XML/HTML Errors
-console.option.tip.Show_XML_HTML_Errors=Log XML and HTML error messages into the console
+console.option.tip.Show_CSS_Errors=Inscrire les erreurs CSS dans la console
+ShowXMLHTMLErrors=Montrer les erreurs XML/HTML
+console.option.tip.Show_XML_HTML_Errors=Inscrire les erreurs XML et HTML dans la console
 ShowStackTrace=Afficher la pile d\'appel avec les erreurs
 console.option.tip.Show_Stack_Trace=Afficher les informations de la pile d'appel pour les messages d'erreur
 ShowXMLHttpRequests=Afficher les XMLHttpRequests
-console.option.tip.Show_XMLHttpRequests=Journaliser les XMLHttpRequests dans la console
+console.option.tip.Show_XMLHttpRequests=Inscrire les XMLHttpRequests dans la console
 ShowChromeErrors=Afficher les erreurs Chrome
-console.option.tip.Show_System_Errors=Journaliser les erreurs interne au programme et extensions dans la console
+console.option.tip.Show_System_Errors=Inscrire les erreurs internes au programme et extensions dans la console
 ShowChromeMessages=Afficher les messages issus de Chrome
-console.option.tip.Show_System_Messages=Journaliser les messages interne au programme et extensions dans la console
-ShowExternalErrors=Afficher les erreurs externes
-console.option.tip.Show_External_Errors=Journaliser les erreurs provenant de sources externes dans la console
+console.option.tip.Show_System_Messages=Inscrire les messages interne au programme et extensions dans la console
 ShowNetworkErrors=Afficher les erreurs de réseau
-console.option.tip.Show_Network_Errors=Journaliser les erreurs réseau dans la console
+console.option.tip.Show_Network_Errors=Inscrire les erreurs réseau dans la console
 JavascriptOptionsStrict=Avertissements stricts (performance moindre)
-console.option.tip.Show_Strict_Warnings=Journaliser également les avertissements stricts dans la console
+console.option.tip.Show_Strict_Warnings=Inscrire également les avertissements stricts dans la console
 Command_History=Historique des commandes
 console.option.Show_Command_Editor=Afficher l'éditeur de commande
-console.option.tip.Show_Command_Editor=Basculer sur l'éditeur de commande
+console.option.tip.Show_Command_Editor=Bascule vers l'éditeur de commande
 commandLineShowCompleterPopup=Activer l'auto-complétion
-console.option.tip.Show_Completion_List_Popup=Afficher l'auto-complétion de commande
+console.option.tip.Show_Completion_List_Popup=Affiche l'auto-complétion de commande
 Assertion=Échec de l\'assertion
-# LOCALIZATION NOTE (html.Break_On_Mutate, html.Disable_Break_On_Mutate): Tooltips for resumen\n
-# button that are used when the HTML panel is currently selected. The button allows stoppingn\n
 # JS execution when DOM of the current page is modified.n\n
 # LOCALIZATION NOTE (EditAttribute): Menu Item label used in HTML panel context menu. Allowsn\n
 # editing an existing HTML element attribute.n\n
+# #1 Name of the clicked attribute.n\n
+# examples: Edit Attribute \"onclick\"...n\n
 Line=%S (ligne %S)
 LineAndCol=%S (ligne %S, col. %S)
 InstanceLine=%S #%S (ligne %S)
 StackItem=%S (%S ligne %S)
 SystemItem=<système>
-# #1 Name of the clicked attribute.n\n
-# examples: Edit Attribute \"onclick\"...n\n
 # LOCALIZATION NOTE (DeleteAttribute): Menu Item label used in HTML panel context menu. Allowsn\n
 # deleting an existing HTML element attribute.n\n
 # #1 Name of the clicked attribute.n\n
-panel.Inspect_In_Panel=Inspecter dans le panneau %S
-panel.tip.Inspect_In_Panel=Basculer sur le panneau %S pour y examiner l'objet
-NoName=(anonyme)
 # examples: Delete Attribute \"onclick\"...n\n
 # LOCALIZATION NOTE (InheritedFrom): Displaying a HTML element name + an applied CSS rule.n\n
+panel.Inspect_In_Panel=Inspecter dans le panneau %S
+panel.tip.Inspect_In_Panel=Basculer vers le panneau %S pour y examiner l'objet
+NoName=(anonyme)
 # that has been inherited. Used in the Style side panel (under HTML panel).n\n
-jsdIScript=jsdIScript %S
 # examples: Inherited from table.tabViewn\n
 # LOCALIZATION NOTE (EditProp): Menu item label used in the CSS panel context menu.n\n
+jsdIScript=jsdIScript %S
 # Allows to edit an existing CSS rule property.n\n
-ShowFullText=Afficher tout le texte
-html.option.tip.Show_Full_Text=Ne pas tronquer le contenu des éléments
 # %S Name of the clicked propertyn\n
 # examples: Edit \"background-color\"...n\n
+ShowFullText=Afficher tout le texte
+html.option.tip.Show_Full_Text=Ne pas tronquer le contenu des éléments
 # LOCALIZATION NOTE (DisableProp): Menu item label used in the CSS panel context menu.n\n
-ShowWhitespace=Afficher les caractères masqués
-html.option.tip.Show_Whitespace=Afficher les caractères masqués à l'intérieur des nœuds
 # Allows to disable an existing CSS rule property.n\n
 # %S Name of the clicked propertyn\n
-ShowComments=Afficher les commentaires
-html.option.tip.Show_Comments=Afficher les noeuds de commentaire
+ShowWhitespace=Afficher les caractères masqués
+html.option.tip.Show_Whitespace=Affiche les caractères masqués à l'intérieur des nœuds
 # examples: Disable \"background-color\"n\n
 # LOCALIZATION NOTE (DeleteProp): Menu item label used in the CSS panel context menu.n\n
+ShowComments=Afficher les commentaires
+html.option.tip.Show_Comments=Affiche les noeuds de commentaire
 # Allows to delete an existing CSS rule property.n\n
+# %S Name of the clicked propertyn\n
+# examples: Delete \"background-color\"n\n
 html.option.Show_Entities_As_Symbols=Afficher les entités en symbole
-html.option.tip.Show_Entities_As_Symbols=Afficher toutes les entités XML par leur représentation symbolique
+html.option.tip.Show_Entities_As_Symbols=Affiche toutes les entités XML par leur représentation symbolique
 html.option.Show_Entities_As_Names=Afficher les entités en nom
-html.option.tip.Show_Entities_As_Names=Afficher toutes les entités XML en utilisant leur nom
+html.option.tip.Show_Entities_As_Names=Affiche toutes les entités XML en utilisant leur nom
 html.option.Show_Entities_As_Unicode=Afficher les entités en Unicode
-html.option.tip.Show_Entities_As_Unicode=Afficher toutes les entités XML par leur représentation Unicode
-# %S Name of the clicked propertyn\n
-# examples: Delete \"background-color\"n\n
+html.option.tip.Show_Entities_As_Unicode=Affiche toutes les entités XML par leur représentation Unicode
 # Console context menu labels.n\n
-HighlightMutations=Surligner les modifications
-html.option.tip.Highlight_Mutations=Surligner les modifications à l'intérieur des nœuds
 # LOCALIZATION NOTE do not translate, no longer used(?)n\n
 # Breakpoints side paneln\n
+HighlightMutations=Surligner les modifications
+html.option.tip.Highlight_Mutations=Surligne les modifications à l'intérieur des nœuds
 # LOCALIZATION NOTE (script.balloon.Continue, script.balloon.Disable): Labels used for buttonsn\n
-ExpandMutations=Développer les modifications
-html.option.tip.Expand_Mutations=Développer l'arbre pour afficher les nœuds modifiés
 # within balloon popup dialog. This dialog appears when debugger halts at a breakpoint or atn\n
 # a \'debugger\' keyword.n\n
+ExpandMutations=Développer les modifications
+html.option.tip.Expand_Mutations=Développe l'arborescence pour afficher les nœuds modifiés
 # Continue: allows to resume the debuggern\n
-ScrollToMutations=Défiler jusqu\'aux modifications
-html.option.tip.Scroll_To_Mutations=Faire défiler l'arbre jusqu'aux nœuds modifiés
 # Disable: allows to disable the current \'debugger;\' keyword used in the Javascript source.n\n
 # Script paneln\n
+ScrollToMutations=Défiler jusqu\'aux modifications
+html.option.tip.Scroll_To_Mutations=Fait défiler l'arborescence jusqu'aux nœuds modifiés
 # LOCALIZATION NOTE (LayoutPadding, LayoutBorder, LayoutMargin, LayoutPosition, LayoutAdjacent):n\n
-ShowQuickInfoBox=Afficher la boîte d\'infos
-inspect.option.tip.Show_Quick_Info_Box=Afficher les informations de l'élément inspecté dans un panneau flottant sur la page
 # Labels used to describe layout properties a the selected HTML element.n\n
 # Used in the Layout side panel under HMTL panel.n\n
+ShowQuickInfoBox=Afficher la boîte d\'infos
+inspect.option.tip.Show_Quick_Info_Box=Affiche les informations de l'élément inspecté dans un panneau flottant sur la page
 # LOCALIZATION NOTE (ShowRulers): Label for context menu item. Used in the Layout side paneln\n
+# under HTML panel.n\n
+# Net paneln\n
 ShadeBoxModel=Colorer l\'élément survolé
 inspect.option.tip.Shade_Box_Model=Colore les différentes parties du modèle de boite
 ScrollIntoView=Défiler pour afficher
-html.tip.Scroll_Into_View=Faire défiler la page jusqu'à l'élément
+html.tip.Scroll_Into_View=Fait défiler la page jusqu'à l'élément
 NewAttribute=Nouvel attribut…
-html.tip.New_Attribute=Ajouter un nouvel attribut à cet élément
+html.tip.New_Attribute=Ajoute un nouvel attribut à cet élément
 html.Edit_Node=Éditer %S…
 html.Node=Nœud
 html.tip.Edit_Node=Éditer le %S en utilisant l'éditeur texte
 DeleteElement=Supprimer l\'élément
-html.Delete_Element=Supprimer l'élément de l'arbre
+html.Delete_Element=Supprime l'élément de l'arborescence
 DeleteNode=Supprimer le nœud
-html.Delete_Node=Supprimer le nœud de l'arbre
-# under HTML panel.n\n
+html.Delete_Node=Supprime le nœud de l'arborescence
+# LOCALIZATION NOTE (net.header.Reset_Header) Label for header context menu (within the net panel)n\n
 quickInfo=Infos
 computedStyle=Styles calculés
-# Net paneln\n
-# LOCALIZATION NOTE (net.header.Reset_Header) Label for header context menu (within the net panel)n\n
 # LOCALIZATION NOTE (net.header.URL, net.header.URL_Tooltip, net.header.Status,n\n
+# net.header.Status_Tooltip, net.header.Domain, net.header.Domain_Tooltip,n\n
+# net.header.Size, net.header.Size_Tooltip, net.header.Timeline, net.header.Timeline_Tooltip):n\n
 html.Break_On_Mutate=Arrêter lors des mutations
 html.Disable_Break_On_Mutate=Ne plus arrêter lors des mutations
 html.label.Break_On_Text_Change=Arrêter aux changements de texte
 html.label.HTML_Breakpoints=Points d\'arrêt HTML
 html.label.Break_On_Attribute_Change=Arrêter aux changements d\'attributs
-html.tip.Break_On_Attribute_Change=Arrêter l'exécution JavaScript quand un attribut de cet élément est modifié
-html.label.Break_On_Child_Addition_or_Removal=Arrêter aux création et suppressions d\'enfants
-html.tip.Break_On_Child_Addition_or_Removal=Arrêter l'exécution JavaScript quand un nœud enfant est ajouté ou supprimé à cet élément
-html.label.Break_On_Element_Removal=Arrêter aux suppression d\'éléments
-html.tip.Break_On_Element_Removal=Arrêter l'exécution JavaScript quand un élément est supprimé
-# net.header.Status_Tooltip, net.header.Domain, net.header.Domain_Tooltip,n\n
-# net.header.Size, net.header.Size_Tooltip, net.header.Timeline, net.header.Timeline_Tooltip):n\n
+html.tip.Break_On_Attribute_Change=Arrête l'exécution JavaScript quand un attribut de cet élément est modifié
+html.label.Break_On_Child_Addition_or_Removal=Arrêter lors de la création ou de la suppression d'enfants
+html.tip.Break_On_Child_Addition_or_Removal=Arrête l'exécution JavaScript quand un nœud enfant est ajouté ou supprimé à cet élément
+html.label.Break_On_Element_Removal=Arrêter lors de la suppression d'éléments
+html.tip.Break_On_Element_Removal=Arrête l'exécution JavaScript quand un élément est supprimé
 # Labels and tooltips for a headers displayed on top of the Net panel.n\n
 # LOCALIZATION NOTE (net.label.Network_Breakpoints): Label for network breakpoints group.n\n
-html.label.Expand/Contract_All=Développer/replier tout
-html.tip.Expand/Contract_All=Développer/replier tous les enfants récursivement
 # LOCALIZATION NOTE (net.label.Break_On_Request): Label used in the Net panel\'s contextn\n
 # menu for breaking on a XHR.n\n
+html.label.Expand/Contract_All=Développer/replier tout
+html.tip.Expand/Contract_All=Développer/replier tous les enfants récursivement
 # LOCALIZATION NOTE (net.headers.view_source, net.headers.pretty_print): Labels used in then\n
-dom.label.breakOnPropertyChange=Arrêter aux modifications de propriété
-dom.tip.Break_On_Property_Change=Arrêter l'exécution JavaScript quand cette propriété est modifiée
 # Net panel\'s Headers tab (displayed if you expand a network request). The label is usedn\n
+dom.scopeName=(fermeture)
 # for a button that switches the view between \"show raw source code\" and \"pretty formated headern\n
-dom.disableBreakOnPropertyChange=Désactiver l'arrêt aux modifications de propriété
-dom.label.DOM_Breakpoints=Points d\'arrêt DOM
 # values\".n\n
+dom.scopeParentName=(portée parente)
 # LOCALIZATION NOTE (net.filter.Media): Label for net panel filter (used on the Net panel toolbar)n\n
 # LOCALIZATION NOTE (Post, Put): Label (verb) used in the Net panel for detailed info aboutn\n
+dom.tip.scopeName=Utiliser <fonction>.%variableDeFermeture pour y accéder en ligne de commande
 # a network request (displayed when a net panel entry is expanded). The content ofn\n
-EditAttribute=Modifier l\'attribut \"%S\"…
-html.tip.Edit_Attribute=Éditer la valeur de l'attribut "%S" de cet élément
 # this tab displays sent data (related to a HTTP send method).n\n
 # LOCALIZATION NOTE (Response, URLParameters, Cache, HTML, jsonviewer.tab.JSON, xmlviewer.tab.XML):n\n
+dom.tip.scopeMemberName=Utilisez <func>.%S pour accéder à l'invite de commande
 # Label used in the Net panel for detailed info about a network request (displayedn\n
 # when a net panel entry is expanded)n\n
-DeleteAttribute=Supprimer l\'attribut \"%S\"
-html.tip.Delete_Attribute=Supprimer l'attribut "%S" de cet élément
+firebug.reps.declarativeScope=[étendue déclarative]
+firebug.reps.objectScope=[portée de l'objet]
+firebug.reps.withScope=[avec portée]
 # LOCALIZATION NOTE (RequestHeaders, ResponseHeaders): Label (noun) used in the Net paneln\n
 # (expand an entry in the panel and select Headers tab).n\n
+firebug.reps.optimizedAway=(inaccessible pour optimisation)
 # LOCALIZATION NOTE (plural.Limit_Exceeded): Semi-colon list of plural forms.n\n
-InheritedFrom=Hérité de
-SothinkWarning=L\'extension Sothink SWF Catcher ne permet pas à Firebug de fonctionner correctement.<br><br>Merci de lire <a href=\"http://www.getfirebug.com/faq.html#Sothink\" target=\"_new\">cet article de la FAQ de Firebug</a> pour obtenir de l\'aide.
 # A message displayed in the Net panel when some entries must be removed since maximum numbern\n
 # of entries has been reached.n\n
-css.fontFamilyPreview=Portez ce vieux whisky au juge blond qui fume. 0123456789
+firebug.reps.element.attribute_value=valeur d'attribut
+firebug.reps.element.property_value=valeur de propriété
 # %S the number of entries removedn\n
 # example: Firebug\'s log limit has been reached. 150 entries not shown.n\n
 # LOCALIZATION NOTE (LimitPrefsTitle): A message displayed in the Net panel when log limitn\n
-css.EmptyStyleSheet=Il n'y a aucune règle. Vous pouvez <a>créer une règle</a>.
+dom.label.breakOnPropertyChange=Arrêter lors de la modification de propriété
+dom.tip.Break_On_Property_Change=Arrête l'exécution JavaScript quand cette propriété est modifiée
 # has been reached. Informing the user what preferencee should be changed to modify the limit.n\n
 # %S Name of a preference.n\n
+dom.disableBreakOnPropertyChange=Désactiver l'arrêt lors de la modification de propriété
+dom.label.DOM_Breakpoints=Points d'arrêt DOM
 # examples: In order to change the limit modify: firebug.extensions.console.logLimitn\n
-css.EmptyElementCSS=Cet élément n'a aucune règle de style. Vous pouvez lui <a>créer une règle</a>.
-EditStyle=Éditer le style de l\'élément…
-style.tip.Edit_Style=Éditer les styles en-ligne de l'élément
-AddRule=Ajouter une règle…
-css.tip.AddRule=Ajouter une règle générale à cet élément
-NewRule=Nouvelle règle…
-css.tip.New_Rule=Ajouter une nouvelle règle
 # LOCALIZATION NOTE (Profile): Used as a caption for reported profile info.n\n
 # (result of javascript profiler tool). Represents a verb.n\n
 # LOCALIZATION NOTE (plural.Profile_Time): Semi-colon list of plural forms.n\n
+EditAttribute=Éditer l\'attribut \"%S\"…
+html.tip.Edit_Attribute=Édite la valeur de l'attribut "%S" de cet élément
 # Used as a caption for reported profile info (result of javascript profiler tool).n\n
-css.Delete_Rule=Supprimer "%S"
-css.tip.Delete_Rule=Supprimer la règle "%S" et toutes ces propriétés
 # #1 number of millisecondsn\n
 # #2 number of calls (plural)n\n
 # example: (#1ms, #2 calls)n\n
-css.menu.Edit_Media_Query=Éditer le Media Query
-css.menu.tip.Edit_Media_Query=Éditer le Media Query affecté à cette règle
-NewProp=Nouvelle propriété…
-css.tip.New_Prop=Ajouter une nouvelle propriété à la règle actuelle
+DeleteAttribute=Supprimer l\'attribut \"%S\"
+html.tip.Delete_Attribute=Supprime l'attribut "%S" de cet élément
 # LOCALIZATION NOTE (Calls, OwnTime, Time, Avg, Min, Max, File): Used in profiler report headern\n
 # (name of a report column). In order to see this, select the Console panel start profilingn\n
 # by clicking the Profile button and stop it by clicking again. The report is logged into then\n
+InheritedFrom=Hérité de
+SothinkWarning=L\'extension Sothink SWF Catcher ne permet pas à Firebug de fonctionner correctement.<br><br>Merci de lire <a href=\"http://www.getfirebug.com/faq.html#Sothink\" target=\"_new\">cet article de la FAQ de Firebug</a> pour obtenir de l\'aide.
 # console panel. Make sure Script panel is enabled.n\n
-EditProp=Éditer \"%S\"…
-css.tip.Edit_Prop=Éditer la valeur de la propriété "%S"
 # Support for clipboard actions.n\n
+css.fontFamilyPreview=Portez ce vieux whisky au juge blond qui fume. 0123456789
 # LOCALIZATION NOTE (ShowCallsInConsole): Label for context menu item. Used in the Scriptn\n
 # panel when clicking a function object.n\n
 # %S Name of the functionn\n
-DisableProp=Désactiver \"%S\"
-css.tip.Disable_Prop=Désactiver la propriété "%S"
+css.EmptyStyleSheet=Il n'y a aucune règle. Vous pouvez <a>créer une règle</a>.
 # Log Calls to \"getData\"n\n
 # LOCALIZATION NOTE (anel.tooltip.Show_Command_Line): A tooltip used for a button on mainn\n
 # Firebug toolbar. This button allows to open the command line even within other panels.n\n
+css.EmptyElementCSS=Cet élément n'a aucune règle de style. Vous pouvez lui <a>créer une règle</a>.
+EditStyle=Éditer le style de l\'élément…
+style.tip.Edit_Style=Édite les styles en-ligne de l'élément
+AddRule=Ajouter une règle…
+css.tip.AddRule=Ajoute une règle générale à cet élément
+NewRule=Nouvelle règle…
+css.tip.New_Rule=Ajoute une nouvelle règle
 # LOCALIZATION NOTE (console.MethodNotSupported): A message displayed in the Console paneln\n
-DeleteProp=Supprimer \"%S\"
-css.tip.Delete_Prop=Supprimer la propriété "%S"
 # if specific method is not supported.n\n
-BreakOnThisError=Arrêter sur cette erreur
-console.menu.tip.Break_On_This_Error=Arrêter l'exécution JavaScript dès que cette erreur se produit
-BreakOnAllErrors=Arrêter à chaque erreur
-console.menu.tip.Break_On_All_Errors=Arrêter l'exécution JavaScript dès qu'un erreur se produit
 # %S Name of a not supported method.n\n
 # LOCALIZATION NOTE (commandline.MethodNotSupported): A message displayed in the Console paneln\n
+css.Delete_Rule=Supprimer "%S"
+css.tip.Delete_Rule=Supprimer la règle "%S" et toutes ces propriétés
 # when a not supported method is used on the command line.n\n
-TrackThrowCatch=Pister Throw/Catch
-script.option.tip.Track_Throw_Catch=Pister les exceptions même quand elles sont capturées par les blocs try/catch
-UseLastLineForEvalName=Utiliser la dernière ligne de la source comme nom pour les eval()
-UseMD5ForEvalName=Utiliser MD5 comme nom pour les eval()
 # %S Name of a not supported method.n\n
-Breakpoints=Points d\'arrêt
-ErrorBreakpoints=Points d\'arrêt sur erreur
-LoggedFunctions=Fonctions journalisées
-EnableAllBreakpoints=Activer tous les points d\'arrêt
-breakpoints.option.tip.Enable_All_Breakpoints=Activer tous les points d'arrêts listés
-DisableAllBreakpoints=Désactiver tous les points d\'arrêt
-breakpoints.option.tip.Disable_All_Breakpoints=Désactiver tous les points d'arrêt listés
-ClearAllBreakpoints=Supprimer tous les points d\'arrêt
-breakpoints.option.tip.Clear_All_Breakpoints=Supprimer tous les points d'arrêt listés
-ConditionInput=Ce point d\'arrêt ne sera actif que si cette expression est vraie :
 # LOCALIZATION NOTE (console.Disable_Break_On_All_Errors, console.Break_On_All_Errors):n\n
+css.menu.Edit_Media_Query=Éditer le Media Query
+css.menu.tip.Edit_Media_Query=Édite le Media Query affecté à cette règle
+NewProp=Nouvelle propriété…
+css.tip.New_Prop=Ajoute une nouvelle propriété à la règle actuelle
 # Tooltip for the \"Break on... \" button used when the Console panel is selected.n\n
 # Console strings used when JavaScript is not availablen\n
-breakpoints.Remove_Breakpoint=Supprimer le point d'arrêt
-breakpoints.tip.Remove_Breakpoint=Supprimer le point d'arrêt
-breakpoints.Disable_Breakpoint=Désactiver le point d'arrêt
-breakpoints.tip.Disable_Breakpoint=Désactiver le point d'arrêt
-breakpoints.Enable_Breakpoint=Activer le point d'arrêt
-breakpoints.tip.Enable_Breakpoint=Activer le point d'arrêt
 # LOCALIZATION NOTE (net.sizeinfo.Response_Body, net.sizeinfo.Post_Body, net.sizeinfo.Total_Sent,n\n
 # net.sizeinfo.Total_Received):n\n
+EditProp=Éditer \"%S\"…
+css.tip.Edit_Prop=Édite la valeur de la propriété "%S"
 # Labels used for detailed size info tooltip. The tooltip is displayed if you hover mousen\n
 # over a Size displayed within the Net panel. \'Total Sent\' and \'Total Received\' info includesn\n
 # even sent and received heades size.n\n
-script.balloon.Continue=Continuer
-script.balloon.Disable=Désactiver
-ScriptsFilterStatic=Afficher les scripts statiques
-ScriptsFilterEval=Afficher les scripts statiques et eval
-ScriptsFilterEvent=Afficher les scripts statiques et d\'événements
-ScriptsFilterAll=Afficher les scripts statiques et d\'événements et les eval()
-ScriptsFilterStaticShort=statique
-ScriptsFilterEvalShort=evals
-ScriptsFilterEventShort=événements
-ScriptsFilterAllShort=Tous
 # LOCALIZATION NOTE (net.postDataSizeLimitMessage): A warning message displayed within the Netn\n
+DisableProp=Désactiver \"%S\"
+css.tip.Disable_Prop=Désactive la propriété "%S"
 # panel (inside the Post tab of an expanded request entry). The message informs the user thatn\n
 # posted data reached Firebug\'s size limit and only part of it is displayed in the UI.n\n
 # LOCALIZATION NOTE (net.option.Disable_Browser_Cache, net.option.Show_Paint_Events):n\n
-callstack.Expand_All=Développer tout
-callstack.tip.Expand_All=Expand all stack frame functions
-callstack.Collapse_All=Collapse All
-callstack.tip.Collapse_All=Collapse all stack frame functions
 # Labels for Net panel\'s options.n\n
+DeleteProp=Supprimer \"%S\"
+css.tip.Delete_Prop=Supprime la propriété "%S"
 # LOCALIZATION NOTE (net.option.Show_BF_Cache_Responses, net.option.tip.Show_BF_Cache_Responses):n\n
-callstack.Execution_not_stopped=Stack frames are just shown when the script execution is stopped.
+BreakOnThisError=Arrêter lors de cette erreur
+console.menu.tip.Break_On_This_Error=Arrête l'exécution JavaScript dès que cette erreur se produit
+BreakOnAllErrors=Arrêter à chaque erreur
+console.menu.tip.Break_On_All_Errors=Arrête l'exécution JavaScript dès qu'un erreur se produit
 # Net panels\'s option. If set to true, the net panel displays also response coming fromn\n
 # BF (back-forward) cache. See also: https://developer.mozilla.org/En/Working_with_BFCachen\n
 # LOCALIZATION NOTE (plural.Request_Count): Semi-colon list of plural forms.n\n
+TrackThrowCatch=Pister Throw/Catch
+script.option.tip.Track_Throw_Catch=Pister les exceptions même quand elles sont capturées par les blocs try/catch
+UseLastLineForEvalName=Utiliser la dernière ligne de la source comme nom pour les eval()
+UseMD5ForEvalName=Utiliser MD5 comme nom pour les eval()
 # A label used in the Net panel. Displays number of HTTP requests executed by the current page.n\n
-ShowUserProps=Afficher les propriétés utilisateur
-dom.option.tip.Show_User_Props=Show user-defined object properties
-ShowUserFuncs=Afficher les fonctions utilisateur
-dom.option.tip.Show_User_Funcs=Show user-defined object methods
-ShowDOMProps=Afficher les propriétés DOM
-dom.option.tip.Show_DOM_Props=Show properties specified inside the DOM
-ShowDOMFuncs=Afficher les fonctions DOM
-dom.option.tip.Show_DOM_Funcs=Show functions specified inside the DOM
-ShowDOMConstants=Afficher les constantes DOM
-dom.option.tip.Show_DOM_Constants=Show constants specified inside the DOM
-ShowInlineEventHandlers=Show Inline Event Handlers
-ShowInlineEventHandlersTooltip=Show available inline event handlers, that are not associated with a function
-ShowOwnProperties=Show Own Properties Only
-ShowOwnPropertiesTooltip=Don't show prototype chain
-ShowEnumerableProperties=Show Enumerable Properties Only
-ShowEnumerablePropertiesTooltip=Don't show non-enumerable properties
-NoMembersWarning=Aucune propriété n\'est définie pour cet objet.
-NewWatch=Nouvelle expression espion…
+Breakpoints=Points d\'arrêt
+ErrorBreakpoints=Points d\'arrêt sur erreur
+LoggedFunctions=Fonctions journalisées
+EnableAllBreakpoints=Activer tous les points d\'arrêt
+breakpoints.option.tip.Enable_All_Breakpoints=Active tous les points d'arrêts listés
+DisableAllBreakpoints=Désactiver tous les points d\'arrêt
+breakpoints.option.tip.Disable_All_Breakpoints=Désactive tous les points d'arrêt listés
+ClearAllBreakpoints=Supprimer tous les points d\'arrêt
+breakpoints.option.tip.Clear_All_Breakpoints=Supprime tous les points d'arrêt listés
+ConditionInput=Ce point d\'arrêt ne sera actif que si cette expression est vraie :
 # %S number of requestsn\n
 # example: 21 requestsn\n
-AddWatch=Ajouter un espion
-watch.tip.Add_Watch=Add the selection/object to the Watch side panel for observation
 # LOCALIZATION NOTE (plural.Error_Count): Semi-colon list of plural forms.n\n
+breakpoints.Remove_Breakpoint=Supprimer le point d'arrêt
+breakpoints.tip.Remove_Breakpoint=Supprime le point d'arrêt
+breakpoints.Disable_Breakpoint=Désactiver le point d'arrêt
+breakpoints.tip.Disable_Breakpoint=Désactive le point d'arrêt
+breakpoints.Enable_Breakpoint=Activer le point d'arrêt
+breakpoints.tip.Enable_Breakpoint=Active le point d'arrêt
 # A label used in Firefox status bar. Displays number of JavaScript errors found by Firebug.n\n
-CopySourceCode=Copier le code source
-script.tip.Copy_Source_Code=Copy the selected source code to the clipboard
-Use_hash_plus_number_to_go_to_line=Use #<number> to go to line
-CopyValue=Copier la valeur
-dom.tip.Copy_Value=Copy the property's value to the clipboard
-Copy_Name=Copier le nom
-dom.tip.Copy_Name=Copy the property's name to the clipboard
-Copy_Path=Copier le chemin
-dom.tip.Copy_Path=Copy the property path
-NewProperty=Nouvelle propriété…
-EditProperty=Éditer la propriété…
-dom.tip.Edit_Property=Edit the property's value
-EditVariable=Éditer la variable…
-stack.tip.Edit_Variable=Edit the variable's value
-EditWatch=Éditer l\'espion…
-watch.tip.Edit_Watch=Edit the watch expression's value
-DeleteProperty=Supprimer la propriété
-dom.tip.Delete_Property=Delete the property
-DeleteWatch=Supprimer l\'espion
-DeleteAllWatches=Delete All Watches
-watch.tip.Delete_Watch=Delete the watch expression
-watch.tip.Delete_All_Watches=Delete all the watch expressions
 # %S number of errorsn\n
 # example: 111 Errorsn\n
-SetBreakpoint=Définir un point d\'arrêt
-script.tip.Set_Breakpoint=Toggles setting of a breakpoint at the current line
 # LOCALIZATION NOTE names of kinds of scopes. Probably best left in English.n\n
 # With: the scope inside of the with(obj) {} statementn\n
+script.balloon.Continue=Continuer
+script.balloon.Disable=Désactiver
+ScriptsFilterStatic=Afficher les scripts statiques
+ScriptsFilterEval=Afficher les scripts statiques et eval
+ScriptsFilterEvent=Afficher les scripts statiques et d\'événements
+ScriptsFilterAll=Afficher les scripts statiques, d\'événements et les eval()
+ScriptsFilterStaticShort=statique
+ScriptsFilterEvalShort=evals
+ScriptsFilterEventShort=événements
+ScriptsFilterAllShort=Tous
 # Call: the scope inside of a function eg function foo() { XXX here XXX var f = function() {} };n\n
-EditBreakpointCondition=Modifier la condition d\'arrêt…
-breakpoints.tip.Edit_Breakpoint_Condition=Edit the condition, under which this breakpoint stops the JavaScript execution
-NoBreakpointsWarning=Il n\'y a aucun point d\'arrêt dans cette page.
 # Window: the scope inside of a Javascript window object.n\n
 # Net panel timing info labelsn\n
 #A11y Chrome Labels (not visible, spoken by screen readers)n\n
-Only_Show_Applied_Styles=Only Show Applied Styles
-style.option.tip.Only_Show_Applied_Styles=Just show styles applied to the element
+callstack.Expand_All=Développer tout
+callstack.tip.Expand_All=Développer
+callstack.Collapse_All=Tout replier
+callstack.tip.Collapse_All=Replie toutes les fonctions de pile d'exécution.
 #A11y panelNode labels (not visible, spoken by screen readers)n\n
 #A11y Domplate labels  (not visible, spoken by screen readers)n\n
+callstack.Execution_not_stopped=La pile d'exécution est juste affichée lorsque l'exécution du script est arrêtée.
 # LOCALIZATION NOTEn\n
-Show_User_Agent_CSS=Afficher les propriétés CSS par défaut
-style.option.tip.Show_User_Agent_CSS=Also show the CSS defined by the user agent
 # Used by a11y. Not directly visible in the UI, intended for screen readers.n\n
 # Describe contents of inline editor fieldsn\n
 # LOCALIZATION NOTE (a11y.labels.overridden):n\n
+ShowUserProps=Afficher les propriétés utilisateur
+dom.option.tip.Show_User_Props=Affiche les propriétés objet définies par l'utilisateur
+ShowUserFuncs=Afficher les fonctions utilisateur
+dom.option.tip.Show_User_Funcs=Affiche les méthodes objet définies par l'utilisateur
+ShowDOMProps=Afficher les propriétés DOM
+dom.option.tip.Show_DOM_Props=Affiche les propriétés spécifiées dans le DOM
+ShowDOMFuncs=Afficher les fonctions DOM
+dom.option.tip.Show_DOM_Funcs=Affiche les fonctions spécifiées dans le DOM
+ShowDOMConstants=Afficher les constantes DOM
+dom.option.tip.Show_DOM_Constants=Affiche les constantes spécifiées dans le DOM
+ShowClosures=Afficher les fermetures
+dom.option.tip.Show_Closures=Afficher les fermetures associées à différentes fonctions (active le débogueur)
+ShowInlineEventHandlers=Afficher les gestionnaires d'évènements en-ligne
+ShowInlineEventHandlersTooltip=Affiche les gestionnaires d'évènements en ligne disponibles qui ne sont pas associés à une fonction
+ShowOwnProperties=Afficher uniquement les propriétés propre
+ShowOwnPropertiesTooltip=N'affiche pas la chaîne du prototype
+ShowEnumerableProperties=Afficher uniquement les propriétés énumérables
+ShowEnumerablePropertiesTooltip=N'affiche pas les propriétés non-énumérables
+NoMembersWarning=Aucune propriété n\'est définie pour cet objet.
+NewWatch=Nouvelle expression espion…
 # Used by a11y. Not directly visible in the UI, intended for screen readers.n\n
 # indicates style property is overridden by selector with higher specificityn\n
-computed.option.label.Colors_As_Hex=Colors As Hex
-computed.option.tip.Colors_As_Hex=Show colors in hexadecimal format
-computed.option.label.Colors_As_RGB=Colors As RGB
-computed.option.tip.Colors_As_RGB=Show colors in RGB format
-computed.option.label.Colors_As_HSL=Colors As HSL
-computed.option.tip.Colors_As_HSL=Show colors in HSL format
+AddWatch=Ajouter un espion
+watch.tip.Add_Watch=Ajoute la sélection/l'objet au panneau latéral espion pour observation
 # LOCALIZATION NOTE (a11y.hasConditionalBreakpoint, a11y.hasDisabledBreakpoint):n\n
 # Used by a11y. Not directly visible in the UI, intended for screen readers.n\n
+CopySourceCode=Copier le code source
+script.tip.Copy_Source_Code=Copie la source sélectionnée dans le presse-papiers
+Use_hash_plus_number_to_go_to_line=Utiliser #<nombre> pour aller à la ligne voulue
+CopyValue=Copier la valeur
+dom.tip.Copy_Value=Copie la valeur de propriété vers le presse-papiers
+Copy_Name=Copier le nom
+dom.tip.Copy_Name=Copie le nom de propriété vers le presse-papiers
+Copy_Path=Copier le chemin
+dom.tip.Copy_Path=Copie le chemin de la propriété
+NewProperty=Nouvelle propriété…
+EditProperty=Éditer la propriété…
+dom.tip.Edit_Property=Édite la valeur de propriété
+EditVariable=Éditer la variable…
+stack.tip.Edit_Variable=Édite la valeur de la variable
+EditWatch=Éditer l\'espion…
+watch.tip.Edit_Watch=Édite la valeur de l'espion
+DeleteProperty=Effacer la propriété
+dom.tip.Delete_Property=Efface la propriété
+DeleteWatch=Supprimer l\'espion
+DeleteAllWatches=Supprime tous les espions
+watch.tip.Delete_Watch=Efface l'expression de l'espion
+watch.tip.Delete_All_Watches=Effacer toutes les expressions des espions
 # Existence and state of a breakpointn\n
 # LOCALIZATION NOTE (a11y.updates.script_suspended_on_line_in_file): Used by a11y. Not directlyn\n
-style.option.label.active=:active
-style.option.tip.active=Display :active pseudo-class styles
+SetBreakpoint=Définir un point d\'arrêt
+script.tip.Set_Breakpoint=Affiche/masque les paramètres d'un point d'arrêt à la ligne actuelle
 # visible in the UI, intended for screen readers.n\n
 # #1 Line number, #2 Function name, #3 File namen\n
 # LOCALIZATION NOTE (a11y.updates.match_found_in_logrows): Used by a11y. Not directlyn\n
+EditBreakpointCondition=Éditer la condition d\'arrêt…
+breakpoints.tip.Edit_Breakpoint_Condition=Édite la condition à laquelle ce point d'arrêt interrompt l'exécution JavaScript
+NoBreakpointsWarning=Il n\'y a aucun point d\'arrêt dans cette page.
 # visible in the UI, intended for screen readers.n\n
-style.option.label.hover=:hover
-style.option.tip.hover=Display :hover pseudo-class styles
 # Describes the match found when performing a console panel search n\n
 # #1 %S String key the use is looking for. #2 number of rows that contain the matched textn\n
+Only_Show_Applied_Styles=Afficher uniquement les styles utilisés
+style.option.tip.Only_Show_Applied_Styles=Affiche uniquement les styles utilisés par l'élément
 # examples: Match found for \"test\" in 17 log rowsn\n
 # LOCALIZATION NOTE (a11y.updates.match_found_for_on_line): Used by a11y. Not directlyn\n
-style.option.label.focus=:focus
-style.option.tip.focus=Display :focus pseudo-class styles
 # visible in the UI, intended for screen readers.n\n
+Show_User_Agent_CSS=Afficher les propriétés CSS par défaut
+style.option.tip.Show_User_Agent_CSS=Affiche également la CSS utilisée par l'agent utilisateur
 # Describes the match found when performing a script panel search n\n
 # #1 %S String key the use is looking for. #2 line number the match was found on. #3 file name the match was found inn\n
-css.label.Inspect_Declaration=Inspect Declaration
-css.tip.Inspect_Declaration= Inspect the declaration of this font
 # examples: Match found for \"window.alert\" on line 322 in utilities.jsn\n
 # LOCALIZATION NOTE (a11y.updates.match_found_in_element): Used by a11y. Not directlyn\n
 # visible in the UI, intended for screen readers.n\n
+computed.option.label.Colors_As_Hex=Couleurs en hexa
+computed.option.tip.Colors_As_Hex=Affiche les couleurs au format hexadécimal
+computed.option.label.Colors_As_RGB=Couleurs en RVB
+computed.option.tip.Colors_As_RGB=Affiche les couleurs au format RVB
+computed.option.label.Colors_As_HSL=Couleurs en HSL
+computed.option.tip.Colors_As_HSL=Affiche les couleurs au format HSL
 # Describes the match found when performing an HTML panel search (if it is found in an element node) n\n
-Expand_Shorthand_Properties=Expand Shorthand Properties
-css.option.tip.Expand_Shorthand_Properties=Expand CSS shorthand properties into their components
 # #1 Search string that was matched. #2 the HTML element name containing the matched string. #3 XPATH string specifying  the matched elementn\n
 # examples: Match found for \"obj\" in object element at /html/body/object[2]n\n
 # LOCALIZATION NOTE (a11y.updates.match_found_in_attribute): Used by a11y. Not directlyn\n
+style.option.label.active=:active
+style.option.tip.active=Affiche les styles de la pseudo-classe :active
 # visible in the UI, intended for screen readers.n\n
-Sort_alphabetically=Sort Alphabetically
-computed.option.tip.Sort_Alphabetically=Sort the styles by their name/group the styles into categories
 # Describes the match found when performing an HTML  panel search (if it is found in an attribute node) n\n
 # #1 Search string that was matched. #2 Attribute name #3 attribute value n\n
 # #4 the HTML element name containing. #5 XPATH string specifying  the matched elementn\n
-Show_Mozilla_specific_styles=Show Mozilla Specific Styles
-computed.option.tip.Show_Mozilla_Specific_Styles=Also show styles prefixed with -moz
+style.option.label.hover=:hover
+style.option.tip.hover=Affiche les styles de la pseudo-classe :hover
 # examples: Match found for \"abindex\" in tabindex=\"0\" in span element at /html/body/span[2]n\n
 # LOCALIZATION NOTE (a11y.updates.match_found_in_text_content): Used by a11y. Not directlyn\n
 # visible in the UI, intended for screen readers.n\n
-computed.No_User-Defined_Styles=This element has no user-defined style rules.
-script.Type_any_key_to_filter_list=Appuyer sur une touche pour filtrer la liste
 # Describes the match found when performing an HTML panel search (if it is found in a text element\'s contents) n\n
+style.option.label.focus=:focus
+style.option.tip.focus=Affiche les styles de la pseudo-classe :focus
 # #1 Search string that was matched. #2 element\'s text content  n\n
 # #3 the HTML element name containing. #4 XPATH string specifying  the matched elementn\n
-LayoutPadding=padding
-LayoutBorder=border
-LayoutMargin=margin
-LayoutPosition=position
-LayoutAdjacent=adjacent
-position=position
 # examples: Match found for \"Firebug Rocks!\" in h2 element at /html/body/h2[2]n\n
+css.label.Inspect_Declaration=Inspecter la déclaration
+css.tip.Inspect_Declaration=Inspecte la déclaration de cette police
 # LOCALIZATION NOTE (a11y.updates.match_found_in_selector): Used by a11y. Not directlyn\n
 # visible in the UI, intended for screen readers.n\n
 # Describes the match found when performing a CSS panel search (if it is found in a selector) n\n
-ShowRulers=Afficher les règles et les guides
-layout.option.tip.Show_Rulers=Show rulers and guides on the page when hovering parts of the layout box
 # #1 Search string that was matched. #2 selector in which the match was found  n\n
-Loading=Chargement…
-Headers=En-têtes
+Expand_Shorthand_Properties=Développer les propriétés raccourcies
+css.option.tip.Expand_Shorthand_Properties=Transforme les propriétés raccourcies en leur composants développés
 # examples: Match found for \"main\" in #mainContent h2 {n\n
 # LOCALIZATION NOTE (a11y.updates.match_found_in_style_property): Used by a11y. Not directlyn\n
-net.tip.Clear=Clear the request list
 # visible in the UI, intended for screen readers.n\n
 # Describes the match found when performing a CSS panel search (if it is found in a style declaration) n\n
-net.header.Reset_Header=Réinitialiser les colonnes
-net.header.tip.Reset_Header=Reset the header display
+Sort_alphabetically=Trier dans l'ordre alphabétique
+computed.option.tip.Sort_Alphabetically=Classe les styles par nom / Groupe les styles par catégorie
 # #1 Search string that was matched. #2 style property in which the match was found #3 selector the style declaration applies to  n\n
 # examples: Match found for background in style declaration background-repeat: \"repeat-x\"; in selector #mainContent {n\n
 # LOCALIZATION NOTE (a11y.updates.match_found_in_dom_property): Used by a11y. Not directlyn\n
+Show_Mozilla_specific_styles=Afficher les styles spécifiques de Mozilla
+computed.option.tip.Show_Mozilla_Specific_Styles=Affiche également les styles préfixés en -moz
 # visible in the UI, intended for screen readers.n\n
 # Describes the match found when performing a DOM panel search  n\n
 # #1 Search string that was matched. #2 DOM property in which the match was found   n\n
-net.header.URL=URL
-net.header.URL_Tooltip=URL demandées et méthodes HTTP utilisées
-net.header.Status=Statut
-net.header.Status_Tooltip=Statut des réponses reçues.
-net.header.Domain=Domaine
-net.header.Domain_Tooltip=Domaine des requêtes effectuées
-net.header.Size=Poids
-net.header.Size_Tooltip=Poids des réponses reçues.
-net.header.Timeline=Chronologie
-net.header.Timeline_Tooltip=Chronologie détaillée des requêtes/réponses
-net.header.Local_IP=Local IP
-net.header.Local_IP_Tooltip=Local IP address and port number to which the request is bound
-net.header.Remote_IP=Remote IP
-net.header.Remote_IP_Tooltip=Remote IP address and port number to which the request is bound
-net.header.Protocol=Protocol
-net.header.Protocol_Tooltip=The URL protocol used to locate the resource on the web
+computed.No_User-Defined_Styles=Cet élément n'a pas de règle de style définie par l'utilisateur.
+script.Type_any_key_to_filter_list=Appuyer sur une touche pour filtrer la liste
 # examples: Match found for \"time\" in _starttime : 1257324992232 (Number)n\n
-net.label.XHR_Breakpoints=Points d\'arrêts XHR
 # LOCALIZATION NOTE (a11y.updates.match_found_in_net_row): Used by a11y. Not directlyn\n
+location.inline=En ligne
 # visible in the UI, intended for screen readers.n\n
-net.label.Break_On_XHR=Arrêter lors des XHR
-net.tip.Break_On_XHR=Stop the JavaScript execution as soon as an XMLHttpRequest is made
 # Describes the match found when performing a Net panel search  n\n
 # #1 Search string that was matched. #2 File name associated to the row in which the match was found. n\n
+location.no_domain=Aucun domaine
 # #3 Column in which the match was found #4. Column value   n\n
-net.headers.view_source=voir le code source
-net.headers.pretty_print=mise en page impression
 # examples: Match found for \"792\" in GET loading_animation.gif, timeline: 792 msn\n
-net.filter.Media=Média
 # LOCALIZATION NOTE (a11y.updates.match_found_in_net_summary_row): Used by a11y. Not directlyn\n
+LayoutPadding=padding
+LayoutBorder=border
+LayoutMargin=margin
+LayoutPosition=position
+LayoutAdjacent=adjacent
+position=position
 # visible in the UI, intended for screen readers.n\n
 # Describes the match found when performing a Net panel search (if it is found in the Net summary row)n\n
-Post=Post
-Put=Put
 # #1 Search string that was matched. #2 Column value in which the match was found n\n
 # examples: Match found for \"05\" in net summary row: 4.05sn\n
+ShowRulers=Afficher les règles et les guides
+layout.option.tip.Show_Rulers=Affiche les règles et guides sur la page lors du survol de parties de la boîte d'agencement
 # LOCALIZATION NOTE (a11y.updates.no_matches_found): Used by a11y. Not directlyn\n
-Response=Réponse
-URLParameters=Paramètres
-Cache=Cache
-HTML=HTML
-jsonviewer.tab.JSON=JSON
-xmlviewer.tab.XML=XML
-svgviewer.tab.SVG=SVG
-fontviewer.General_Info=General Info
-fontviewer.Meta_Data=Meta Data
-fontviewer.view_source=view source
-fontviewer.Preview=Preview
-fontviewer.view_characters=view characters
-fontviewer.pretty_print=pretty print
-fontviewer.view_sample=view sample
-fontviewer.uniqueid=Unique ID
-fontviewer.vendor=Vendor
-fontviewer.license=License
-fontviewer.description=Description
-fontviewer.copyright=Copyright
-fontviewer.credits=Credits
-fontviewer.trademark=Trademark
-fontviewer.licensee=Licensee
-fontviewer.extension=Extension
-fontviewer.pangram=The quick brown fox jumps over the lazy dog
+Loading=Chargement…
+Headers=Entêtes
 # visible in the UI, intended for screen readers.n\n
 # Indicates that the searched string was not matched  n\n
-jsonviewer.sort=Trier par clé
-jsonviewer.do_not_sort=Ne pas trier
+net.tip.Clear=Effacer la liste de requêtes
 # %S Search string that was matched.   n\n
 # examples: No matched found for \"wefkhwefkgwekhjgjh\"n\n
+net.header.Reset_Header=Réinitialiser l'entête
+net.header.tip.Reset_Header=Rétablit l'affichage de l'entête
 # Console messages.n\n
 # LOCALIZATION NOTE (label.Activate_Firebug_for_the_selected_Firefox_tab):n\n
-net.jsonviewer.Copy_JSON=Copy "%S" as JSON
 # If Firebug is displayed in an external window (detached), but not active for then\n
 # currently selected Firefox tab, the following button label is used for ann\n
-RequestHeaders=Requête
-ResponseHeaders=Réponse
-CachedResponseHeaders=Response Headers From Cache
-PostRequestHeaders=Request Headers From Upload Stream
 # activation button.n\n
 # LOCALIZATION NOTE (message.Failed_to_load_source_for, message.The_resource_from_this_URL_is_not_text):n\n
+net.header.URL=URL
+net.header.URL_Tooltip=URL demandées et méthodes HTTP utilisées
+net.header.Status=Statut
+net.header.Status_Tooltip=Statut des réponses reçues.
+net.header.Domain=Domaine
+net.header.Domain_Tooltip=Domaine des requêtes effectuées
+net.header.Size=Poids
+net.header.Size_Tooltip=Poids des réponses reçues.
+net.header.Timeline=Chronologie
+net.header.Timeline_Tooltip=Chronologie détaillée des requêtes/réponses
+net.header.Local_IP=Adresse IP locale
+net.header.Local_IP_Tooltip=Adresse IP locale et numéro de port auxquels la requête est liée
+net.header.Remote_IP=Adresse IP distante
+net.header.Remote_IP_Tooltip=Adresse IP distante et numéro de port auxquels la requête est liée
+net.header.Protocol=Protocole
+net.header.Protocol_Tooltip=Le protocole URL utilisé pour localiser la ressource sur le Web
 # An error message displayed in the Script panel when a source can\'t be displayedn\n
-net.label.ResponseHeadersFromBFCache=The request was resolved directly from the cache, so we have no response from the server. See below for the cached response.
+net.label.XHR_Breakpoints=Points d\'arrêts XHR
 # for specific URL.n\n
 # examples: Failed to load source for: http://www.example.com/script.jsn\n
+net.label.Break_On_XHR=Arrêter lors des XHR
+net.tip.Break_On_XHR=Arrêter l'exécution JavaScript dès qu'une requête XMLHttpRequest est faite
 # examples: The resource from this URL is not text: http://www.example.com/script.jsn\n
 # LOCALIZATION NOTE (firebug.history.Go_back_to_this_script, firebug.history.Go_forward_to_this_script,n\n
 # firebug.history.Stay_on_this_page): Tooltips for menu items in Scipt history popup menu.n\n
-plural.Limit_Exceeded2=Firebug's log limit has been reached. %1$S entry not shown.;Firebug's log limit has been reached. %1$S entries not shown.
-LimitPrefs=Préférences
+net.headers.view_source=voir le code source
+net.headers.pretty_print=mise en page impression
 # LOCALIZATION NOTE (firebug.history.Go_back_one_script, firebug.history.Go_forward_one_script):n\n
 # Tooltips for back/forward buttons on the Script panel toolbar.n\n
 #firebug.dtdn\n
 #editors.dtdn\n
+net.filter.label.All=Tout
+net.filter.tooltip.All=Affiche tous les types MIME
+net.filter.label.HTML=HTML
+net.filter.tooltip.HTML=N'affiche que les fichiers HTML
+net.filter.label.CSS=CSS
+net.filter.tooltip.CSS=N'affiche que les fichiers CSS
+net.filter.label.JS=JavaScript
+net.filter.tooltip.JS=N'affiche que les fichiers JavaScript
+net.filter.label.XHR=XHR
+net.filter.tooltip.XHR=N'affiche que les XMLHttpRequests
+net.filter.label.Images=Images
+net.filter.tooltip.Images=N'affiche que les images
+net.filter.label.Plugins=Plugins
+net.filter.tooltip.Plugins=N'affiche que les fichiers Flash et Silverlight
+net.filter.label.Media=Médias
+net.filter.tooltip.Media=N'affiche que les fichiers audios et vidéos
+net.filter.label.Fonts=Polices
+net.filter.tooltip.Fonts=N'affiche que les polices
+Post=Post
+Put=Put
+Response=Réponse
+URLParameters=Paramètres
+Cache=Cache
+HTML=HTML
+jsonviewer.tab.JSON=JSON
+xmlviewer.tab.XML=XML
+svgviewer.tab.SVG=SVG
+fontviewer.General_Info=Informations générales
+fontviewer.Meta_Data=Métadonnées
+fontviewer.view_source=afficher le code source
+fontviewer.Preview=Aperçu
+fontviewer.view_characters=affichage des caractères
+fontviewer.pretty_print=impression impeccable
+fontviewer.view_sample=afficher un exemple
+fontviewer.uniqueid=ID unique
+fontviewer.vendor=Fournisseur
+fontviewer.license=Licence
+fontviewer.description=Description
+fontviewer.copyright=Copyright
+fontviewer.credits=Crédits
+fontviewer.trademark=Marque déposée
+fontviewer.licensee=Licence
+fontviewer.extension=Extension
+fontviewer.pangram=Portez ce vieux whisky au juge blond qui fume
+jsonviewer.sort=Trier par clé
+jsonviewer.do_not_sort=Ne pas trier
+net.jsonviewer.Copy_JSON=Copier « %S » en JSON
+RequestHeaders=Requête
+ResponseHeaders=Réponse
+CachedResponseHeaders=Entêtes de réponse à partir du cache
+PostRequestHeaders=Entêtes de requête à partir du flux d'envoi
+net.label.ResponseHeadersFromBFCache=La requête a ét résolu directement à partir du cache, nous n'avons donc aucune réponse du serveur. Voyez ci-dessous pour la réponse provenant du cache.
+plural.Limit_Exceeded2=La limite d'inscription dans le journal d'activité Firebug a été atteinte. %1$S entrées non affichées.;La limite d'inscription dans le journal d'activité Firebug a été atteinte. %1$S entrées non affichées..
+LimitPrefs=Préférences
 LimitPrefsTitle=Afin de changer cette limite, modifiez : %S
 Refresh=Actualiser
-panel.tip.Refresh=Refresh the panel display
-# LOCALIZATION NOTE (OpenInTab, firebug.tip.Open_In_Tab): Context menu option of source links,
-# stylesheets and net requests to open the underlying URL in a new browser tab
+panel.tip.Refresh=Actualiser l'affichage du panneau
 OpenInTab=Ouvrir dans un nouvel onglet
-firebug.tip.Open_In_Tab=Open the URL in a new browser tab
+firebug.tip.Open_In_Tab=Ouvrir l'URL dans un nouvel onglet
 Open_Response_In_New_Tab=Ouvrir la réponse dans un nouvel onglet
-net.tip.Open_Response_In_New_Tab=Open the response in a new browser tab
-# LOCALIZATION NOTE (Profile): Caption (verb) for reported profile info.
-# (result of JavaScript profiler tool).
+net.tip.Open_Response_In_New_Tab=Ouvrir la réponse dans un nouvel onglet
 Profile=Profilage
 ProfilerStarted=Le profileur est en cours d\'exécution. Cliquer sur \'Profiler\' à nouveau pour afficher les résultats.
-# LOCALIZATION NOTE (plural.Profile_Time2): Semicolon list of plural forms.
-# Caption for reported profile info (result of JavaScript profiler tool).
-# %1 = Number of milliseconds
-# %2 = Number of calls (plural)
-# example: (56ms, 15 calls)
-plural.Profile_Time2=(%1$Sms, %2$S call);(%1$Sms, %2$S calls)
+ProfilerRequiresTheScriptPanel=Le panneau Script doit être activé pour que le suivi fonctionne.
+plural.Profile_Time2=(%1$Sms, %2$S appel);(%1$Sms, %2$S appels)
 NothingToProfile=Aucune activité à profiler.
 PercentTooltip=Temps d\'exécution de la fonction (en %)
 CallsHeaderTooltip=Nombre d\'appels à la fonction
@@ -629,14 +651,9 @@ TimeHeaderTooltip=Temps d\'exécution de la fonction, appels imbriqués inclus
 AvgHeaderTooltip=Temps moyen, appels de fonction inclus
 MinHeaderTooltip=Temps minimum, appels de fonction inclus
 MaxHeaderTooltip=Temps maximum, appels de fonction inclus
-ProfileButton.Enabled.Tooltip=Profiler le temps d\'exécution du JavaScript.
-ProfileButton.Disabled.Tooltip=Profiler le temps d\'exécution du JavaScript (le panneau \"Script\" doit être activé).
+ProfileButton.Tooltip=Suivre le délai d'exécution JavaScript
 Function=Fonction
 Percent=Pourcentage
-# LOCALIZATION NOTE (Calls, OwnTime, Time, Avg, Min, Max, File): Used in profiler report header
-# (name of a report column). In order to see this, select the Console panel, start profiling
-# by clicking the Profile button and stop it by clicking it again. The report is logged into the
-# Console panel. Make sure Script panel is enabled.
 Calls=Appels
 OwnTime=Temps net
 Time=Temps brut
@@ -644,156 +661,134 @@ Avg=Moy.
 Min=Min.
 Max=Max.
 File=Fichier
-# Support for standard actions.
 Copy=Copier
 Cut=Couper
 Remove=Retirer
-Delete=Delete
-Paste=Paste
-SelectAll=Select All
-html.Copy_Node=Copy %S
-html.tip.Copy_Node=Copy the %S node and all its contents to the clipboard
+Delete=Supprimer
+Paste=Coller
+SelectAll=Tout sélectionner
+html.Copy_Node=Copier %S
+html.tip.Copy_Node=Copier le noeud %S et tout ce qu'il contient vers le presse-papiers
 CopyInnerHTML=Copier le innerHTML
-html.tip.Copy_innerHTML=Copy the contents of the element to the clipboard
+html.tip.Copy_innerHTML=Copier le contenu de l'élément vers le presse-papiers
 CopyXPath=Copier le chemin XPath
-html.tip.Copy_XPath=Copy the element's XPath to the clipboard
+html.tip.Copy_XPath=Copier le WPath de l'élément vers le presse-papiers
 Copy_CSS_Path=Copier le chemin du CSS
-html.tip.Copy_CSS_Path=Copy the element's CSS path to the clipboard
-# LOCALIZATION NOTE (CopyError, console.menu.tip.Copy_Error): Context menu item. Used in the Console
-# panel when clicking an error object.
+html.tip.Copy_CSS_Path=Copier le chemin de la CSS de l'élément vers le presse-papiers
+html.menu.Paste=Coller %S
+html.tip.Paste=Colle comme contenu %S
+html.menu.Paste_Replace_Content=Remplacer le contenu
+html.tip.Paste_Replace_Content=Remplace le contenu du nœud
+html.menu.Paste_Replace_Node=Remplacer le nœud
+html.tip.Paste_Replace_Node=Remplace le HTML du nœud
+html.menu.Paste_AsFirstChild=Comme premier enfant
+html.tip.Paste_AsFirstChild=Colle comme premier enfant du nœud
+html.menu.Paste_AsLastChild=Comme dernier enfant
+html.tip.Paste_AsLastChild=Colle comme dernier enfant du nœud
+html.menu.Paste_Before=Avant
+html.tip.Paste_Before=Colle avant le nœud
+html.menu.Paste_After=Après
+html.tip.Paste_After=Colle après le nœud
+html.menu.Reload_Frame=Actualiser le cadre
+html.menu.tip.Reload_Frame=Recharge le contenu du cadre
 CopyLocation=Copier l\'adresse
-clipboard.tip.Copy_Location=Copy the URL of the object's location to the clipboard
-CopyURLParameters=Copy URL Parameters
-net.tip.Copy_URL_Parameters=Copy URL parameters to the clipboard
-CopyPOSTParameters=Copy POST Parameters
-net.tip.Copy_POST_Parameters=Copy POST parameters to the clipboard
+clipboard.tip.Copy_Location=Copier l'URL localisant l'objet vers le presse-papiers
+CopyURLParameters=Copier les paramètres de l'URL
+net.tip.Copy_URL_Parameters=Copier les paramètres de l'URL vers le presse-papiers
+CopyPOSTParameters=Copier les paramètres POST
+net.tip.Copy_POST_Parameters=Copier les paramètres POST vers le presse-papiers
 CopyLocationParameters=Copier l\'adresse avec les paramètres
-net.tip.Copy_Location_Parameters=Copy the URL incl. the parameters to the clipboard
+net.tip.Copy_Location_Parameters=Copier l'URL avec les paramètres vers le presse-papiers
 CopyRequestHeaders=Copier l\'en-tête de la requête
-net.tip.Copy_Request_Headers=Copy the request headers to the clipboard
+net.tip.Copy_Request_Headers=Copier la requête d'entêtes vers le presse-papiers
 CopyResponseHeaders=Copier l\'en-tête de la réponse
-net.tip.Copy_Response_Headers=Copy the response headers to the clipboard
+net.tip.Copy_Response_Headers=Copier la réponse d'entêtes vers le presse-papiers
 CopyResponse=Copier le corps de la réponse
-net.tip.Copy_Response=Copy the response body to the clipboard
-# LOCALIZATION NOTE (CopyError, console.menu.tip.Copy_Error): Context menu item. Used in the Console
-# panel when clicking an error object.
+net.tip.Copy_Response=Copier le corps de réponse dans le presse-papiers
 CopyError=Copier l\'erreur
-console.menu.tip.Copy_Error=Copy the error information to the clipboard
-# LOCALIZATION NOTE (CopySource, dom.tip.Copy_Source): Context menu item of. Used in the Console
-# panel when clicking an error object.
+console.menu.tip.Copy_Error=Copier l'information d'erreur vers le presse-papiers
 CopySource=Copier la fonction
-dom.tip.Copy_Source=Copy the function's source code to the clipboard
-# LOCALIZATION NOTE (ShowCallsInConsole): Context menu item of a function object inside the
-# DOM panel and Watch side panel.
-# %S = Name of the function
-# example: Log Calls to "getData"
-# example: Log calls to the function "getData" inside the Console panel
+dom.tip.Copy_Source=Copier le code source de la fonction vers le presse-papiers
 ShowCallsInConsole=Journaliser les appels à \"%S\"
-dom.tip.Log_Calls_To_Function=Log calls to the function "%S" inside the Console panel
-# LOCALIZATION NOTE (ShowEventsInConsole, html.tip.Show_Events_In_Console):
-# Menu item label used in HTML elements context menu. Allows logging of event information
-# to the console.
+dom.tip.Log_Calls_To_Function=Inscrire les appels à la fonction « %S » dans le panneau console
 ShowEventsInConsole=Journaliser les événements
-html.tip.Show_Events_In_Console=Log event information to the console
-# LOCALIZATION NOTE (panel.Enabled, panel.tip.Enabled):
-# Option inside the options menu of activatable panels. Enables/Disables the panel.
+html.tip.Show_Events_In_Console=Inscrire les informations d'évènement dans la console
 panel.Enabled=Activé
-panel.tip.Enabled=Toggle the panel activation
-# LOCALIZATION NOTE (panel.tooltip.Show_Command_Line_Popup): Tooltip used for a button on main
-# Firebug toolbar. This button allows to open the Command Line within other panels
-# than the Console panel.
-panel.tooltip.Show_Command_Line_Popup=Show Command Line Popup
-# LOCALIZATION NOTE (console.MethodNotSupported): Message displayed in the Console panel,
-# if a specific method is not supported.
-# %S = Name of the unsupported method
-# example: Firebug console does not support 'bind'
+panel.tip.Enabled=Activer/désactiver le panneau
+panel.tooltip.Show_Command_Line_Popup=Afficher la popup de ligne de commandes
 console.MethodNotSupported=La console de Firebug ne prend pas en charge \'%S\'
-# LOCALIZATION NOTE (commandline.MethodNotSupported): Message displayed in the Console panel,
-# if an unsupported method is entered via the Command Line.
-# %S = Name of the unsupported method
+commandline.errorSourceHeader=EXPRESSION ÉVALUÉE EN UTILISANT LA LIGNE DE COMMANDE FIREBUG SUIVANTE :
+commandline.MethodDisabled=Cette méthode en ligne de commande est temporairement désactivée.
 commandline.MethodNotSupported=La ligne de commande de Firebug ne prend pas en charge \'%S\'
-# LOCALIZATION NOTE (commandline.CurrentWindow): Message displayed in the Console panel when
-# cd(someWindow) is run. A space and a representation of the window object is appended
-# internally by Firebug.
-commandline.CurrentWindow=Current window:
-# LOCALIZATION NOTE (console.Disable_Break_On_All_Errors, console.Break_On_All_Errors):
-# Tooltip for the "Break on... " button used when the Console panel is selected.
+commandline.CurrentWindow=Fenêtre courante :
 console.Disable_Break_On_All_Errors=Désactiver \"Arrêter à chaque erreur\"
 console.Break_On_All_Errors=Arrêter à chaque erreur
-# LOCALIZATION NOTE (console.Break_On_This_Error): Tooltip for the breakpoint besides an error message
-# in the Console panel
 console.Break_On_This_Error=Stopper sur une erreur
-# LOCALIZATION NOTE (console.Use_Arrow_keys,_Tab_or_Enter): Hint at the top of the Completion List Popup
-# in the Command Line
-console.Use_Arrow_keys,_Tab_or_Enter=Use Arrow keys, Tab or Enter
-# LOCALIZATION NOTE (console.JSDisabledInFirefoxPrefs): Hint shown inside the Console panel in the case
-# JavaScript is not available
+console.Use_Arrow_keys,_Tab_or_Enter=Utiliser les touches flèches, tabulation ou entrée
 console.JSDisabledInFirefoxPrefs=Le JavaScript est désactivé dans vos préférences Firefox. Si vous désirez utiliser la console, vous devez activer cette option via \"Outils -> Options… -> Contenu -> Activer JavaScript\"
-# LOCALIZATION NOTE (console.multiHighlightLimitExceeded):
-# Used by the Console panel for arrays. If the user moves the mouse over an array bracket,
-# all elements in the array are highlighted on the page. If there are too many elements
-# in the array, this tooltip is displayed instead.
-# %S = Maximal number of elements to highlight
-# example: There are too many elements in the array to highlight on the page (current limit is 100).
-#          See 'extensions.firebug.multiHighlightLimit' preference.
-console.multiHighlightLimitExceeded=There are too many elements in the array to highlight on the page (current limit is %S).\nSee 'extensions.firebug.multiHighlightLimit' preference.
-# LOCALIZATION NOTE (commandline.disabledForXMLDocs): This message is displayed in the Console panel
-# in cases when the current page is an XML document. The text between <a> and </a> is a link,
-# that causes to switch to HTML rendering of the document.
-commandline.disabledForXMLDocs=Firebug command line is disabled for XML pages. You can <a>switch to HTML</a> to enable it.
-# LOCALIZATION NOTE (net.sizeinfo.Response_Body, net.sizeinfo.Post_Body, net.sizeinfo.Total_Sent,
-# net.sizeinfo.Total_Received, net.sizeinfo.Including_Headers):
-# Labels used for a detailed size info tooltip. The tooltip is displayed, if the mouse hovers over
-# a request size displayed within the Net panel. 'Total Sent' and 'Total Received' info includes
-# sent and received headers size.
+console.ScriptPanelMustBeEnabledForTraces=Le panneau Script doit être activé pour obtenir le suivi de pile. <a>Activer le panneau Script.</a>
+tooltip.multipleFiltersHint=Ctrl+clic pour sélectionner plusieurs filtres
+console.multiHighlightLimitExceeded=Il y a trop d'éléments dans le tableau à mettre en surbrillance sur la page (la limite actuelle est %S).\nVoyez dans l'option de préférences 'extensions.firebug.multiHighlightLimit'.
+commandline.disabledForXMLDocs=L'éditeur en ligne de commande Firebug est désactivé pour les pages XML. Vous pouvez <a>basculer en HTML</a> pour l'activer.
+commandline.Use_in_Command_Line=Utiliser en ligne de commande
+commandline.tip.Use_in_Command_Line=Activer l'invite de commande et rendre cette valeur disponible comme « $p »
+commandline.include.includeSuccess=%S a été inclus correctement.
+commandline.include.aliasNotFound=L'alias « %S » est introuvable.
+commandline.include.loadFail=Le script suivant n'a pu être chargé : %S
+commandline.include.invalidRequestProtocol=Seuls les protocoles HTTP/HTTPS sont pris en charge.
+commandline.include.invalidSyntax=L'inclusion n'a pu être réalisé à cause d'erreurs de syntaxe. Le fichier contient-il vraiment du JavaScript ?
+commandline.include.aliasCreated=L'alias « %S » a été créé.
+commandline.include.aliasRemoved=L'alias « %S » a été supprimé.
+commandline.include.invalidAliasName=Les noms d'alias ne peuvent contenir de « . » ou de « / » ; nom d'alias invalide : « %S ».
+commandline.include.tooLongAliasName=Les noms d'alias ne peuvent contenir plus de 30 caractères ; nom d'alias invalide : « %S ».
+commandline.include.invalidAliasArgumentType=Second argument invalide ; nom d'alias attendu.
+commandline.include.invalidUrlArgumentType=Argument d'url invalide.
+commandline.include.confirmDelete=Souhaitez-vous vraiment supprimer cet alias : « %S » ?
+commandline.include.noDefinedAlias=(aucun alias n'a été défini pour l'instant)
+commandline.tip.Delete_Alias=Supprime l'alias
+commandline.tip.Edit_Alias_Name=Édite le nom de l'alias
+commandline.tip.Edit_Alias_URL=Édite l'URL de l'alias
+commandline.tip.Open_In_Scratchpad=Ouvre le contenu du script dans le bloc-notes
+commandline.tip.Include_Script=Télécharge et exécute le script
+commandline.label.DeleteAlias=Supprimer l'alias
+commandline.label.EditAliasName=Éditer le nom de l'alias
+commandline.label.EditAliasURL=Éditer l'URLL de l'alias
+commandline.label.OpenInScratchpad=Ouvrir dans le bloc-notes
+commandline.label.IncludeScript=Inclure « %S »
+Do_not_show_this_message_again=Ne plus afficher ce message
+scratchpad.loading=En cous de chargement, veuillez patienter…
+scratchpad.failLoading=Erreur lors du chargement du script
 net.sizeinfo.Response_Body=Corps de la réponse
 net.sizeinfo.Post_Body=Corps du POST
 net.sizeinfo.Total_Sent=Total envoyé
 net.sizeinfo.Total_Received=Total reçu
-net.sizeinfo.Including_HTTP_Headers=Including HTTP Headers
+net.sizeinfo.Including_HTTP_Headers=Entêtes HTTP inclus
 net.ActivationMessage=Panneau Réseau activé. Quand le panneau est désactivé, aucune requête n\'est affichée.
 net.responseSizeLimitMessage=La taille de la réponse Firebug est trop importante. Cliquez <a>ici</a> pour ouvrir la réponse complète dans un nouvel onglet Firefox.
-# LOCALIZATION NOTE (net.postDataSizeLimitMessage): A warning message displayed within the Net
-# panel (inside the Post tab of an expanded request entry). The message informs the user that
-# posted data reached Firebug's size limit and only part of it is displayed in the UI.
 net.postDataSizeLimitMessage=La taille maximale possible pour Firebug du contenu d\'un Post a été atteinte.
 net.Break_On_XHR=Arrêt sur XHR
 net.label.Parameters=Paramètres
 net.label.Parts=Parties
 net.label.Source=Source
-# LOCALIZATION NOTE (net.label.Resend): Label for context menu item. Used when clicking
-# on a HTTP request (in the Console or Net panel) to re-send it with the same arguments.
-net.label.Resend=Resend
-net.tip.Resend=Send the request again
-# LOCALIZATION NOTE (net.option.Disable_Browser_Cache, net.option.tip.Disable_Browser_Cache):
-# Net panel option (located in tab's option menu). If set to true, the browser's HTTP cache is disabled
+net.label.Resend=Renvoyer
+net.tip.Resend=Envoyer la requête à nouveau
 net.option.Disable_Browser_Cache=Désactiver la cache de Firefox
-net.option.tip.Disable_Browser_Cache=Disable the browser's HTTP cache
-# LOCALIZATION NOTE (net.option.Show_Paint_Events, net.option.tip.Show_Paint_Events):
-# Net panel option (located in tab's option menu). If set to true, the Net panel displays
-# MozAfterPaint events.
-# See also: http://www.softwareishard.com/blog/firebug/watching-mozafterpaint-in-firebug/
+net.option.tip.Disable_Browser_Cache=Désactiver le cache HTTP du navigateur
 net.option.Show_Paint_Events=Afficher les événements Paint
-net.option.tip.Show_Paint_Events=Show MozAfterPaint events as green lines inside the timeline
-# LOCALIZATION NOTE (net.option.Show_BFCache_Responses, net.option.tip.Show_BFCache_Responses):
-# Net panel option (located in tab's option menu). If set to true, the Net panel also displays responses coming from
-# BFCache (back-forward cache). See also: https://developer.mozilla.org/En/Working_with_BFCache
-net.option.Show_BFCache_Responses=Show BFCache Responses
-net.option.tip.Show_BFCache_Responses=Also show responses from Back-Forward Cache
-# LOCALIZATION NOTE (script.Break_On_Next, script.Disable_Break_On_Next):
-# Tooltip used for the Break On Next button inside panel toolbar of the Script panel.
-# (breaking on next executed JavaScript statement)
+net.option.tip.Show_Paint_Events=Afficher les évènements MozAfterPaint en vert dans la chronologie
+net.option.Show_BFCache_Responses=Afficher les réponses BFCache
+net.option.tip.Show_BFCache_Responses=Afficher aussi les réponses du cache de l'historique de navigation
 script.Break_On_Next=Point d\'arrêt la prochaine fois
-script.Disable_Break_On_Next=Disable Break On Next
+script.Disable_Break_On_Next=Désactiver l'arrêt lors du passage au suivant
 ShowHttpHeaders=Afficher les en-têtes HTTP
-# LOCALIZATION NOTE (plural.Request_Count2): Semicolon list of plural forms.
-# A label used in the Net panel. Displays the number of HTTP requests executed by the current page.
-# %1 = Number of requests
-# example: 21 requests
-plural.Request_Count2=%1$S request;%1$S requests
-FromCache=à partir du cache
+plural.Request_Count2=%1$S requête;%1$S requêtes
+net.summary.from_cache=%S à partir du cache
+net.summary.tip.request_count=Nombre de requêtes
+net.summary.tip.total_size=Taille totale de toutes les requêtes
+net.summary.tip.total_cached_size=Taille totale en cache de toutes les requêtes
+net.summary.tip.total_request_time=Temps total pris pour charger toutes les requêtes et lorsque l'évènement 'onload' se déclenche
 StopLoading=Arrêter le chargement
-net.tip.Stop_Loading=Stop loading the request
+net.tip.Stop_Loading=Arrêter le chargement de la requête
 LargeData=(Données volumineuses)
 ShowComputedStyle=Afficher les styles calculés
 StyleGroup-text=Texte
@@ -802,41 +797,29 @@ StyleGroup-box=Modèle des boîtes
 StyleGroup-layout=Apparence
 StyleGroup-other=Divers
 Dimensions=%S x %S
-# LOCALIZATION NOTE (CopyColor, css.tip.Copy_Color):
-# Context menu item for color values inside the CSS panel.
-# Copies the color value to the clipboard.
 CopyColor=Copier la couleur
-css.tip.Copy_Color=Copy the color to the clipboard
-# LOCALIZATION NOTE (CopyImageLocation, css.tip.Copy_Image_Location,
-# OpenImageInNewTab, css.tip.Open_Image_In_New_Tab):
-# Context menu items for images inside the CSS panel.
-# Allow copying the URL of an image to the clipboard and opening it in a new browser tab
+css.tip.Copy_Color=Copier la couleur vers le presse-papiers
 CopyImageLocation=Copier l\'adresse de l\'image
-css.tip.Copy_Image_Location=Copy the URL of the image to the clipboard
+css.tip.Copy_Image_Location=Copeier l'URL de l'image vers le presse-papiers
 OpenImageInNewTab=Ouvrir l\'image dans un nouvel onglet
-css.tip.Open_Image_In_New_Tab=Open the image in a new browser tab
-# LOCALIZATION NOTE (callstack.option.Omit_Object_Path_Stack, callstack.option.tip.Omit_Object_Path_Stack):
-# Stack side panel option (located in tab's option menu). If set to true,
-# the object path stack won't be displayed.
+css.tip.Open_Image_In_New_Tab=Ouvrir l'image dans un nouvel onglet
 OmitObjectPathStack=Masquer la pile de la barre d\'outils
-callstack.option.tip.Omit_Object_Path_Stack=Do not display the object path stack
-Load_Original_Source=Load Original Source
-css.tip.Load_Original_Source=Discard the changes and load the original CSS
-# LOCALIZATION NOTE (Copy_Rule_Declaration, css.tip.Copy_Rule_Declaration):
-# Menu item label and tooltip used in CSS panel/Style side panel context menu.
-# Allows copying the current CSS rule including all its properties to the clipboard.
+callstack.option.tip.Omit_Object_Path_Stack=Ne pas afficher la pile de chemin de l'objet
+Load_Original_Source=Charger le code source original
+css.tip.Load_Original_Source=Ignorer les modifications et charger la CSS originale
+callstack.option.Show_Arguments=Afficher les arguments
+callstack.option.tip.Show_Arguments=Affiche également les arguments de fonction
 Copy_Rule_Declaration=Copier la déclaration de règle
-css.tip.Copy_Rule_Declaration=Copy the rule including all its properties to the clipboard
-# LOCALIZATION NOTE (Copy_Style_Declaration, css.tip.Copy_Style_Declaration):
-# Menu item label and tooltip used in CSS panel/Style side panel context menu.
-# Allows copying the current CSS rule's properties to the clipboard.
+css.tip.Copy_Rule_Declaration=Copier la règle avec toutes ses propriétés vers le presse-papiers
 Copy_Style_Declaration=Copier le style de la déclaration de règle
-css.tip.Copy_Style_Declaration=Copy the rule's properties to the clipboard
-# LOCALIZATION NOTE (plural.Error_Count2): Semicolon list of plural forms.
-# A label used in for Firebug Start Button. Displays the number of JavaScript errors found by Firebug.
-# %1 = Number of errors
-# example: 111 Errors
-plural.Error_Count2=%1$S Error;%1$S Errors
+css.tip.Copy_Style_Declaration=Copier les propriétés de la règle vers le presse-papiers
+css.label.Copy_Property_Declaration=Copier la déclaration de propriété
+css.tip.Copy_Property_Declaration=Copie la déclaration de propriété vers le presse-papiers
+css.label.Copy_Property_Name=Copier le nom de propriété
+css.tip.Copy_Property_Name=Copie le nom de propriété vers le presse-papiers
+css.label.Copy_Property_Value=Copier la valeur de propriété
+css.tip.Copy_Property_Value=Copie la valeur de la propriété vers le presse-papiers
+plural.Error_Count2=%1$S erreur;%1$S erreurs
 moduleManager.title=Le panneau \"%S\" est désactivé
 moduleManager.desc3=Utilisez le menu contextuel de l\'icône de Firebug dans la barre d\'état pour activer ou désactiver tous les panneaux. Utilisez le menu de l\'onglet du panneau pour les contrôler individuellement.
 moduleManager.Enable=Activer
@@ -846,23 +829,9 @@ Reset_Panels_To_Disabled=Désactiver les panneaux
 Open_Console=Ouvrir la console
 Open_Console_Tooltip=Ouvrir la console.
 Scope_Chain=Série de portées
-# LOCALIZATION NOTE (With_Scope, Call_Scope, Window_Scope):
-# Names of kinds of scopes. Probably best left in English.
-# With: the scope inside of the with(obj) {} statement
 With_Scope=Avec
-# Call: the scope inside of a function eg function foo() { XXX here XXX var f = function() {} };
 Call_Scope=Appel
-# Window: the scope inside of a Javascript window object.
 Window_Scope=Fenêtre
-Logs=Journal
-Options=Options
-Copy_Stack=Copier la pile
-Copy Exception=Copier l\'exception
-# LOCALIZATION NOTE (requestinfo.Blocking, requestinfo.Resolving, requestinfo.Connecting,
-# requestinfo.Sending, requestinfo.Waiting, requestinfo.Receiving, requestinfo.ContentLoad,
-# requestinfo.WindowLoad):
-# Net panel timing info labels. Displayed in a tooltip (aka time-info-tip) when hovering the
-# waterfall graph in the Net panel.
 requestinfo.Blocking=Blocage
 requestinfo.Resolving=Recherche DNS
 requestinfo.Connecting=Connexion
@@ -871,38 +840,29 @@ requestinfo.Waiting=Attente
 requestinfo.Receiving=Réception
 requestinfo.ContentLoad=Événement \'DOMContentLoaded\'
 requestinfo.WindowLoad=Événement \'load\'
-# LOCALIZATION NOTE (requestinfo.started.label, requestinfo.phases.label, requestinfo.timings.label):
-# Labels used within a tooltip (aka time-info-tip) for waterfall graph in the Net panel.
-requestinfo.started.label=Request start time since the beginning
-requestinfo.phases.label=Request phases start and elapsed time relative to the request start:
-requestinfo.timings.label=Event timing relative to the request start:
+requestinfo.started.label=Horaire de lancement de requête depuis le départ
+requestinfo.phases.label=Démarrage des phases de requête et temps écoulé relatifs au lancement de la requête :
+requestinfo.timings.label=Timing de l'évènement relatif au lancement de la requête :
 search.Firebug_Search=Recherche Firebug
-# LOCALIZATION NOTE (search.Next, search.Previous, search.Case_Sensitive, search.Case_Insensitive,
-# search.Multiple_Files, search.Use_Regular_Expression):
-# Labels used within an options menu for the search box. This menu is displayed if the search box is focused.
 search.Next=Suivant
-search.tip.Next=Search for the next match
+search.tip.Next=Rechercher l'occurrence suivante
 search.Previous=Précédent
-search.tip.Previous=Search for the previous match
+search.tip.Previous=Rechercher l'occurrence précédente
 search.Case_Sensitive=Sensible à la casse
-search.tip.Case_Sensitive=Consider the case when searching
-search.Case_Insensitive=Case Insensitive
-search.tip.Case_Insensitive=Ignore the case when searching
+search.tip.Case_Sensitive=Prendre en compte la casse lors de la recherche
+search.Case_Insensitive=Insensible à la casse
+search.tip.Case_Insensitive=Ignorer la casse lors de la recherche
 search.Multiple_Files=Fichiers multiples
-search.tip.Multiple_Files=Search inside all files related to this panel
+search.tip.Multiple_Files=Rechercher dans tous les fichiers liés à ce panneau
 search.Use_Regular_Expression=Utiliser une expression régulière
-search.tip.Use_Regular_Expression=Interpret the entered string as a regular expression when searching
-# LOCALIZATION NOTE (search.html.CSS_Selector, search.net.Headers, search.net.Parameters, search.net.Response_Bodies,
-# search.script.Multiple_Files):
-# Labels used within an options menu for the search box. This menu is displayed if the search box is focused.
-# These labels are specific to a certain panel.
+search.tip.Use_Regular_Expression=Interpréter la chaîne indiquée comme une expression rationnelle lors de la recherche
 search.html.CSS_Selector=Sélecteur CSS
 search.net.Headers=En-têtes
 search.net.Parameters=Paramètres
 search.net.Response_Bodies=Corps de la réponse
-search.net.tip.Response_Bodies=Search also in response bodies
+search.net.tip.Response_Bodies=Rechercher également dans les corps de réponses
 firebug.console.Persist=Persistant
-firebug.console.Do_Not_Clear_On_Reload2=Do not clear the panel on page reload
+firebug.console.Do_Not_Clear_On_Reload2=Ne pas effacer le panneau au rechargement de la page
 firebug.console.Show_All_Log_Entries=Afficher toutes les entrées de log
 firebug.console.Errors=Erreurs
 firebug.console.Filter_by_Errors=Filtrer par erreurs
@@ -912,122 +872,121 @@ firebug.console.Info=Informations
 firebug.console.Filter_by_Info=Filtrer par informations
 firebug.console.Debug_Info=Infos de débogage
 firebug.console.Filter_by_Debug_Info=Filtrer par infos de débogage
-firebug.Deactivate_Firebug=Deactivate Firebug
-firebug.tip.Deactivate_Firebug=Deactivate Firebug for the current website
+firebug.Deactivate_Firebug=Désactiver Firebug
+firebug.tip.Deactivate_Firebug=Désactiver Firebug pour le site courant
+firebug.tip.Toggle_Side_Panels=Affiche/masque les panneaux latéraux
 firebug.ShowFirebug=Ouvrir Firebug
-firebug.menu.tip.Open_Firebug=Show the Firebug UI
-firebug.HideFirebug=Hide Firebug
-firebug.menu.tip.Minimize_Firebug=Minimize Firebug, but keep it active
-firebug.FocusFirebug=Focus Firebug Window
-firebug.menu.tip.Focus_Firebug=Focus Detached Firebug Window
+firebug.menu.tip.Open_Firebug=Afficher l'IU Firebug
+firebug.HideFirebug=Masquer Firebug
+firebug.menu.tip.Minimize_Firebug=Réduire Firebug, mais la laisser active
+firebug.FocusFirebug=Activer la fenêtre Firebug
+firebug.menu.tip.Focus_Firebug=Activer la fenêtre Firebug détachée
 firebug.menu.Enable_All_Panels=Activer tous les panneaux
-firebug.menu.tip.Enable_All_Panels=Enable all activable panels
+firebug.menu.tip.Enable_All_Panels=Activer tous les panneaux activables
 firebug.menu.Disable_All_Panels=Désactiver tous les panneaux
-firebug.menu.tip.Disable_All_Panels=Disable all activable panels
+firebug.menu.tip.Disable_All_Panels=Désactiver tous les panneaux activables
 firebug.menu.Customize_shortcuts=Personnaliser les raccourcis
-firebug.menu.tip.Customize_Shortcuts=Customize Firebug's internal key bindings
+firebug.menu.tip.Customize_Shortcuts=Personnaliser les raccourcis clavier internes de Firebug
 firebug.Options=Options
-firebug.menu.tip.Options=Global Firebug preferences
+firebug.menu.tip.Options=Préférences globales de Firebug
 firebug.menu.Enable_Accessibility_Enhancements=Activer les outils d\'accessibilité
-firebug.menu.tip.Enable_Accessibility_Enhancements=Enable full control via keyboard and other accessibility enhancements
-firebug.menu.Activate_Same_Origin_URLs2=Activate For Same Origin URLs
-firebug.menu.tip.Activate_Same_Origin_URLs=Activate Firebug for URLs matching the same origin policy
+firebug.menu.tip.Enable_Accessibility_Enhancements=Activer le contrôle complet via clavier et d'autres améliorations d'accessibilité
+firebug.menu.Activate_Same_Origin_URLs2=Activer pour les URL de la même origine
+firebug.menu.tip.Activate_Same_Origin_URLs=Activer Firebug pour toutes les URL respectant la même règle d'origine
 firebug.menu.Reset_All_Firebug_Options=Réinitialiser toutes les options de Firebug
-firebug.menu.tip.Reset_All_Firebug_Options=Reset all Firebug preferences to their default values
+firebug.menu.tip.Reset_All_Firebug_Options=Réinitialiser toutes les préférences de Firebug aux valeurs par défaut
 firebug.menu.Firebug_Online=Firebug en ligne
-firebug.menu.tip.Firebug_Online=Websites related to Firebug
-firebug.menu.Extensions=Firebug Extensions...
-firebug.menu.tip.Extensions=Download and Install Firebug Extensions
-firebug.menu.Vertical_Panels=Vertical Panels
-firebug.menu.tip.Vertical_Panels=Toggle the layout of the Firebug main and side panels
-firebug.menu.Show_Info_Tips=Show Info Tips
-firebug.menu.tip.Show_Info_Tips=Show popups with information about the hovered element
-firebug.Show_Error_Count=Show Error Count
-firebug.menu.tip.Show_Error_Count=Show the number of errors logged inside the console
+firebug.menu.tip.Firebug_Online=Sites Web traitant de Firebug
+firebug.menu.Extensions=Extensions Firebug…
+firebug.menu.tip.Extensions=Télécharger et installer des extensions Firebug
+firebug.menu.Vertical_Panels=Panneaux verticaux
+firebug.menu.tip.Vertical_Panels=Modifier l'affichage des panneaux principaux et latéraux de Firebug
+firebug.menu.Show_Info_Tips=Afficher les astuces
+firebug.menu.tip.Show_Info_Tips=Affiche les fenêtres popup contenant des informations sur l'élément survolé
+firebug.Show_Error_Count=Afficher le nombre d'erreurs
+firebug.menu.tip.Show_Error_Count=Afficher le nombre d'erreurs affichées dans la console
 firebug.TextSize=Taille du texte
-firebug.menu.tip.Text_Size=Change the text size used in Firebug
+firebug.menu.tip.Text_Size=Modifier la taille de police utilisée dans Firebug
 firebug.IncreaseTextSize=Plus grande
-firebug.menu.tip.Increase_Text_Size=Increase the text sizes used in Firebug
+firebug.menu.tip.Increase_Text_Size=Augmenter la taille de la police utilisée dans Firebug
 firebug.DecreaseTextSize=Plus petite
-firebug.menu.tip.Decrease_Text_Size=Decrease the text sizes used in Firebug
+firebug.menu.tip.Decrease_Text_Size=Diminuer la taille de texte utilisée dans Firebug
 firebug.NormalTextSize=Normale
-firebug.menu.tip.Normal_Text_Size=Reset the text size used in Firebug to the default
+firebug.menu.tip.Normal_Text_Size=Réinitialiser la taille de texte utilisée dans Firebug à la valeur par défaut
 firebug.Website=Site Web de Firebug…
-firebug.menu.tip.Website=Open the official Firebug website
-firebug.help=Help...
-firebug.menu.tip.help=Open the page with links to pages explaining Firebug
+firebug.menu.tip.Website=Se rendre au site officiel de Firebug
+firebug.help=Aide…
+firebug.menu.tip.help=Liens pointant vers des pages expliquant Firebug
 firebug.Documentation=Documentation…
-firebug.menu.tip.Documentation=Open the documentation about Firebug
+firebug.menu.tip.Documentation=Documentation à propos de Firebug
 firebug.KeyShortcuts=Raccourcis clavier…
-firebug.menu.tip.Key_Shortcuts=Open the list of mouse and keyboard shortcuts available in Firebug
+firebug.menu.tip.Key_Shortcuts=Liste des raccourcis clavier disponibles dans Firebug
 firebug.Forums=Groupe de discussion…
-firebug.menu.tip.Forums=Open the discussion group site
+firebug.menu.tip.Forums=Le groupe de discussion
 firebug.Issues=Suivi de bogues…
-firebug.menu.tip.Issues=Open the issue tracker site
+firebug.menu.tip.Issues=Système de suivi des problèmes
 firebug.Donate=Faire un don…
-firebug.menu.tip.Donate=Open the contribution site
+firebug.menu.tip.Donate=Site de contribution
 firebug.About=À propos…
-firebug.menu.tip.About=Information about Firebug
-ProfileJavaScript=Profile JavaScript
-firebug.menu.tip.Profile_JavaScript=Profile JavaScript execution time
+firebug.menu.tip.About=Information à propos de Firebug
+ProfileJavaScript=Profiler JavaScript
+firebug.menu.tip.Profile_JavaScript=Profiler le temps d'exécution JavaScript
 firebug.Search=Rechercher
-firebug.menu.tip.Search=Set focus to the search field
-# Firebug shortcuts
+firebug.menu.tip.Search=Activer le champ de recherche
 firebug.shortcut.reenterCommand.label=Entrer la commande à nouveau
-firebug.shortcut.tip.reenterCommand=Re-enter the last command into the Command Line
+firebug.shortcut.tip.reenterCommand=Resaisir la dernière commande dans l'éditeur de ligne de commande
 firebug.shortcut.toggleInspecting.label=Inspecter
-firebug.shortcut.tip.toggleInspecting=Enable/disable the Inspector
+firebug.shortcut.tip.toggleInspecting=Activer/désactiver l'inspecteur
 firebug.shortcut.toggleQuickInfoBox.label=Afficher/Masquer la boîte info
-firebug.shortcut.tip.toggleQuickInfoBox=Enable/disable the display of a panel with information about the currently inspected element
+firebug.shortcut.tip.toggleQuickInfoBox=Activer/désactiver l'affichage d'un panneau contenant les informations sur l'élément inspecté actuellement
 firebug.shortcut.toggleProfiling.label=Activer/désactiver le profilage
-firebug.shortcut.tip.toggleProfiling=Enable/disable the JavaScript Profiler
+firebug.shortcut.tip.toggleProfiling=Active/désactive le profileur JavaScript
 firebug.shortcut.focusCommandLine.label=Activer la ligne de commande
-firebug.shortcut.tip.focusCommandLine=Open Firebug and set the focus to the Command Line / toggle the Command Line Popup
+firebug.shortcut.tip.focusCommandLine=Ouvre Firebug et active l'éditeur de ligne de commande/affiche/masque l'éditeur de ligne de commande
 firebug.shortcut.focusFirebugSearch.label=Activer la recherche Firebug
-firebug.shortcut.tip.focusFirebugSearch=Set the focus to the search field
+firebug.shortcut.tip.focusFirebugSearch=Active le champ de recherche
 firebug.shortcut.focusWatchEditor.label=Activer l\'éditeur d\'espions
-firebug.shortcut.tip.focusWatchEditor=Switch to the Script panel and set the focus to the field for entering a new watch expression
+firebug.shortcut.tip.focusWatchEditor=Bascule vers le panneau script et active le champ pour indiquer une nouvelle expression à observer
 firebug.shortcut.focusLocation.label=Activer l\'adresse
-firebug.shortcut.tip.focusLocation=Open the Location Menu
+firebug.shortcut.tip.focusLocation=Ouvre le menu d'emplacement
 firebug.shortcut.nextObject.label=Objet suivant
-firebug.shortcut.tip.nextObject=Select the next object in the element path of a panel
+firebug.shortcut.tip.nextObject=Sélectionne l'objet suivant dans le chemin d'élément d'un panneau
 firebug.shortcut.previousObject.label=Objet précédent
-firebug.shortcut.tip.previousObject=Select the previous object in the element path of a panel
+firebug.shortcut.tip.previousObject=Sélectionne l'objet précédent dans le chemin d'élément d'un panneau
 firebug.shortcut.customizeFBKeys.label=Personnaliser les raccourcis Firebug
-firebug.shortcut.tip.customizeFBKeys=Open the Firebug Shortcut Bindings dialog
+firebug.shortcut.tip.customizeFBKeys=Ouvre la boîte de dialogue des raccourcis clavier de Firebug
 firebug.shortcut.detachFirebug.label=Ouvrir Firebug dans une nouvelle fenêtre
-firebug.shortcut.tip.detachFirebug=Detach Firebug into its own window
+firebug.shortcut.tip.detachFirebug=Détache la fenêtre Firebug
 firebug.shortcut.leftFirebugTab.label=Passer au panneau de gauche
-firebug.shortcut.tip.leftFirebugTab=Switch to the Firebug panel to the left
+firebug.shortcut.tip.leftFirebugTab=Place le panneau Firebug à gauche
 firebug.shortcut.rightFirebugTab.label=Passer au panneau de droite
-firebug.shortcut.tip.rightFirebugTab=Switch to the Firebug panel to the right
+firebug.shortcut.tip.rightFirebugTab=Place le panneau Firebug à droite
 firebug.shortcut.toggleFirebug.label=Ouvrir Firebug
-firebug.shortcut.tip.toggleFirebug=Open/Minimize Firebug UI
-firebug.shortcut.closeFirebug.label=Deactivate Firebug
-firebug.shortcut.tip.closeFirebug=Deactivate Firebug for the current website
+firebug.shortcut.tip.toggleFirebug=Ouvre/réduit l'IU Firebug
+firebug.shortcut.closeFirebug.label=Désactiver Firebug
+firebug.shortcut.tip.closeFirebug=Désactive Firebug pour le site courant
 firebug.shortcut.previousFirebugTab.label=Onglet Firebug précédent
-firebug.shortcut.tip.previousFirebugTab=Switch to the previously selected Firebug panel
+firebug.shortcut.tip.previousFirebugTab=Bascule vers le panneau Firebug sélectionné précédemment
 firebug.shortcut.clearConsole.label=Effacer la console
-firebug.shortcut.tip.clearConsole=Remove all logs from the console
+firebug.shortcut.tip.clearConsole=Supprime toutes les lignes de la console
 firebug.shortcut.openTraceConsole.label=Ouvrir la console de traces
-firebug.shortcut.tip.openTraceConsole=Open the FBTrace Console
+firebug.shortcut.tip.openTraceConsole=Ouvre la console FBTrace
 firebug.shortcut.navBack.label=En arrière
-firebug.shortcut.tip.navBack=Switch to the previous panel or location list item of the navigation history
+firebug.shortcut.tip.navBack=Bascule vers le panneau précédent ou la liste d'éléments de l'historique de navigation
 firebug.shortcut.navForward.label=En avant
-firebug.shortcut.tip.navForward=Switch to the next panel or location list item of the navigation history
-firebug.shortcut.increaseTextSize.label=Increase Text Size
-firebug.shortcut.tip.increaseTextSize=Increase the text sizes used in Firebug
-firebug.shortcut.decreaseTextSize.label=Decrease Text Size
-firebug.shortcut.tip.decreaseTextSize=Decrease the text sizes used in Firebug
-firebug.shortcut.normalTextSize.label=Normal Text Size
-firebug.shortcut.tip.normalTextSize=Reset the text sizes used in Firebug to the default
-firebug.shortcut.help.label=Open help
-firebug.shortcut.tip.help=Open the page answering the frequently asked questions
-firebug.shortcut.toggleBreakOn.label=Toggle Break On ...
-firebug.shortcut.tip.toggleBreakOn=Enable/disable stopping the script execution on specific events occurring inside a panel
+firebug.shortcut.tip.navForward=Bascule vers le panneau suivant ou la liste d'éléments de l'historique de navigation
+firebug.shortcut.increaseTextSize.label=Augmenter la taille du texte
+firebug.shortcut.tip.increaseTextSize=Augmente la taille du texte utilisé dans Firebug
+firebug.shortcut.decreaseTextSize.label=Diminuer la taille du texte
+firebug.shortcut.tip.decreaseTextSize=Diminue la taille du texte utilisé dans Firebug
+firebug.shortcut.normalTextSize.label=Taille de texte normale
+firebug.shortcut.tip.normalTextSize=Réinitialise la taille du texte utilisé dans Firebug à la valeur par défaut
+firebug.shortcut.help.label=Aide
+firebug.shortcut.tip.help=FAQ
+firebug.shortcut.toggleBreakOn.label=Activer/désactiver l'arrêt lors de …
+firebug.shortcut.tip.toggleBreakOn=Active/désactive la possibilité d'arrêter l'exécution d'un script lors d'évènements spécifiques survenant dans un panneau
 firebug.panel_selector=Choix du panneau
 customizeShortcuts=Raccourcis clavier Firebug
-# A11y Chrome Labels (not visible, spoken by screen readers)
 a11y.labels.panel_tools=panneau outils
 a11y.labels.firebug_panels=panneaux Firebug
 a11y.labels.firebug_side_panels=panneaux latéraux Firebug
@@ -1036,7 +995,6 @@ a11y.labels.firebug_status=État Firebug
 a11y.labels.reset=réinitialiser
 a11y.labels.reset_shortcut=réinitialiser le raccourci %S
 aria.labels.inactive_panel=panneau inactif
-# A11y panelNode labels (not visible, spoken by screen readers)
 a11y.labels.log_rows=lignes de journalisation
 a11y.labels.call_stack=Pile d\'appel
 a11y.labels.document_structure=structure du document
@@ -1044,7 +1002,6 @@ a11y.labels.title_panel=panneau %S
 a11y.labels.title_side_panel=panneau latéral %S
 a11y.labels.cached=en cache
 aria.labels.stack_trace=pile d\'appel
-# A11y Domplate labels (not visible, spoken by screen readers)
 a11y.layout.padding=padding
 a11y.layout.border=border
 a11y.layout.margin=margin
@@ -1073,16 +1030,13 @@ a11y.layout.width=width
 a11y.layout.height=height
 a11y.layout.size=size
 a11y.layout.z-index=z-index
-a11y.layout.box-sizing=box-sizing
+a11y.layout.box-sizing=Taille de boîtes
 a11y.layout.clientBoundingRect=bounding client rect
 a11y.descriptions.press_enter_to_edit_values=Appuyer sur Entrée puis la touche Tab pour éditer les valeurs
 a11y.labels.style_rules=règles de style
 aria.labels.inherited_style_rules=styles hérités
 a11y.labels.computed_styles=styles calculés
 a11y.labels.dom_properties=propriétés DOM
-# LOCALIZATION NOTE:
-# Used by a11y. Not directly visible in the UI, intended for screen readers.
-# Describe contents of inline editor fields
 a11y.labels.inline_editor=éditeur intégré
 a11y.labels.value_for_attribute_in_element=valeur de l\'attribut %S de l\'élément %S
 a11y.labels.attribute_for_element=attribut de l\'élément %S
@@ -1094,205 +1048,88 @@ a11y.labels.value_property_in_selector=valeur de la propriété %S du sélecteur
 a11y.labels.css_selector=sélecteur CSS
 a11y.labels.source_code_for_file=code source du fichier %S
 a11y.labels.press_enter_to_add_new_watch_expression=entrée pour ajouter une nouvelle expression espion
-# LOCALIZATION NOTE (a11y.labels.overridden):
-# Used by a11y. Not directly visible in the UI, intended for screen readers.
-# Indicates, that a style property is overridden by selector with higher specificity
 a11y.labels.overridden=substitué
-# LOCALIZATION NOTE (a11y.hasConditionalBreakpoint, a11y.hasDisabledBreakpoint):
-# Used by a11y. Not directly visible in the UI, intended for screen readers.
-# Existence and state of a breakpoint
 a11y.updates.has_conditional_break_point=contient un point d\'arrêt conditionnel
 a11y.updates.has_disabled_break_point=contient un point d\'arrêt désactivé
-# LOCALIZATION NOTE (a11y.updates.script_suspended_on_line_in_file): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# first %S = Line number, second %S = Function name, third %S = File name
 a11y.updates.script_suspended_on_line_in_file=script suspendu à la ligne %S dans %S, fichier %S
-# LOCALIZATION NOTE (a11y.updates.match_found_in_logrows): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing a console panel search
-# first %S = String key the user is looking for, second %S = Number of rows that contain the matched text
-# examples: Match found for "test" in 17 log rows
 a11y.updates.match_found_in_logrows=correspondance trouvée pour %S dans %S lignes
-# LOCALIZATION NOTE (a11y.updates.match_found_for_on_line): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing a script panel search
-# first %S = String key the user is looking for, second $S = Line number the match was found on, third %S = File name the match was found in
-# examples: Match found for "window.alert" on line 322 in utilities.js
 a11y.updates.match_found_for_on_line=correspondance trouvée pour %S dans la ligne %S de %S
-# LOCALIZATION NOTE (a11y.updates.match_found_in_element): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing an HTML panel search (if it is found in an element node)
-# first %S = Matched search string, second %S = HTML element name containing the matched string, third %S = XPATH string specifying the matched element
-# example: Match found for "obj" in object element at /html/body/object[2]
 a11y.updates.match_found_in_element=correspondance trouvée pour %S dans l\'élément %S au chemin %S
-# LOCALIZATION NOTE (a11y.updates.match_found_in_attribute): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing an HTML  panel search (if it is found in an attribute node)
-# first %S = Search string that was matched, second %S = Attribute name, third %S = Attribute value,
-# fourth %S = HTML element name containing, fifth %S = XPATH string specifying  the matched element
-# example: Match found for "abindex" in tabindex="0" in span element at /html/body/span[2]
 a11y.updates.match_found_in_attribute=correspondance trouvée pour %S dans l\'attribut %S=%S de l\'élément %S au chemin %S
-# LOCALIZATION NOTE (a11y.updates.match_found_in_text_content): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing an HTML panel search (if it is found in a text element's contents)
-# first %S = Matched search string, second %S = Element's text content,
-# third %S = HTML element name containing, fourth %S = XPATH string specifying  the matched element
-# example: Match found for "Firebug Rocks!" in h2 element at /html/body/h2[2]
 a11y.updates.match_found_in_text_content=correspondance trouvée pour %S dans le contenu texte: %S de l\'élément %S au chemin %S
-# LOCALIZATION NOTE (a11y.updates.match_found_in_selector): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing a CSS panel search (if it is found in a selector)
-# first %S = Matched search string, second %S = Selector, in which the match was found
-# example: Match found for "main" in #mainContent h2 {
 a11y.updates.match_found_in_selector=correspondance trouvée pour %S dans le sélecteur %S
-# LOCALIZATION NOTE (a11y.updates.match_found_in_style_property): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing a CSS panel search (if it is found in a style declaration)
-# first %S = Matched search string, second %S = Style property, in which the match was found
-# third %S = Selector the style declaration applies to
-# example: Match found for background in style declaration background-repeat: "repeat-x"; in selector #mainContent {
 a11y.updates.match_found_in_style_declaration=correspondance trouvée pour \"%S\" dans la déclaration de style %S du sélecteur %S
-# LOCALIZATION NOTE (a11y.updates.match_found_in_dom_property): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing a DOM panel search
-# first %S = Matched search string, second %S = DOM property, in which the match was found
-# examples: Match found for "time" in DOM property _starttime
 a11y.updates.match_found_in_dom_property=correspondance trouvée pour %S dans la propriété DOM %S
-# LOCALIZATION NOTE (a11y.updates.match_found_in_net_row): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing a Net panel search
-# first %S = Matched search string, second %S = File name associated to the row, in which the match was found,
-# third %S = Column, in which the match was found, fourth %S = Column value
-# examples: Match found for "792" in GET loading_animation.gif, timeline: 792 ms
 a11y.updates.match_found_in_net_row=correspondance trouvée pour \"%S\" dans %S, %S : %S;
-# LOCALIZATION NOTE (a11y.updates.match_found_in_net_summary_row): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Describes the match found when performing a Net panel search (if it is found in the Net summary row)
-# first %S = Matched search string, second %S = Column value, in which the match was found
-# examples: Match found for "05" in net summary row: 4.05s
 a11y.updates.match_found_in_net_summary_row=correspondance trouvée pour %S dans la ligne du rapport du réseau: %S
-# LOCALIZATION NOTE (a11y.updates.no_matches_found): Used by a11y. Not directly
-# visible in the UI, intended for screen readers.
-# Indicates that the searched string was not matched
-# %S = Search string
-# examples: No matched found for "wefkhwefkgwekhjgjh"
 a11y.updates.no_matches_found=aucune correspondance trouvée pour \"%S\"
-# LOCALIZATION NOTE (confirmation.Reset_All_Firebug_Options):
-# Text in the confirmation dialog shown when the options should be reset
 confirmation.Reset_All_Firebug_Options=Voulez-vous vraiment réinitialiser toutes les options de Firebug ?
-# LOCALIZATION NOTE (confirmation.Edit_CSS_Source):
-# If the user has changed the CSS and clicks on the Source Edit button, a confirmation dialog is
-# displayed containing the following message
-confirmation.Edit_CSS_Source=Your existing CSS edits will be discarded.\nAre you sure you want to edit the source?
-# Console messages
+confirmation.Edit_CSS_Source=Les modifications de votre CSS vont être ignorées.\nSouhaitez-vous vraiment éditer le code source ?
 warning.Console_must_be_enabled=La console doit être activée
 warning.Command_line_blocked?=Ligne de commande bloquée ?
-warning.dollar_change=The console command line function $() has changed meaning from $=getElementById(id) to $=querySelector(selector). You might try $("#%S") instead.
+warning.dollar_change=La fonction $() de la console en ligne de commande a modifié le sens de $=getElementById(id) en $=querySelector(selector). Vous pouvez essayer à la place $("#%S").
 message.Reload_to_activate_window_console=Actualiser pour activer la console
-# LOCALIZATION NOTE (message.sourceNotAvailableFor, message.The_resource_from_this_URL_is_not_text):
-# An error message displayed in the Script panel when a source can't be displayed
-# for specific URL.
-# examples: Reload the page to get source for: http://www.example.com/script.js
-# examples: The resource from this URL is not text: http://www.example.com/script.js
-message.sourceNotAvailableFor=Reload the page to get source for
+message.sourceNotAvailableFor=Recharger la page pour obtenir le code source pour
 message.The_resource_from_this_URL_is_not_text=La ressource associée à cette URL n\'est pas du texte
-# LOCALIZATION NOTE (firebug.history.Go_back_to_this_script, firebug.history.Go_forward_to_this_script,
-# firebug.history.Stay_on_this_page): Tooltips for menu items in the history popup menu.
 firebug.history.Go_back_to_this_panel=Revenir à ce panneau
 firebug.history.Stay_on_this_panel=Rester sur ce panneau
 firebug.history.Go_forward_to_this_panel=Avancer vers ce panneau
-# LOCALIZATION NOTE (firebug.history.Go_back_one_script, firebug.history.Go_forward_one_script):
-# Tooltips for back/forward buttons on the Script panel toolbar.
 firebug.history.Go_back=Reculer
 firebug.history.Go_forward=Avancer
-# LOCALIZATION NOTE (script.warning.inactive_during_page_load, script.suggestion.inactive_during_page_load):
-# Message displayed in the Script panel, if the debugger is inactive during page load.
-# The suggestion message represents an advice how to solve the problem. It contains a link enclosed in <a> and </a>
-# to reload the sources
 script.warning.inactive_during_page_load=Le panneau de script était inactif pendant le chargement de la page
-script.suggestion.inactive_during_page_load2=<a>Reload</a> to see all sources
-# LOCALIZATION NOTE (script.warning.javascript_not_enabled, script.suggestion.javascript_not_enabled):
-# This message is displayed within the Script panel if javascript is not enabled.
-# The suggestion message represents an advice how to solve the problem.
+script.suggestion.inactive_during_page_load2=<a>Recharger</a> pour voir tous les codes sources
 script.warning.javascript_not_enabled=JavaScript n\'est pas activé
 script.suggestion.javascript_not_enabled=Voir Firefox > Outils > Options > Contenu > Activer Javascript
-# LOCALIZATION NOTE (script.button.enable_javascript): Title for a link, that is displayed on
-# the Script panel, if Javascript is disabled. This link allows to enable it.
 script.button.enable_javascript=Activer JavaScript et actualiser
-# LOCALIZATION NOTE (script.warning.all_scripts_filtered, script.suggestion.all_scripts_filtered):
-# Message displayed in the Script panel, if no JavaScripts are available for the current page.
-# The suggestion message represents an advice how to solve the problem.
 script.warning.all_scripts_filtered=Tous les scripts ont été filtrés
 script.suggestion.all_scripts_filtered=Afficher les paramètres de filtrage de scripts dans la barre d\'outils ou « Afficher les options de sources du chrome »
-# LOCALIZATION NOTE (script.warning.no_system_source_debugging, script.suggestion.no_system_source_debugging):
-# Message displayed in the Script panel, if the page opened is accessed via a chrome URL.
-# The suggestion message represents an advice how to solve the problem.
-script.warning.no_system_source_debugging=System sources can't be debugged
-script.suggestion.no_system_source_debugging=Firebug currently can't be used to debug user agent internal files. See <a>issue 5110</a> for the reason.
-# LOCALIZATION NOTE (script.warning.debugger_active, script.suggestion.debugger_active):
-# Message displayed in the Script panel, if the page doesn't include any JavaScript.
-# The suggestion message represents an advice how to solve the problem.
+script.warning.no_system_source_debugging=Le code source du système n epeut être débogué
+script.suggestion.no_system_source_debugging=Firebug ne peut être utilisé pour déboguer les fichiers internes de l'agent utilisateur. Voyez le <a>problème 5110</a> pour connaître la raison.
 script.warning.no_javascript=Pas de JavaScript sur cette page
-script.suggestion.no_javascript2=If <script> tags have a "type" attribute, it should equal "text/javascript" or "application/javascript". Also scripts must be parsable (syntactically correct).
-# LOCALIZATION NOTE (script.warning.debugger_active, script.suggestion.debugger_active):
-# Message displayed in the Script panel, if the page is opened in different tabs/windows and
-# the debugger is already halted at a breakpoint inside another tab/window.
-# The suggestion message represents an advice how to solve the problem.
+script.suggestion.no_javascript2=Si les balises <script>ont un attibut "type", il devrait ressembler à "text/javascript" ou "application/javascript". De plus, les scripts doivent être analysables (syntaxiquement corrects).
 script.warning.debugger_active=Le débogueur est déjà activé
 script.suggestion.debugger_active=Le débogueur est en ce moment arrêté sur un point d\'arrêt d\'une autre page.
 script.button.Go_to_that_page=Aller à cette page
-script.warning.debugger_not_activated=Debugger not activated
-script.suggestion.debugger_not_activated=Debugger not activated
-# firebug.dtd
+script.warning.debugger_not_activated=Le débogueur n'est pas activé
+script.suggestion.debugger_not_activated=Le débogueur n'est pas activé
+script.Script_panel_must_be_enabled=%S (le panneau Script doit être activé)
 firebug.Firebug=Firebug
 firebug.Close=Fermer
 firebug.View=Affichage
 firebug.Help=Aide
 firebug.Run=Exécuter
 firebug.Copy=Copier
-firebug.History=History
-firebug.Run_the_entered_command=Run the entered command
-firebug.Clear_the_Command_Editor=Clear the Command Editor
-firebug.Copy_the_script_as_a_bookmarklet=Copy the script as a bookmarklet
-firebug.Insert_a_previously_entered_command=Insert a previously entered command
+firebug.History=Historique
+firebug.Run_the_entered_command=Lancer la commande indiquée
+firebug.Clear_the_Command_Editor=Effacer l'éditeur de commandes
+firebug.Copy_the_script_as_a_bookmarklet=Copier le script comme un bookmarklet
+firebug.Insert_a_previously_entered_command=Insérer une commande précédemment saisie
 firebug.AlwaysOpenInWindow=Toujours ouvrir dans une nouvelle fenêtre
 firebug.OpenWith=Ouvrir avec l\\\'éditeur
-firebug.menu.tip.Open_With=Open the content in an external editor
+firebug.menu.tip.Open_With=Ouvrir le contenu dans un éditeur externe
 firebug.Permissions=Sites…
-firebug.Configure_Editors=Configure Editors
-script.tip.Script_Type=Filter on script type
-script.tip.Script_Filter_Static=Just display scripts loaded together with the page
-script.tip.Script_Filter_Evals=Display scripts loaded together with the page and scripts created via eval()
-script.tip.Script_Filter_Events=Display scripts loaded together with the page, scripts created via eval() and event listeners
-script.tip.Script_Filter_All=Display all kinds of scripts
-# LOCALIZATION NOTE (firebug.labelWithShortcut):
-# Label for an item incl. assigned keyboard shortcut
-# example: Continue (F8)
-# example: Step Out (Shift+F11)
+firebug.Configure_Editors=Configurer les éditeurs
+script.tip.Script_Type=Filtrer par type de script
+script.tip.Script_Filter_Static=N'afficher que les scripts chargés en même temps que la page
+script.tip.Script_Filter_Evals=Affiche les scripts chargés en même temps que la page et les scripts créés via eval()
+script.tip.Script_Filter_Events=Affiche les scripts chargés en même temps que la page, les scripts créé via eval() et les event listeners
+script.tip.Script_Filter_All=Afficher tous type de scripts
 firebug.labelWithShortcut=%S (%S)
-# LOCALIZATION NOTE (firebug.Rerun, script.tip.Rerun, firebug.Continue, script.tip.Continue,
-# firebug.StepOver, script.tip.Step_Over, firebug.StepInto, script.tip.Step_Into,
-# firebug.StepOut, script.tip.Step_Out, firebug.RunUntil, script.tip.Run_Until):
-# Labels used for debugger options available in the Script panel.
-script.Rerun=Rerun
-script.tip.Rerun=Rerun the current function call stack
-script.Continue=Continue
-script.tip.Continue=Continue the JavaScript execution
-script.Step_Over=Step Over
-script.tip.Step_Over=Execute the next command
-script.Step_Into=Step Into
-script.tip.Step_Into=Execute the next command and jump into functions
-script.Step_Out=Step Out
-script.tip.Step_Out=Execute the rest of the function's body and returns to its caller
-firebug.RunUntil=Run to This Line
-script.tip.Run_Until=Execute the JavaScript until the specified line
-# LOCALIZATION NOTE (firebug.Inspect, firebug.InspectElement, firebug.InspectElementWithFirebug)
-# Labels for Firebug Inspector. Used by a button (available in Firefox Customize Toolbar dialog)
-# and also page context menu. As soon as built-in inspector is having its own "Inspect Element"
-# Firebug should start using "Inspect Element with Firebug" to distinguish itself.
+script.Rerun=Relancer
+script.tip.Rerun=Relance a fonction de pile d'exécution courante
+script.Continue=Continuer
+script.tip.Continue=Poursuivre l'exécution JavaScript
+script.Step_Over=Passer
+script.tip.Step_Over=Exécute la commande suivante
+script.Step_Into=Lancer la suivante
+script.tip.Step_Into=Exécute la commande suivante et bascule vers les fonctions
+script.Step_Out=Sortir du lancement
+script.tip.Step_Out=Exécute le reste du corps de la fonction et retourne sa fonction appelante *
+firebug.RunUntil=Lancer jusqu'à cette ligne
+script.tip.Run_Until=Exécute le JavaScript jusqu'à la ligne spécifiée
 firebug.Inspect=Inspecter
 firebug.InspectElement=Inspecter un élément
-firebug.InspectElementWithFirebug=Inspect Element with Firebug
+firebug.InspectElementWithFirebug=Inspecter l'élément avec Firebug
 firebug.BreakOnErrors=Arrêter à chaque erreur
 firebug.InspectTooltip=Cliquer sur un élément à inspecter dans la page
 firebug.EditHTMLTooltip=Éditer le code HTML
@@ -1300,207 +1137,117 @@ firebug.Profile=Profiler
 firebug.Clear=Effacer
 firebug.ClearConsole=Effacer le contenu de la console
 firebug.ClearTooltip=Effacer le contenu de la console
-firebug.All=Tous
-firebug.Images=Images
-firebug.Flash=Flash
-# editors.dtd
-editors.Configured_Firebug_Editors=Configured Firebug Editors
-editors.Editor=Editor
-editors.Executable=Executable
-editors.Launch_Arguments=Launch Arguments
-editors.Add=Add
-editors.Remove=Remove
-editors.Change=Change
-editors.Move_Up=Move Up
-editors.Close=Close
-editors.Browse=Browse...
-changeEditor.Editor_Configuration=Editor Configuration
+editors.Configured_Firebug_Editors=Éditeurs Firebug configurés
+editors.Editor=Éditeur
+editors.Executable=Exécutable
+editors.Launch_Arguments=Lancer des arguments
+editors.Add=Ajouter
+editors.Remove=Supprimer
+editors.Change=Changer
+editors.Move_Up=Monter
+editors.Close=Fermer
+editors.Browse=Parcourir…
+changeEditor.Editor_Configuration=Configuration d'éditeur
 changeEditor.Name=Nom :
 changeEditor.Executable=Exécutable :
 changeEditor.CmdLine=Arguments :
-changeEditor.Supplied_arguments=Arguments supplied by Firebug:
-changeEditor.URL_of_file=URL of the file (if %url is not present, %file will be added by default)
-changeEditor.Path_to_local_file=Path to the local file (or to the temporary copy)
-changeEditor.Line_number=Line number (if available)
+changeEditor.Supplied_arguments=Arguments ajoutés par Firebug :
+changeEditor.URL_of_file=URL du fichier (si %url n'est pas présent, %file sera ajouté par défaut)
+changeEditor.Path_to_local_file=Chemin vers le fichier local (ou vers la copie temporaire)
+changeEditor.Line_number=Numéro de ligne (si disponible)
 changeEditor.Invalid_Application_Path=Chemin de l\'application invalide
 changeEditor.Application_does_not_exist=L\'application spécifiée n\'existe pas !
-# LOCALIZATION NOTE (firebug.Edit, firebug.css.sourceEdit, firebug.css.liveEdit,
-# firebug.EditCSSTooltip, firebug.css.sourceEdit.tooltip, firebug.css.liveEdit.tooltip)
-# Used in the CSS panel for the Edit button.
 firebug.Edit=Éditer
-firebug.css.sourceEdit=Source Edit
-firebug.css.sourceEdit.tooltip=Edit stylesheet source as loaded by the browser
-firebug.css.liveEdit=Live Edit
-firebug.css.liveEdit.tooltip=Edit CSS extracted from the browser
+firebug.css.sourceEdit=Édition du code source
+firebug.css.sourceEdit.tooltip=Édite la source de la feuille de style chargée par le navigateur
+firebug.css.liveEdit=Édition en live
+firebug.css.liveEdit.tooltip=Édite la CSS extraite du navigateur
 firebug.EditCSSTooltip=Éditer la feuille de style
-# LOCALIZATION NOTE (firebug.activation.privateBrowsingMode):
-# Message displayed in the Console panel when the private browsing mode is on.
-# (in Firefox 4+ it's 'Start Private Browsing')
-firebug.activation.privateBrowsingMode=Sites are not remembered in Private Browsing Mode
-# LOCALIZATION NOTE (firebug.breakpoint.showBreakNotifications):
-# Label used within Script panel's options menu. Represents an option, that can be used
-# to switch of the break notifications.
-firebug.breakpoint.showBreakNotifications=Show Break Notifications
-firebug.breakpoint.tip.Show_Break_Notifications=Show a notification box, when a Break On ... feature or the debugger; keyword stopped the JavaScript execution
-# LOCALIZATION NOTE (firebug.activation.privateBrowsingMode):
-# Message displayed in a break notification popup next to a checkbox.
-# Includes a link enclosed in <a> and </a> to open the panel's options menu.
-firebug.breakpoint.doNotShowBreakNotification2=You can disable/enable break notifications in <a>panel's tab menu</a>.
-# LOCALIZATION NOTE (firebug.bon.cause.disableDebuggerKeyword2, firebug.bon.tooltip.disableDebuggerKeyword2):
-# Message displayed in a break notification popup when break on debugger; keyword happens.
-# The keyword can be disabled by creating a disabled breakpoint on the same line.
-# The other label is used for a tooltip on the action button.
-firebug.bon.cause.disableDebuggerKeyword2=Clicking the 'Disable' button overrides 'debugger' with a disabled breakpoint.
-firebug.bon.tooltip.disableDebuggerKeyword2=Creates a disabled breakpoint
-# LOCALIZATION NOTE (firebug.bon.scriptPanelNeeded): A label used by 'Break On Next' button
-# This feature needs the Script panel enabled in order to work.
-firebug.bon.scriptPanelNeeded=(the Script panel must be enabled to use this feature)
-# LOCALIZATION NOTE (firebug.dom.noChildren):
-# Message displayed in the DOM panel in cases, in which there are no children objects
-# and so nothing to display.
-firebug.dom.noChildren2=There are no child objects
-# LOCALIZATION NOTE (firebug.reps.more): Label shown when the displayed array/list has
-# more elements then displayed on the screen. "..." is automatically appended.
-firebug.reps.more=more
-# LOCALIZATION NOTE (firebug.reps.reference): Label shown when the displayed array/list has
-# a reference to itself (a cycle).
-firebug.reps.reference=Circular reference
-# LOCALIZATION NOTE (firebug.storage.totalItems): Semicolon list of plural forms.
-# Label used in the DOM panel for local/session/global storage.
-# It's informing the user about the number of items in the storage.
-# %1 = Number of storage items
-# example: 1 item in Storage
-# example: 2 items in Storage
-firebug.storage.totalItems=%1$S item in Storage;%1$S items in Storage
-# LOCALIZATION NOTE (firebug.reps.table.ObjectProperties):
-# Label used in the header of the output of the console.table() method inside the Console panel,
-# if an object is passed into it.
-firebug.reps.table.ObjectProperties=Object Properties
-# LOCALIZATION NOTE (firebug.completion.empty):
-# Label used in the command line by the auto-complete function.
-# Displayed, if there are no possible completions.
-firebug.completion.empty=(no completions)
-# LOCALIZATION NOTE (firebug.failedToPreviewObjectURL, firebug.failedToPreviewImageURL):
-# Label used in an image preview infotip in the HTML panel when hovering over an <img> element
-# when loading of the given URL fails. The firebug.failedToPreviewObjectURL is specifically used
-# for moz-filedata (HTML5),
-# see: https://developer.mozilla.org/en/Using_files_from_web_applications#Example.3a_Using_object_URLs_to_display_images
-firebug.failedToPreviewObjectURL=The URL object has been most likely revoked using revokeObjectURL method.
-firebug.failedToPreviewImageURL=Failed to load the given URL
-# LOCALIZATION NOTE (firebug.Memory_Profiler_Started):
-# Message logged into the Console panel when memory profiler session starts.
-firebug.Memory_Profiler_Started=Memory Profiler Started
-# LOCALIZATION NOTE (firebug.Objects_Added_While_Profiling):
-# Title for a group (logged into the Console panel), that contains a list of new objects
-# allocated within memory profiler session.
-firebug.Objects_Added_While_Profiling=Objects Added While Profiling
-# LOCALIZATION NOTE (firebug.Memory_Profiler_Results):
-# Message used within the Console panel when the memory profiler session is finished.
-firebug.Memory_Profiler_Results=Memory Profiler Results
-# LOCALIZATION NOTE (firebug.Entire_Session):
-# Label used within memory profiler results to mark summary information for entire session.
-firebug.Entire_Session=Entire Session
-# LOCALIZATION NOTE (console.msg.nothing_to_output):
-# Used by the console panel if a Console API is used without any argument.
-console.msg.nothing_to_output=(nothing to output)
-# LOCALIZATION NOTE (console.msg.nothing_to_output):
-# Used by the console panel if an empty string is passed into a Console API.
-console.msg.an_empty_string=(an empty string)
-# LOCALIZATION NOTE (cookies.legacy.firecookie_detected, cookies.legacy.uninstall, cookies.legacy.uninstall_and_restart):
-# A message and labels used when Firecookie is detected. This extension has been integrated with
-# Firebu and should not be installed together with Firebug 1.10+
-cookies.legacy.firecookie_detected=Firecookie add-on is detected. This add-on has been integrated with Firebug 1.10 by default. To avoid a collision you need to uninstall Firecookie. \n\nYou must restart to finish uninstalling the add-on.
-cookies.legacy.uninstall=Uninstall
-cookies.legacy.uninstall_and_restart=Uninstall && Restart
-# LOCALIZATION NOTE (firebug.cmd.help.values, console.cmd.help_title_desc):
-console.cmd.help_title=Command Line API
-console.cmd.help_title_desc=Press F1 to open online Firebug help
-# LOCALIZATION NOTE (console.cmd.help.$): Description for Command Line API that is logged
-# in the the Console panel if the user types "help" into the command line.
-console.cmd.help.$=Returns a single element with the given id.
-console.cmd.help.$$=Returns an array of elements that match the given CSS selector.
-console.cmd.help.$x=Returns an array of elements that match the given XPath expression.
-console.cmd.help.dir=Prints an interactive listing of all properties of the object. This looks identical to the view inside the DOM panel.
-console.cmd.help.dirxml=Prints the XML source tree of an HTML or XML element. This looks identical to the view inside the HTML panel. You can click on any node to inspect it in the HTML panel.
-console.cmd.help.cd=By default, command line expressions are relative to the top-level window of the page. cd() allows you to use the window of a frame in the page instead.
-console.cmd.help.clear=Clears the console.
-console.cmd.help.copy=Copies the given parameter to the clipboard. This can be a return value of a function or an object.
-console.cmd.help.inspect=Inspects an object in the most suitable panel, or the panel identified by the optional second argument. The available panel names are "html", "stylesheet", "script", and "dom".
-console.cmd.help.keys=Returns an array containing the names of all properties of the object.
-console.cmd.help.values=Returns an array containing the values of all properties of the object.
-console.cmd.help.debug=Adds a breakpoint on the first line of a function.
-console.cmd.help.undebug=Removes the breakpoint on the first line of a function.
-console.cmd.help.monitor=Turns on logging for all calls to a function.
-console.cmd.help.unmonitor=Turns off logging for all calls to a function.
-console.cmd.help.monitorEvents=Turns on logging for all events dispatched to an object. The optional second argument may define specific events or event types to log. The available event types are "composition", "contextmenu", "drag", "focus", "form", "key", "load", "mouse", "mutation", "paint", "scroll", "text", "ui", "xul", and "clipboard".
-console.cmd.help.unmonitorEvents=Turns off logging for all events dispatched to an object. The optional second argument may define specific events or event families, for which to turn logging off.
-console.cmd.help.profile=Turns on the JavaScript profiler. The optional second argument contains the text to be printed in the header of the profile report.
-console.cmd.help.profileEnd=Turns off the JavaScript profiler and prints its report.
-console.cmd.help.table=Allows to log provided data using tabular layout. The method takes one required parameter that represents table-like data (array of arrays or list of objects). The optional second parameter can be used to specify columns and/or properties to be logged.
-console.cmd.help.$0=Represents the last element selected via the Inspector.
-console.cmd.help.$1=Represents the second last element selected via the Inspector.
-console.cmd.help.$n=Returns one of the 5 last elements selected via the Inspector. This method takes one required parameter, which represents the index of the element (starting at 0).
-console.cmd.help.help=Displays help for all available commands.
-# LOCALIZATION NOTE (console.cmd.helpUrlNotAvailable): A message used displayed to the user
-# if registered command doesn't have help URL associated and the user clicks on the command name.
-# List of command names is displayed if you type "help" (without quotes) into the command line.
-console.cmd.helpUrlNotAvailable=Help page for this command is not available.
-# LOCALIZATION NOTE (css.selector.noSelection): A help description used in empty
-# Selection side panel.
-css.selector.noSelection=Type custom selector or right click CSS rule and pick <b>Get Matching Elements</b>.
-css.selector.noSelectionResults=No matching elements
-css.selector.selectorError=Selection failed:
-# LOCALIZATION NOTE (css.selector.Selection): Title for Selector side panel displayed
-# in the CSS panel.
-css.selector.Selection=Elements
-# LOCALIZATION NOTE (panel.tip.selector): Tooltip text for the Selection side panel
-# Shown when hovering the Selection panel tab
-panel.tip.selector=Displays elements matching a CSS selector
-css.selector.TryASelector=Try a selector...
-# LOCALIZATION NOTE (css.selector.cmd.getMatchingElements): A label for context menu item.
-# The menu-item is used in the CSS panel's context menu and allows to get matched elements
-# for the clicked rule selector. Elements are displayed in the side panel.
-css.selector.cmd.getMatchingElements=Get Matching Elements
-# LOCALIZATION NOTE (css.selector.unknownErrorMessage): An error message displayed
-# to the user if querySelectorAll (used by the Selector side panel) fails and there is no
-# explanantion coming from the platform.
-css.selector.unknownErrorMessage=Failed to execute specified selector string
-# LOCALIZATION NOTE (perftiming.bars.label, perftiming.events.label): A label used in a tooltip
-# for performance.timing graph.
-# The graph is displayed in the Console when the user executes "performance.timing" expression.
-perftiming.bars.label=Document phases start and elapsed time relative to the document load:
-perftiming.events.label=Event timing relative to the document load:
-# LOCALIZATION NOTE (perftiming.details_title, perftiming.details_title_desc): A label used
-# for detailed performance timing info table.
-perftiming.details_title=Perfomance Timing
-perftiming.details_title_desc=Detailed timing
-# LOCALIZATION NOTE (perftiming.connectEnd, perftiming.connectStart,
-# perftiming.domContentLoadedEventEnd, perftiming.domContentLoadedEventStart,
-# perftiming.domInteractive, perftiming.domLoading, perftiming.domainLookupEnd,
-# perftiming.domainLookupStart, perftiming.fetchStart, perftiming.loadEventEnd,
-# perftiming.loadEventStart, perftiming.avigationStart, perftiming.redirectCount,
-# perftiming.redirectEnd, perftiming.redirectStart, perftiming.requestStart,
-# perftiming.responseEnd, perftiming.responseStart, perftiming.timing, perftiming.unloadEventEnd,
-# perftiming.unloadEventStart): Description for performance timing field. Displayed when
-# the user executes 'performance.timing' in the command line.
-perftiming.connectEnd=Time when server connection is finished.
-perftiming.connectStart=Time just before server connection begins.
-perftiming.domComplete=Time just before document readiness completes.
-perftiming.domContentLoadedEventEnd=Time after DOMContentLoaded event completes.
-perftiming.domContentLoadedEventStart=Time just before DOMContentLoaded starts.
-perftiming.domInteractive=Time just before readiness set to interactive.
-perftiming.domLoading=Time just before readiness set to loading.
-perftiming.domainLookupEnd=Time after domain name lookup.
-perftiming.domainLookupStart=Time just before domain name lookup.
-perftiming.fetchStart=Time when the resource starts being fetched.
-perftiming.loadEventEnd=Time when the load event is complete.
-perftiming.loadEventStart=Time just before the load event is fired.
-perftiming.navigationStart=Time after the previous document begins unload.
-perftiming.redirectCount=Number of redirects since the last non-redirect.
-perftiming.redirectEnd=Time after last redirect response ends.
-perftiming.redirectStart=Time of fetch that initiated a redirect.
-perftiming.requestStart=Time just before a server request.
-perftiming.responseEnd=Time after the end of a response or connection.
-perftiming.responseStart=Time just before the start of a response.
-perftiming.unloadEventEnd=Time after the previous document is unloaded.
-perftiming.unloadEventStart=Time just before the unload event is fired.
+firebug.activation.privateBrowsingMode=Les sites ne sont pas mémorisés en mode de navigation privée
+firebug.breakpoint.showBreakNotifications=Afficher les notifications d'arrêt
+firebug.breakpoint.tip.Show_Break_Notifications=Affiche une boîte de notification quand la fonction « Arrêt lors de … » ou le mot-clé débogueur a interrompu l'exécution JavaScript.
+firebug.breakpoint.doNotShowBreakNotification2=Vous pouvez désactiver/activer les notifications d'arrêt dans le <a>menu onglet des panneaux</a>.
+firebug.bon.cause.disableDebuggerKeyword2=En cliquant sur le bouton « Désactiver » le débogueur est remplacé par un point d'arrêt désactivé.
+firebug.bon.tooltip.disableDebuggerKeyword2=Crée un point d'arrêt désactivé
+firebug.bon.scriptPanelNeeded=(le panneau script doit être désactivé pour utiliser cette fonctionnalité)
+firebug.dom.noChildren2=Il n'y a aucun objet enfant
+firebug.reps.more=plus
+firebug.reps.reference=Référence circulaire
+firebug.storage.totalItems=%1$S élément stocké;%1$S éléments stockés
+firebug.reps.historyEntries=%1$S entrée d'historique ; %1$S entrées d'historique
+firebug.reps.table.ObjectProperties=Propriétés d'objet
+firebug.completion.empty=(pas de complétion)
+firebug.failedToPreviewObjectURL=L'URL de l'objet a été probablement révoquée en utilisant la méthode revokeObjectURL.
+firebug.failedToPreviewImageURL=Imossible de charger l'URL indiquée
+firebug.Memory_Profiler_Started=Profileur de mémoire lancé
+firebug.Objects_Added_While_Profiling=Objets ajouté pendant le profilage
+firebug.Memory_Profiler_Results=Résultats du profileur de mémoire
+firebug.Entire_Session=Toute la session
+console.msg.nothing_to_output=(rien à indiquer)
+console.msg.an_empty_string=(une chaîne vide)
+cookies.legacy.firecookie_detected=L'extension Firecookie a été détectée. Cette extension a été incorporée à Firebug 1.10 par défaut. Pour éviter des problèmes de collision, vous devez désinstaller Firecookie.\n\nVous devez redémarrer pour achever la désinstallation.
+cookies.legacy.uninstall=Désinstaller
+cookies.legacy.uninstall_and_restart=Désinstaller & redémarrer
+console.cmd.help_title=API de ligne de commande
+console.cmd.help_title_desc=Appuyer sur F1 pour aller à l'aide en ligne de Firebug
+console.cmd.tip_title=Astuces pour ligne de commande
+console.cmd.tip_title_desc=Apprendre des trucs & astuces pour la ligne de commande
+console.cmd.tip.javascript=Toute expression JavaScript valide peut être exécutée en ligne de commande. Exemple :
+console.cmd.tip.closures=Afin d'accéder aux variables de fermeture, utiliser la syntaxe « %. » (<a>en savoir plus</a>). Exemple :
+console.cmd.help.$=Retourne un seul élément avec l'id indiquée.
+console.cmd.help.$$=Retourne un tableau d'éléments correspondant au sélecteur CSS indiqué.
+console.cmd.help.$x=Retourne un tableau d'éléments correspondant à l'expression XPath indiquée.
+console.cmd.help.dir=Affiche un listing interactif de toutes les propriétés de l'objet. Cela ressemble à l'affichage dans le panneau DOM.
+console.cmd.help.dirxml=Affiche l'arborescence du code source XML d'un élément HTML ou XML. Cela ressemble à l'affichage dans le panneau HTML. Vous pouvez cliquer sur tout noeud pour l'inspecter dans le panneau HTML.
+console.cmd.help.cd=Par défaut, les expressions en ligne de commande sont relatives à la fenêtre de niveau supérieure de la page. cd() vous permet d'utiliser une fenêtre d'un cadre de la page à la place.
+console.cmd.help.clear=Efface la console.
+console.cmd.help.copy=Copie le paramètre indiqué vers le presse-papiers. Cela peut être une valeur retournée par une fonction ou un objet.
+console.cmd.help.inspect=Inspecte un objet dans le panneau le plus adapté ou le panneau identifié par un argument secondaire facultatif. Les noms de panneau disponibles sont : « html », « stylesheet », « script » et « dom ».
+console.cmd.help.keys=Retourne un tableau contenant le nom de toutes les propriétés de l'objet.
+console.cmd.help.values=Retourne un tableau contenant les valeurs de toutes les propriétés de l'objet.
+console.cmd.help.debug=Ajoute un point d'arrêt au niveau de la première ligne d'une fonction.
+console.cmd.help.undebug=Supprime le point d'arrêt de la première ligne d'une fonction.
+console.cmd.help.monitor=Inscrit dans le journal d'activité tous les appels à une fonction.
+console.cmd.help.unmonitor=N'inscrit pas dans le journal d'activité tous les appels à une fonction.
+console.cmd.help.monitorEvents=Active la journalisation des évènements envoyés à un objet. Le second argument facultatif peut définir des évènements spécifiques ou des types d'évènements au journal d'activité. Les types d'évènements disponibles sont "composition", "contextmenu", "drag", "focus", "form", "key", "load", "mouse", "mutation", "paint", "scroll", "text", "ui", "xul", and "clipboard".
+console.cmd.help.unmonitorEvents=Désactive la journalisation de tous les évènements envoyés à un objet. Le second argument facultatif peut définir des évènements ou des familles d'évènements, pour lesquels il faut désactiver la journalisation.
+console.cmd.help.profile=Active le profileur JavaScript. Le deuxième argument facultatif contient le texte à afficher dans l'entête du rapport du profileur.
+console.cmd.help.profileEnd=Désactive le profileur JavaScript et affiche son rapport.
+console.cmd.help.table=Permet d'inscrire dans le journal d'activité les données en utilisant un format tabulaire. La méthode prend un paramètre obligatoire qui représente des données sous forme de tableau (tableaux de tableaux ou liste d'objets). Le second paramètre facultatif peut être utilisé pour définir des colonnes et/ou des propriétés à inscrire dans le journal.
+console.cmd.help.$0=Représente le dernier éléments sélectionné via l'inspecteur.
+console.cmd.help.$1=Représente l'avant-dernier élément sélectionné via l'inspecteur.
+console.cmd.help.$2=Représente l'avant-avant dernier élément sélectionné via l'inspecteur.
+console.cmd.help.$3=Représente l'avant-avant-avant-dernier élément sélectionné via l'inspecteur.
+console.cmd.help.$4=Représente l'avant-avant-avant-avant-dernier élément sélectionné via l'inspecteur.
+console.cmd.help.$n=Retourne un des 5 derniers éléments sélectionnés via l'inspecteur. Cette méthode prend un paramètre requis qui représente l'index de l'élément (début à 0).
+console.cmd.help.$_=Représente le résultat de la dernière expression évaluée dans l'invite de commande.
+console.cmd.help.help=Affiche de l'aide pour toutes les commandes disponibles.
+console.cmd.help.include=Inclut un script distant.
+console.cmd.help.$p=Après avoir cliqué droit un objet/une valeur JavaScript et en cliquant sur « Utiliser en ligne de commande », cette variable en ligne de commande est définie à cette valeur.
+console.cmd.help.getEventListeners=Retourne un objet avec tous les "event listeners" associé directement à un élément (ou d'autres "event target")
+console.cmd.helpUrlNotAvailable=La page d'aide de cette commande n'est pas disponible.
+perftiming.bars.label=Lancement des phases du document et temps écoulé relatifs au chargement du document :
+perftiming.events.label=Timing de l'évènement relatif au chargement du document :
+perftiming.details_title=Timing lié à la performance
+perftiming.details_title_desc=Timing détaillé
+perftiming.connectEnd=Fin de la connexion au serveur.
+perftiming.connectStart=Juste avant la connexion du serveur.
+perftiming.domComplete=Juste avant que le document soit lisible.
+perftiming.domContentLoadedEventEnd=Après la fin de l'évènement DOMContentLoaded.
+perftiming.domContentLoadedEventStart=Juste avant que DOMContentLoaded démarre.
+perftiming.domInteractive=Juste avant que la lisibilité soit interactive.
+perftiming.domLoading=Juste avant que la lisibilité soit en chargement.
+perftiming.domainLookupEnd=Après la recherche du nom de domaine.
+perftiming.domainLookupStart=Juste avant la recherche du nom de domaine.
+perftiming.fetchStart=Lorsque la ressource commence à être récupérée.
+perftiming.loadEventEnd=Lorsque le chargement est terminé.
+perftiming.loadEventStart=Juste avant que le chargement est lancé.
+perftiming.navigationStart=Après que le déchargement du document précédent a démarré.
+perftiming.redirectCount=Nombre de redirections depuis la dernière non-redirection.
+perftiming.redirectEnd=Après que la dernière réponse de redirection se termine.
+perftiming.redirectStart=Récupération qui a initialisée la redirection.
+perftiming.requestStart=Juste avant une requête de serveur.
+perftiming.responseEnd=Après la fin d'une réponse ou d'une connexion.
+perftiming.responseStart=Juste avant le début d'une réponse.
+perftiming.unloadEventEnd=Après que le document précédent est déchargé.
+perftiming.unloadEventStart=Juste avant que le déchargement débute.
diff --git a/locale/fr/selectors.properties b/locale/fr/selectors.properties
new file mode 100644
index 0000000..02dc1f3
--- /dev/null
+++ b/locale/fr/selectors.properties
@@ -0,0 +1,10 @@
+Panel-selectors=Sélecteurs
+panel.tip.selectors=Affiche les éléments correspondant à un sélecteur CSS
+css.selector.noSelection=Indiquez un sélecteur personnalisé ou cliquez droit sur une règle CSS et choisissez <b>Obtenir les éléments correspondant</b>.
+css.selector.noSelectionResults=Aucun élément correspondant
+css.selector.readMore=Vous pouvez <a>en apprendre davantage</a> sur l'utilisation de ce panneau.
+css.selector.invalidSelector=Sélecteur invalide saisi
+css.selector.TryASelector=Essayer un sélecteur…
+css.selector.cmd.getMatchingElements=Obtenir les éléments correspondant
+aria.labels.Selectors=Panneau latéral des sélecteurs
+a11y.labels.press_enter_to_add_new_selector=Appuyez sur Entrée pour ajouter un nouveau sélecteur
diff --git a/locale/hu-HU/cookies.properties b/locale/hu-HU/cookies.properties
index c858e7e..69b5874 100644
--- a/locale/hu-HU/cookies.properties
+++ b/locale/hu-HU/cookies.properties
@@ -1,256 +1,126 @@
-# LOCALIZATION NOTE (cookies.Panel): Title of the panel in Firebug's UI.
 cookies.Panel=Sütik
 panel.tip.cookies=Megvizsgálhatja és módosíthatja a sütiket
-# LOCALIZATION NOTE (cookies.Session): Label used to mark session cookies.
 cookies.Session=A munkamenet végén
-# LOCALIZATION NOTE (cookies.AllowGlobally, cookies.tip.AllowGlobally):
-# Label used for cookies permission.
 cookies.AllowGlobally=Sütik elfogadása minden webhelyről
 cookies.tip.AllowGlobally=Az összes süti elfogadása vagy blokkolása alapértelmezésként
-# LOCALIZATION NOTE (cookies.showCookieEvents, cookies.tip.showCookieEvents):
-# Label used in Cookies panel options menu (the small arrow next to the Cookies panel label).
-# If checked, various cookies events are displayed in Firebug's Console panel.
 cookies.showCookieEvents=Süti események megjelenítése
 cookies.tip.showCookieEvents=Sütikkel kapcsolatos események (változás, törlées) megjelenítése a konzolon
-# LOCALIZATION NOTE (cookies.clearWhenDeny): Label used in Cookies panel options menu (the
-# small arrow next to the Cookies panel label). If checked, cookies are automatically removed
-# if the permission is changed to deny.
-# xxxHonza: currently not displayed in the UI
 cookies.clearWhenDeny=Sütik törlése visszautasításkor
-# LOCALIZATION NOTE (cookies.Cut, cookies.Copy, cookies.CopyAll, cookies.Paste,
-# cookies.Delete): Support for clipboard actions. Used in a cookie context menu
-# (right click on a cookie in the Cookies panel).
 cookies.Cut=Kivágás
 cookies.Copy=Másolás
 cookies.CopyAll=Az összes másolása
 cookies.Paste=Beillesztés
 cookies.Delete=Eltávolítás
-# LOCALIZATION NOTE (cookies.Clear Value): Label for an item in the cookie context menu.
-# Clears cookie value, but not removes the cookie itself.
 cookies.Clear_Value=Érték törlése
-# LOCALIZATION NOTE (cookies.Edit): Label for an item in the cookie context menu. Displays
-# a dialog for editing clicked cookie.
 cookies.Edit=Szerkesztés
 cookies.Accept=Elfogadás
-# LOCALIZATION NOTE (cookies.header.Reset_Header): Used in cookie header context menu (right
-# click on a header in the Cookies panel). This action restores default state of the header
-# (visibility and size of all columns)
 cookies.header.Reset_Header=Fejléc visszaállítása
-# LOCALIZATION NOTE (cookies.Intro, cookies.ExceptionsTitle): Used for managing Cookie panel
-# enablement. Used only if Firebug 1.2 and 1.3 is installed
 cookies.Intro=Itt megadhatja, hogy mely webhelyek használhatnak sütiket.\nÍrja be a pontos címét az webhelynek, aztán kattintson a Tiltás,\nEngedélyezés a munkamenetben, vagy Engedélyezés gombokra.
 cookies.ExceptionsTitle=Kivételek - Sütik
-# LOCALIZATION NOTE (cookies.modulemanager.description, cookies.HostEnable, cookies.HostDisable,
-# cookies.Permissions, cookies.PermissionsIntro): Various labels used for mangaing Cookies panel
-# enablement. Used only if Firebug 1.2 and 1.3 is installed.
-# examples: Enable Cookies panel for www.softwareishard.com
 cookies.modulemanager.description=Süti figyelés támogatása
 cookies.HostEnable=Sütik panel engedélyezése itt: %S
 cookies.HostDisable=Sütik panel engedélyezése itt: %S
 cookies.Permissions=Sütik panel engedélyezése vagy letiltása
 cookies.PermissionsIntro=Válassza ki azokat a webhelyeket, ahol a Sütik panel engedélyezve, illetve letiltva lesz.
-# LOCALIZATION NOTE (cookies.SystemPages, cookies.LocalFiles): Labels used in the Cookies
-# panel if it's disabled (only for Firebug 1.2 and 1.3).
 cookies.SystemPages=Rendszer oldalak
 cookies.LocalFiles=Helyi fájlok
-# LOCALIZATION NOTE (cookies.confirm.removeall): Used in a confirmation dialog when all cookies
-# of a website are going to be deleted (or permission is set do deny and cookies should be deleted).
 cookies.confirm.removeall=Biztosan eltávolítja a listán szereplő összes sütit?
-# LOCALIZATION NOTE (cookies.confirm.removeallsession): Used in a confirmation dialog when
-# all session cookies are going to be deleted
 cookies.confirm.removeallsession=Biztosan eltávolítja a listán szereplő összes munkamenet sütit?
-# LOCALIZATION NOTE (cookies.confirm.Remove_All_From_Host): Used in a confirmation dialog when cookies
-# from a specific host are going to be deleted (or permission is set do deny and cookies should be deleted).
-cookies.confirm.Remove_All_From_Host=Do you want to remove all cookies from %S?
-# LOCALIZATION NOTE (cookies.msg.Do_not_show_this_message_again): 
-# Message within a confirmation dialog that is displayed when deleting cookies.
-# This message is displayed next to a check-box that can be used to disabled this
-# confirmation.
-cookies.msg.Do_not_show_this_message_again=Ne jelenjen meg többször ez az üzenet
-# LOCALIZATION NOTE (cookies.Confirm_cookie_removal): A label used for option (mini tab menu)
-# that says whether a confirmation dialog is displayed when removing cookies. 
+cookies.confirm.Remove_All_From_Host=Szeretné eltávolítani az összes sütit innen: %S?
 cookies.Confirm_cookie_removal=Süti eltávolítás megerősítése
 cookies.tip.Confirm_cookie_removal=Ha be van jelölve, akkor az összes süti törlése előtt egy megerősítő ablak jelenik meg.
-# LOCALIZATION NOTE (cookies.removeall.tooltip): A tooltip for Cookies->Remove Cookies menu
 cookies.removeall.tooltip=A listán szereplő összes süti eltávolítása.
-# LOCALIZATION NOTE (cookies.Remove_Session_Cookies): A label used for
-# Cookies->Remove Session Cookies menu
 cookies.Remove_Session_Cookies=Munkamenet sütik eltávolítása
-# LOCALIZATION NOTE (cookies.removeall.tooltip): A tooltip for Cookies->Remove Session Cookies menu
 cookies.removeallsession.tooltip=A listán szereplő összes munkamenet süti eltávolítása.
-# LOCALIZATION NOTE (cookies.createcookie.tooltip): A tooltip for Cookies->Create Cookie menu
-# examples: Create new cookie for www.softwareishard.com
 cookies.createcookie.tooltip=Új süti létrehozása itt: %S
-# LOCALIZATION NOTE (cookies.createcookie.defaultvalue): Default value for newly created cookie.
 cookies.createcookie.defaultvalue=Tartalom
-# LOCALIZATION NOTE (cookies.perm.manage.tooltip): A tooltip for permissions button that
-# is located on a Cookis panel toolbar.
-# examples: Manage cookie permissions for www.softwareishard.com
 cookies.perm.manage.tooltip=Süti jogosultságok beállítása: %S
-# LOCALIZATION NOTE (cookies.console.cookiescleared): A label for a cookie event that is
-# displayed in Firebug's Console panel when all cookie in Firefox are removed
-# To remove all cookies use menu on Cookis panel toolbar: Tools->Show All Cookies and click
-# Remove All Cookies in the dialog.
 cookies.console.cookiescleared=Az összes süti eltávolítva.
-# LOCALIZATION NOTE (cookies.console.cookiescleared): A label for a cookie event that is
-# displayed in Firebug's Console panel when all cookie in Firefox are removed
-# To remove all cookies use menu on Cookis panel toolbar: Tools->Show All Cookies and click
-# Remove All Cookies in the dialog.
 cookies.console.sessioncookiescleared=Az összes süti eltávolítva.
-# LOCALIZATION NOTE (cookies.console.cookiesrejected, cookies.console.nocookiesreceived):
-# A label for a cookie event that is displayed in Firebug's Console panel when cookies are
-# rejected by the current site.
 cookies.console.cookiesrejected=Visszautasított sütik:
 cookies.console.nocookiesreceived=Nem érkeztek be sütik.
-# LOCALIZATION NOTE (cookies.console.cookie, cookies.console.deleted, cookies.console.added,
-# cookies.console.changed, cookies.console.cleared): Various labels that are used for cookie
-# events displayed in Firebug's Console panel.
 cookies.console.cookie=Süti
 cookies.console.deleted=eltávolítva
 cookies.console.added=hozzáadva
 cookies.console.changed=módosítva
 cookies.console.cleared=törölve
-# LOCALIZATION NOTE (cookies.domain.label): Label used for marking domain cookie.
-# Displayed in the Cookies panel for domain cookies.
-# xxxHonza: not used in the UI now.
 cookies.domain.label=Tartomány
-# LOCALIZATION NOTE (cookies.secure.label): Label used for marking secure cookie.
-# Displayed in the Cookies panel for secure cookies.
 cookies.secure.label=Biztonságos
-# LOCALIZATION NOTE (cookies.status.accepted, cookies.status.downgraded,
-# cookies.status.flagged, cookies.status.rejected): Various statuses of a cookie
-# displayed in Status column.
 cookies.status.accepted=Elfogadva
 cookies.status.downgraded=Visszaállított
 cookies.status.flagged=Megjelölt
 cookies.status.rejected=Visszautasított
-# LOCALIZATION NOTE (cookies.info.valuetab.label, cookies.info.rawdatatab.Raw_Data,
-# cookies.info.jsontab.JSON, cookies.info.xmltab.XML): A label for tabs displayed
-# if a cookie entry is expanded. Tab are only available in the UI, if necessary.
 cookies.info.valuetab.label=Tartalom
 cookies.info.rawdatatab.Raw_Data=Nyers adat
 cookies.info.jsontab.JSON=JSON
 cookies.info.xmltab.XML=XML
-# LOCALIZATION NOTE (cookies.default.session, cookies.default.thirdPartySession,
-# cookies.default.thirdParty, cookies.default.allow, cookies.default.deny,
-# cookies.default.warn, cookies.host.session, cookies.host.accept,
-# cookies.host.reject): Various labels for cookie permissions.
-# examples: Accept cookies from www.softwareishard.com
 cookies.default.session=Alapértelmezett (munkamenet sütik elfogadása)
 cookies.default.thirdPartySession=Alapértelmezett (munkamenet sütik elfogadása)
 cookies.default.thirdParty=Alapértelmezett (sütik elfogadása)
 cookies.default.allow=Alapértelmezett (sütik elfogadása)
 cookies.default.deny=Alapértelmezett (sütik visszautasítása)
 cookies.default.warn=Alapértelmezett (figyelmeztetés süti elfogadása előtt)
+cookies.default.limitThirdParty=Alapértelmezett (harmadik feles sütik korlátozása)
 cookies.host.session=Munkamenet sütik elfogadása innen: %S
 cookies.host.accept=Sütik elfogadása innen: %S
 cookies.host.reject=Sütik visszautasítása innen: %S
-# LOCALIZATION NOTE (cookies.edit.invalidname, cookies.edit.invalidhost,
-# cookies.edit.invalidpath): Various error messages used when a new cookie is created
-# using a cookie dialog. Use Cookies->Create Cookie menu to show the dialog.
+cookies.host.limitThirdParty=Harmadik feles sütik korlátozása ehhez: %S
 cookies.edit.invalidname=A süti neve érvénytelen.
 cookies.edit.invalidhost=A süti kiszolgálója érvénytelen.
 cookies.edit.invalidpath=A süti útvonala érvénytelen.
-# LOCALIZATION NOTE (cookies.header.name, cookies.header.value, cookies.header.rawValue,
-# cookies.header.domain, cookies.header.size, cookies.header.path, cookies.header.expires,
-# cookies.header.security, cookies.header.status, cookies.header.httponly):
-# Column labels used in the cookie header.
 cookies.header.name=Név
 cookies.header.value=Tartalom
 cookies.header.rawValue=Nyers érték
 cookies.header.domain=Tartomány
 cookies.header.size=Méret
+cookies.header.rawSize=Valódi méret
 cookies.header.path=Útvonal
 cookies.header.expires=Lejárat
 cookies.header.security=Biztonság
 cookies.header.httponly=Csak HTTP
-# LOCALIZATION NOTE (cookies.header.name.tooltip, cookies.header.value.tooltip,
-# cookies.header.rawValue.tooltip, cookies.header.domain.tooltip, cookies.header.size.tooltip,
-# cookies.header.path.tooltip, cookies.header.expires.tooltip, cookies.header.security.tooltip,
-# cookies.header.httponly.tooltip):
-# Column tooltips used in the cookie header.
+cookies.header.maxAge=Max. kor
 cookies.header.name.tooltip=A süti neve
 cookies.header.value.tooltip=A sütiben tárolt tartalom
 cookies.header.rawValue.tooltip=A süti által tárolt nyers érték
 cookies.header.domain.tooltip=A tartomány, amely a sütit tárolta
+cookies.header.rawSize.tooltip=A süti tényleges tárolási méret
 cookies.header.size.tooltip=A tárolt süti mérete
 cookies.header.path.tooltip=Az útvonal, ahol a süti elérhető
 cookies.header.expires.tooltip=A süti lejárati dátuma
 cookies.header.security.tooltip=Megjeleníti, hogy a süti biztonságos-e vagy sem.
 cookies.header.httponly.tooltip=Megjeleníti, hogy a süti csak HTTP-n át küldhető
-# LOCALIZATION NOTE (cookies.netinfo.Received_Cookies, cookies.netinfo.Sent_Cookies):
-# Labels used in the Firebug's net panel. If there are any cookies associated with a network
-# request, there is an additional Cookies tab displayed when the user expands the request.
-# These labels are used within this tab.
+cookies.header.maxAge.tooltip=Maximális idő, amíg a sütit tárolja a böngésző
 cookies.netinfo.Received_Cookies=Fogadott sütik
 cookies.netinfo.Sent_Cookies=Küldött sütik
-# LOCALIZATION NOTE (cookies.Path_Filter): Label for a Filter->Path Filter
-# xxxHonza: Not implemented yet.
+cookies.netinfo.deleted.tooltip=Süti érvénytelenítése
 cookies.Path_Filter=Útvonal szűrő
-# LOCALIZATION NOTE (cookies.menu.Cookies): Label for menu Cookies, dislayed on the toolbar.
 cookies.menu.Cookies=Sütik
-# LOCALIZATION NOTE (cookies.export.Export_All_Cookies, cookies.export.Export_All_Cookies_Tooltip,
-# cookies.export.Export_For_Site, cookies.export.Export_For_Site_Tooltip): Labels and 
-# tooltips for exporting menus available under Cookies menus.
 cookies.export.Export_All_Cookies=Az összes süti exportálása...
 cookies.export.Export_All_Cookies_Tooltip=A böngésző összes sütijének exportálása a cookies.txt fájlba
 cookies.export.Export_For_Site=A webhely sütijeinek exportálása...
 cookies.export.Export_For_Site_Tooltip=A(z) %S webhely sütijeinek exportálása a cookies.txt fájlba
-# LOCALIZATION NOTE (cookies.message.There_is_no_active_page): An error message displayed
-# when the user is trying to create a cookie and there is no active page (site). This should
-# never happen.
 cookies.message.There_is_no_active_page=Nincs aktív oldal.
-# LOCALIZATION NOTE (cookies.Break_On_Cookie, cookies.Disable_Break_On_Cookie):
-# Tooltips for resume button that are used when the Cookies panel is currently selected.
-# The button allows stopping JS execution when a cookie on the current page is modified
-# added or removed.
 cookies.Break_On_Cookie=Minden süti változásnál megáll
 cookies.Disable_Break_On_Cookie=Változás figyelés kikapcsolása
-# LOCALIZATION NOTE (cookies.Cookie_Breakpoints): Name of Cookie breakpoint group
-# displayed in Breakpoints panel (in the Script panel)
 cookies.Cookie_Breakpoints=Süti töréspontok
-# LOCALIZATION NOTE (cookies.Break_On_Cookie, cookies.menu.tooltip.Break_On_Cookie):
-# Label and tooltip for a context menu item used when the user right clicks on a cookie. 
-# examples: Break on 'MyCookie' cookie
-# examples: Break on 'MyCookie' when removed or changed.
 cookies.menu.Break_On_Cookie=Megáll minden '%S' sütinél
 cookies.menu.tooltip.Break_On_Cookie=Megáll a(z) '%S' süti módosításánál vagy törlésénél.
-# LOCALIZATION NOTE (cookies.menu.Edit_Breakpoint_Condition): Label for context menu item
-# used when user right clicks on a cookie with existing breakpoint.
 cookies.menu.Edit_Breakpoint_Condition=Töréspont feltétel szerkesztése
-# LOCALIZATION NOTE (cookies.Breakpoint_condition_evaluation_fails): Message displayed
-# within the Firebug Console panel if a cookie breakpoint condition fails when evaluated. 
 cookies.Breakpoint_condition_evaluation_fails=A töréspont feltétel nem teljesült
-# DTD strings converted (main Firecokie UI, see cookiePanel.xul)
 cookies.RemoveAll=Sütik eltávolítása
 cookies.Create=Süti létrehozása
-# LOCALIZATION NOTE (cookies.Tools, cookies.ToolsTooltip) Label and tooltip for Tools
-# menu on Cookies toolbar.
 cookies.Tools=Eszközök
 cookies.ToolsTooltip=Eszközök
-# LOCALIZATION NOTE (cookies.ViewAll, cookies.ViewAllTooltip) Label and tooltip for
-# view all cookies menu item (Tools menu). This action opens Firefox built-in cookie manager window.
 cookies.ViewAll=Az összes süti megjelenítése...
 cookies.ViewAllTooltip=Süti-kezelő megjelenítése
-# LOCALIZATION NOTE (cookies.ViewExceptions, cookies.ViewExceptionsTooltip) Label and
-# tooltip for Site Permissions menu item (Tools menu). This action opens Firefox built-in
-# dialog for setting web site cookie permissions.
 cookies.ViewExceptions=Webhelyek jogosultságai...
 cookies.ViewExceptionsTooltip=Engedélyezett vagy letiltott webhelyek listája
-# LOCALIZATION NOTE (cookies.Filter, cookies.FilterTooltip, cookies.filter.byPath,
-# cookies.filter.byPathTooltip, cookies.filter.showRejectedCookies,
-# cookies.filter.showRejectedCookiesTooltip): Labels and tooltips for cookie Filter menu
-# presented on the Cookie toolbar.
 cookies.Filter=Szűrő
 cookies.FilterTooltip=A süti lista szűrése a megadott feltételekkel.
 cookies.filter.byPath=Sütik szűrése útvonal alapján
 cookies.filter.byPathTooltip=Sütik szűrése az aktuális útvonalra.
 cookies.filter.showRejectedCookies=Elutasított sütik megjelenítése
 cookies.filter.showRejectedCookiesTooltip=Az elutasított sütik is jelenjenek meg a listán.
-# LOCALIZATION NOTE (cookies.edit.title, cookies.edit.name.label,
-# cookies.edit.domain.label, cookies.edit.path.label, cookies.edit.expire.label,
-# cookies.edit.value.label, cookies.edit.secure.label, cookies.edit.httponly.label,
-# cookies.edit.session.label, cookies.edit.urlEncode.label): Edit Cookie dialog UI
 cookies.edit.title=Süti szerkesztése
 cookies.edit.name.label=Név:
 cookies.edit.domain.label=Kiszolgáló:
@@ -261,12 +131,8 @@ cookies.edit.secure.label=Biztonságos süti
 cookies.edit.httponly.label=Csak HTTP
 cookies.edit.session.label=A munkamenet végén lejár
 cookies.edit.urlEncode.label=URL kódolt érték
-# LOCALIZATION NOTE (cookies.console.Cookies, cookies.console.Filter_By_Cookies)
-# Label and tooltip for a toolbar button displayed on the Console panel. Used for filtering.
 cookies.console.Cookies=Sütik
 cookies.console.Filter_By_Cookies=Szűrés sütik alapján
-# LOCALIZATION NOTE (firebug.shortcut.removeAllCookies.label) Label used by the
-# Customize Shortcuts dialog (Firebug menu)
 firebug.shortcut.removeAllCookies.label=Az összes süti eltávolítása
-cookie.sizeinfo.Size=Size
-cookie.sizeinfo.Raw_Size=Raw Size
+cookie.sizeinfo.Size=Méret
+cookie.sizeinfo.Raw_Size=Helyfoglalás
diff --git a/locale/hu-HU/firebug-amo.properties b/locale/hu-HU/firebug-amo.properties
index df23d3d..236e86f 100644
--- a/locale/hu-HU/firebug-amo.properties
+++ b/locale/hu-HU/firebug-amo.properties
@@ -1,7 +1,3 @@
-# LOCALIZATION NOTE (firebug.amo.summary, firebug.amo.description, firebug.amo.developer.comments):
-# These texts are used on Mozilla Add-on site: https://addons.mozilla.org/en-US/firefox/addon/1843
-# They are not direct part of Firebug extension and so, you can't see them in Firebug's UI.
-# Note that firebug.amo.summary must not exceed 250 characters (limitation by AMO site)
 firebug.amo.summary1.6=A Firebug beépül a Firefox-ba és fejlesztőeszközök tucatjait biztosítsa böngészés közben. Szerkesztheti, monitorozhatja, hibát kereshet élőben az oldalak CSS, HTML és JavaScript kódjában...\\n\\nA Firebug 1.6 futtatásához Firefox 3.6-os vagy újabb verzió szükséges.
 firebug.amo.description=A Firebug a Firefoxba beépülve számtalan fejlesztési segédeszközzel gazdagítja azt, mely böngészés közben bármikor elérhető. Megtekintheti és szerkesztheti bármely weboldal CSS, HTML, illetve JavaScript kódjait...\\n\\nLátogasson el a Firebug honlapjára, ahol részletes dokumentációt, képernyőképeket és felhasználói fórumot is talál: http://getfirebug.com
 firebug.amo.developer.comments=Ha bármi problémája van, kérem látogassa meg a Firebug FAQ-ot.\\n\\nhttp://getfirebug.com/faq.html
diff --git a/locale/hu-HU/firebug-tracing.properties b/locale/hu-HU/firebug-tracing.properties
index 0c20fb4..a75068d 100644
--- a/locale/hu-HU/firebug-tracing.properties
+++ b/locale/hu-HU/firebug-tracing.properties
@@ -1,8 +1,5 @@
-# LOCALIZATION NOTE (Open_Firebug_Tracing, Always_Open_Firebug_Tracing):
-# Firebug tracing console menu items (located in Firebug's menu).
 Open_Firebug_Tracing=Firebug Nyomkövető megnyitása
 Always_Open_Firebug_Tracing=Mindig nyissa meg a Nyomkövetőt
-# LOCALIZATION NOTE (title.Tracing): Title for Firebug tracing console window (verb).
 title.Tracing=Nyomkövető
 tracing.Show_Scope_Variables=Hatókör változóinak megjelenítése
 tracing.Show_Time=Idő megjelenítése
diff --git a/locale/hu-HU/firebug.properties b/locale/hu-HU/firebug.properties
index 5c160e0..ef50238 100644
--- a/locale/hu-HU/firebug.properties
+++ b/locale/hu-HU/firebug.properties
@@ -5,31 +5,31 @@ Firebug=Firebug
 WindowTitle=Firebug - %S
 # Panel titles
 Panel-console=Konzol
-panel.tip.console=Allows observing console messages and executing JavaScript commands
+panel.tip.console=Elemezheti a konzol üzeneteit és JavaScript parancsokat futtathat
 Panel-net=Net
-panel.tip.net=Allows analyzing the network traffic
+panel.tip.net=Segít elemezni a hálózati forgalmat
 Panel-html=HTML
-panel.tip.html=Allows inspecting and manipulating the DOM nodes
+panel.tip.html=Segít megvizsgálni és módosítani a DOM csomópontokat
 Panel-stylesheet=CSS
-panel.tip.stylesheet=Allows inspecting and manipulating the CSS stylesheets
+panel.tip.stylesheet=Segít megvizsgálni és módosítani a CSS stíluslapokat
 Panel-script=Szkript
-panel.tip.script=Allows debugging of JavaScript
+panel.tip.script=Segít a JavaScript hibakeresésben
 Panel-dom=DOM
-panel.tip.dom=Allows inspecting and manipulating the DOM properties
+panel.tip.dom=Segít megvizsgálni és módosítani a DOM tulajdonságokat
 Panel-css=Stílus
-panel.tip.css=Allows inspecting and manipulating the CSS rules of the selected DOM node
+panel.tip.css=Segít megvizsgálni és módosítani a CSS szabályokat a kiválasztott DOM csomópontra vonatkozóan
 Panel-computed=Számított
-panel.tip.computed=Allows inspecting the computed CSS values of the selected DOM node
+panel.tip.computed=Segít megvizsgálni az érvényes CSS értékeket a kiválasztott DOM csomópontra vonatkozóan
 Panel-layout=Elrendezés
-panel.tip.layout=Allows inspecting and manipulating the layout data of the selected DOM node
+panel.tip.layout=Segít megvizsgálni és módosítani a kiválasztott DOM csomópont elrendezését
 Panel-domSide=DOM
-panel.tip.domSide=Allows inspecting and manipulating the DOM properties of the selected DOM node
+panel.tip.domSide=Segít megvizsgálni és módosítani a kiválasztott DOM csomópont tulajdonságait
 Panel-watches=Figyelés
-panel.tip.watches=Allows inspecting the JavaScript variables available in the current stack frame and defining watch expressions
+panel.tip.watches=Segít megvizsgálni az aktuális JavaScript veremben lévő változókat és figyelendő kifejezéseket adhat meg
 Panel-breakpoints=Töréspontok
-panel.tip.breakpoints=Allows manipulating the set breakpoints
+panel.tip.breakpoints=Segít beállítani a töréspontokat
 Panel-callstack=Verem
-panel.tip.callstack=Allows observing the current JavaScript call stack
+panel.tip.callstack=Segít megfigyelni az aktuális JavaScript hívássorozatot
 Panel-scopes=Hatókörök
 firebug.DetachFirebug=Firebug megnyitása új ablakban
 firebug.AttachFirebug=Firebug megnyitása oldalsávban
@@ -48,7 +48,7 @@ plural.Total_Firebugs2=%1$S Firebug összesen;%1$S Firebug összesen
 # LOCALIZATION NOTE (startbutton.tip.deactivated):
 # Used in a tooltip that is displayed for the Firebug icon located within Firefox toolbar.
 # Displays the deactivated status of Firebug
-startbutton.tip.deactivated=Deactivated
+startbutton.tip.deactivated=Kikapcsolva
 # LOCALIZATION NOTE (panel.status): Label showing the status of an activable panel
 # inside a tooltip when hovering the Start Button. Will be shown for each panel.
 # first %S = panel name
@@ -60,64 +60,65 @@ minimized=Kis méret
 enablement.for_all_pages=összes oldalon
 enablement.on=Be
 enablement.off=Ki
-enablement.Panel_activation_status=Panel activation status:
+enablement.Panel_activation_status=Panel bekapcsolási státusz:
 none=Bezárva
 Firebug_-_inactive_for_current_website=Firebug - kikapcsolva az aktuális weboldalon
 Activate_Firebug_for_the_current_website=Firebug bekapcsolása az aktuális weboldalon
 Minimized=Kis méretű
 Minimize_Firebug=Kis méret
 On_for_all_web_pages=Bekapcsolás az összes oldalon
-firebug.menu.tip.On_for_all_Web_Sites=Activate Firebug by default for all websites
+firebug.menu.tip.On_for_all_Web_Sites=Firebug bekapcsolása minden weboldalon alapértelmezésként
 firebug.menu.Clear_Activation_List=Aktivációs lista törlése
-firebug.menu.tip.Clear_Activation_List=Clear the list of websites Firebug is activated for
-firebug.menu.Detached=Detached
-firebug.menu.tip.Detached=Detach Firebug into its own window
-firebug.menu.Top=Top
-firebug.menu.tip.Top=Align Firebug to the top of the user agent window
-firebug.menu.Bottom=Bottom
-firebug.menu.tip.Bottom=Align Firebug to the bottom of the user agent window
-firebug.menu.Left=Left
-firebug.menu.tip.Left=Align Firebug to the left of the user agent window
-firebug.menu.Right=Right
-firebug.menu.tip.Right=Align Firebug to the right of the user agent window
+firebug.menu.tip.Clear_Activation_List=Automatikus bekapcsolási lista törlése
+firebug.menu.Detached=Leválasztva
+firebug.menu.tip.Detached=A Firebug leválasztása egy külön ablakba
+firebug.menu.Top=Felül
+firebug.menu.tip.Top=A Firebug a böngésző tetejéhez igazodjon
+firebug.menu.Bottom=Alul
+firebug.menu.tip.Bottom=A Firebug a böngésző aljához igazodjon
+firebug.menu.Left=Balra
+firebug.menu.tip.Left=A Firebug a böngésző baloldalához igazodjon
+firebug.menu.Right=Jobbra
+firebug.menu.tip.Right=A Firebug a böngésző jobboldalához igazodjon
 firebug.uiLocation=Firebug UI elhelyezkedése
-firebug.menu.tip.UI_Location=Position of the Firebug user interface
+firebug.menu.tip.UI_Location=A Firebug kezelőfelületének igazítása
+# LOCALIZATION NOTE (annotations.confirm.clear):
+# Used in a confirmation dialog when all Firebug annotations are going to be deleted
+annotations.confirm.clear=Biztosan törli a Firebug kommentárokat az összes weboldalhoz?
 # LOCALIZATION NOTE (firebug_options): Tooltip text used for Firebug icon menu (them left
 # most button on Firebug main toolbar)
 firebug_options=Firebug beállítások
 # LOCALIZATION NOTE (firebug.Show_All_Panels): Menu item label used in 'list of all panels'
 # menu (available on Firebug's tab bar).
 firebug.Show_All_Panels=Az összes panel megjelenítése
-console.option.Show_Command_Line=Show Command Line
-console.option.tip.Show_Command_Line=Focus the Command Line / Show the Command Line Popup
+console.option.Show_Command_Line=Parancssor megjelenítése
+console.option.tip.Show_Command_Line=Ugrás a parancssorba / Parancssor megjelenítése
 # Console panel options (located in tab's option menu)
 ShowJavaScriptErrors=JavaScript hibák megjelenítése
-console.option.tip.Show_JavaScript_Errors=Log JavaScript error messages into the console
+console.option.tip.Show_JavaScript_Errors=JavaScript hibaüzenetek naplózása a konzolra
 ShowJavaScriptWarnings=JavaScript figyelmeztetések megjelenítése
-console.option.tip.Show_JavaScript_Warnings=Log JavaScript warning messages into the console
+console.option.tip.Show_JavaScript_Warnings=JavaScript figyelmeztetések naplózása a konzolra
 ShowCSSErrors=CSS hibák megjelenítése
-console.option.tip.Show_CSS_Errors=Log CSS error messages into the console
-ShowXMLHTMLErrors=Show XML/HTML Errors
-console.option.tip.Show_XML_HTML_Errors=Log XML and HTML error messages into the console
+console.option.tip.Show_CSS_Errors=CSS hibák naplózása a konzolra
+ShowXMLHTMLErrors=XML/HTML hibák megjelenítése
+console.option.tip.Show_XML_HTML_Errors=XML és HTML hibaüzenetek naplózása a konzolra
 ShowStackTrace=Veremmel kiíratása a hibák mellett
-console.option.tip.Show_Stack_Trace=Show stack trace information for error messages
+console.option.tip.Show_Stack_Trace=Veremkiírás megjelenítése a hibaüzenetkhez
 ShowXMLHttpRequests=XMLHttpRequest események megjelenítése
-console.option.tip.Show_XMLHttpRequests=Log XMLHttpRequests into the console
+console.option.tip.Show_XMLHttpRequests=XMLHttpRequest hívások naplózása a konzolra
 ShowChromeErrors=Chrome hibák megjelenítése
-console.option.tip.Show_System_Errors=Log program and add-on internal error messages into the console
+console.option.tip.Show_System_Errors=A program és a kiterjesztések belső hibaüzeneteinek naplózása a konzolra
 ShowChromeMessages=Chrome üzenetek megjelenítése
-console.option.tip.Show_System_Messages=Log program and add-on internal messages into the console
-ShowExternalErrors=Külső hibák megjelenítése
-console.option.tip.Show_External_Errors=Log error messages coming from external sources into the console
+console.option.tip.Show_System_Messages=A program és a kiterjesztések belső üzeneteinek naplózása a konzolra
 ShowNetworkErrors=Hálózati hibák megjelenítése
-console.option.tip.Show_Network_Errors=Log network error messages into the console
+console.option.tip.Show_Network_Errors=Hálózati hibaüzenetek naplózása a konzolra
 JavascriptOptionsStrict=Szigorú figyelmeztetések (csökkenti a teljesítményt)
-console.option.tip.Show_Strict_Warnings=Log also strict warnings into the console
+console.option.tip.Show_Strict_Warnings=Szigorú figyelmeztetések naplózása a konzolra
 Command_History=Parancselőzmények
-console.option.Show_Command_Editor=Show Command Editor
-console.option.tip.Show_Command_Editor=Switch to the Command Editor
+console.option.Show_Command_Editor=Parancsszerkesztő megjelenítése
+console.option.tip.Show_Command_Editor=Átváltás a parancsszerkesztőre
 commandLineShowCompleterPopup=Kiegészítő felugró lista megjelenítése
-console.option.tip.Show_Completion_List_Popup=Show the popup for command auto-completion
+console.option.tip.Show_Completion_List_Popup=Parancsok automatikus kiegészítésének megjelenítése
 Assertion=Assertion meghiúsulás
 # LOCALIZATION NOTE (Line, LineAndCol): Used at many places in the UI. Displays the location
 # of an error, message, etc. within a source of a web page.
@@ -134,8 +135,8 @@ SystemItem=<Rendszer>
 # clicked element in the DOM panel.
 # %S = Target panel title
 # examples: Inspect in DOM Panel
-panel.Inspect_In_Panel=Inspect in %S Panel
-panel.tip.Inspect_In_Panel=Switch to the %S panel to examine the object there
+panel.Inspect_In_Panel=Vizsgálat a(z) %S panelen
+panel.tip.Inspect_In_Panel=Átváltás a(z) %S panelra, hogy az objektumot ott is megvizsgálhassa
 NoName=(névtelen)
 # LOCALIZATION NOTE (jsdIScript): an internal Firefox object used for debugging Firebug
 # do not translate.
@@ -145,61 +146,61 @@ jsdIScript=jsdIScript %S
 # HTML panel option (located in tab's option menu). If set to true, contents
 # of an element will not be cropped
 ShowFullText=Teljes szöveg megjelenítése
-html.option.tip.Show_Full_Text=Don't crop element contents
+html.option.tip.Show_Full_Text=Ne vágja le az elem tartalmát
 # LOCALIZATION NOTE (html.option.Show_Whitespace, html.option.tip.Show_Whitespace):
 # HTML panel option (located in tab's option menu). If set to true, whitepace inside of
 # nodes will be shown
 ShowWhitespace=Szóközök megjelenítése
-html.option.tip.Show_Whitespace=Show Whitespace inside of nodes
+html.option.tip.Show_Whitespace=Szóközök megjelenítése a csomópontokban
 # LOCALIZATION NOTE (html.option.Show_Comments, html.option.tip.Show_Comments):
 # HTML panel option (located in tab's option menu). If set to true, comment nodes are displayed
 ShowComments=Megjegyzések megjelenítése
-html.option.tip.Show_Comments=Show comment nodes
+html.option.tip.Show_Comments=Megjegyzés csomópontok megjelenítése
 # LOCALIZATION NOTE (html.option.Show_Text_Nodes_With_Entities, html.option.tip.Show_Text_Nodes_With_Entities):
 # HTML panel option (located in tab's option menu). If set to true, special characters will be
 # shown in their entity representation, e.g. " => ", & => &
-html.option.Show_Entities_As_Symbols=Show Entities As Symbols
-html.option.tip.Show_Entities_As_Symbols=Show all XML entities using their symbolic representation
-html.option.Show_Entities_As_Names=Show Entities As Names
-html.option.tip.Show_Entities_As_Names=Show all XML entities using their names
-html.option.Show_Entities_As_Unicode=Show Entities As Unicode
-html.option.tip.Show_Entities_As_Unicode=Show all XML entities in their Unicode representation
+html.option.Show_Entities_As_Symbols=Entitások megjelenítése szimbólumokkal
+html.option.tip.Show_Entities_As_Symbols=Minden XML entitás megjelenítése a szimbolikus megfelelőjével
+html.option.Show_Entities_As_Names=Entitások megjelenítése névvel
+html.option.tip.Show_Entities_As_Names=Minden XML entitás megjelenítése a nevével
+html.option.Show_Entities_As_Unicode=Entitások megjelenítése Unicode-dal
+html.option.tip.Show_Entities_As_Unicode=Minden XML entitás megjelenítése az Unicode megfelelőjével
 # LOCALIZATION NOTE (html.option.Highlight_Mutations, html.option.tip.Highlight_Mutations):
 # HTML panel option (located in tab's option menu). If set to true, changes to the nodes
 # will be highlighted
 HighlightMutations=Változások kiemelése
-html.option.tip.Highlight_Mutations=Highlight changes inside nodes
+html.option.tip.Highlight_Mutations=Változások kiemelése a csomópontokban
 # LOCALIZATION NOTE (html.option.Expand_Mutations, html.option.tip.Expand_Mutations):
 # HTML panel option (located in tab's option menu). If set to true, the tree view
 # will be expanded to display changed nodes
 ExpandMutations=Változások kibontása
-html.option.tip.Expand_Mutations=Expand the tree view to display changed nodes
+html.option.tip.Expand_Mutations=Csomópontok kibontása a megváltozott elemekig
 # LOCALIZATION NOTE (html.option.Scroll_To_Mutations, html.option.tip.Scroll_To_Mutations):
 # HTML panel option (located in tab's option menu). If set to true, the tree view
 # will be scrolled to display changed nodes
 ScrollToMutations=Görgess a változásokhoz
-html.option.tip.Scroll_To_Mutations=Scroll the tree view to bring changed nodes into view
+html.option.tip.Scroll_To_Mutations=Görgetés a megváltozott csomópontokhoz
 # LOCALIZATION NOTE (html.option.Scroll_To_Mutations, html.option.tip.Scroll_To_Mutations):
 # Inspector option (located in HTML tab's option menu and Firebug menu). If set to true,
 # a panel will be shown including information about the currently inspected element
 ShowQuickInfoBox=Gyors infó doboz megjelenítése
-inspect.option.tip.Show_Quick_Info_Box=Show information about the currently inspected element inside a panel overlaying the page
+inspect.option.tip.Show_Quick_Info_Box=A kijelölt elem információinak megjelenítése egy az oldal fölé helyezett panelen
 # LOCALIZATION NOTE (html.option.Scroll_To_Mutations, html.option.tip.Scroll_To_Mutations):
 # Inspector option (located in HTML tab's option menu and Firebug menu). If set to true, the tree view
 # will be scrolled to display changed nodes
 ShadeBoxModel=Shade Box Model
-inspect.option.tip.Shade_Box_Model=Shade the different parts of the box model
+inspect.option.tip.Shade_Box_Model=A doboz modell különböző részeinek kiemelése eltérő színekkel
 ScrollIntoView=Görgess oda
-html.tip.Scroll_Into_View=Scroll the page to make the element visible
-NewAttribute=Új tulajdonság...
-html.tip.New_Attribute=Add a new attribute to this element
-html.Edit_Node=Edit %S...
-html.Node=Node
-html.tip.Edit_Node=Edit the %S using the full text editor
+html.tip.Scroll_Into_View=Oldal görgetése az elem láthatóvá tételéhez
+NewAttribute=Új tulajdonság…
+html.tip.New_Attribute=Új attribútum felvétele ehhez az elemhez
+html.Edit_Node=%S szerkesztése…
+html.Node=Csomópont
+html.tip.Edit_Node=%S szerkesztése szövegszerkesztővel
 DeleteElement=Elem törlés
-html.Delete_Element=Delete the element from the tree
+html.Delete_Element=Elem eltávolítása a fastruktúrából
 DeleteNode=Csomópont törlés
-html.Delete_Node=Delete the node from the tree
+html.Delete_Node=Csomópont eltávolítása a fastruktúrából
 # Quick Info Box
 quickInfo=Gyors infó
 computedStyle=Számított stílus
@@ -211,22 +212,48 @@ html.Disable_Break_On_Mutate=Ne álljon meg mutációnál
 html.label.Break_On_Text_Change=Szöveg változásakor megáll
 html.label.HTML_Breakpoints=HTML töréspontok
 html.label.Break_On_Attribute_Change=Attribútum változásakor megáll
-html.tip.Break_On_Attribute_Change=Stop JavaScript execution when an attribute of this element changes
+html.tip.Break_On_Attribute_Change=JavaScript futásának leállítása, amikor ennek az elemnek egy attribútuma megváltozik
 html.label.Break_On_Child_Addition_or_Removal=Gyermekelem felvételkor vagy eltávolításkor megáll
-html.tip.Break_On_Child_Addition_or_Removal=Stop JavaScript execution when a child node is added to or removed from this element
+html.tip.Break_On_Child_Addition_or_Removal=JavaScript futásának leállítása, amikor ennek az elemnek egy gyermeke megváltozik
 html.label.Break_On_Element_Removal=Elem eltávolításakor megáll
-html.tip.Break_On_Element_Removal=Stop JavaScript execution when the element is removed
+html.tip.Break_On_Element_Removal=JavaScript futásának leállítása, amikor ez az elem törlődik
 # LOCALIZATION NOTE (html.label.Expand/Contract_All, html.tip.Expand/Contract_All):
 # Used within the HTML for a context menu item. The user can expand/contract
 # the element and all its children to quickly see the entire hierarchical structure
 # or collapse it.
 html.label.Expand/Contract_All=Az összes kibontása/összecsukása
-html.tip.Expand/Contract_All=Expand/collapse all the children recursively
+html.tip.Expand/Contract_All=Az összes gyermek csomópont bezárása/kinyitása
+# LOCALIZATION NOTE (dom.scopeName): Used within the DOM panel to name the fake property that
+# contains the innermost closure scope of a function.
+dom.scopeName=(lezárás)
+# LOCALIZATION NOTE (dom.scopeParentName): Used within the DOM panel to name the fake property
+# that contains the parent of a closure scope.
+dom.scopeParentName=(szülő hatókör)
+# LOCALIZATION NOTE (dom.tip.scopeName): Used within the DOM panel as a tooltip when hovering
+# "(closure)".
+dom.tip.scopeName=Használja a <func>.%closureVariable formátumot a parancssorból való eléréshez
+# LOCALIZATION NOTE (dom.tip.scopeMemberName): Used within the DOM panel as a tooltip when
+# hovering a variable in a closure.
+# %S: the variable name - starts with "%"
+dom.tip.scopeMemberName=Használja a <func>.%S formátumot a parancssorból való eléréshez
+# LOCALIZATION NOTE (firebug.reps.declarativeScope, firebug.reps.objectScope, firebug.reps.withScope):
+# Labels shown to describe different types of closure scopes.
+firebug.reps.declarativeScope=[deklaratív hatókör]
+firebug.reps.objectScope=[objektum hatókör]
+firebug.reps.withScope=[hatókörrel]
+# LOCALIZATION NOTE (firebug.reps.optimizedAway): Label shown to denote a closure variable that has
+# been optimized away.
+firebug.reps.optimizedAway=(kioptimalizált)
+# LOCALIZATION NOTE (firebug.reps.element.attribute_value, firebug.reps.element.property_value):
+# Used in the Console panel for elements. If an input element has two different values, one set
+# as "value" attribute and one set as 'value' property, these labels are used to distinguish it.
+firebug.reps.element.attribute_value=attribútum érték
+firebug.reps.element.property_value=tulajdonság érték
 # LOCALIZATION NOTE (dom.label.breakOnPropertyChange, dom.tip.Break_On_Property_Change):
 # Used within the DOM panel to create a 'property breakpoint'. Right-click on an property of an object.
 # The label is also used for the 'Break On Property Change' button (available on the toolbar).
 dom.label.breakOnPropertyChange=Megszakítás tulajdonság megváltozásakor
-dom.tip.Break_On_Property_Change=Stop the JavaScript execution when this property changes
+dom.tip.Break_On_Property_Change=JavaScript futásának leállítása, amikor ez a tulajdonság megváltozik
 # LOCALIZATION NOTE (dom.disableBreakOnPropertyChange): Used within the DOM panel for the
 # 'break on next button' in the case the option is activated
 dom.disableBreakOnPropertyChange=Tulajdonság változáskövetés kikapcsolása
@@ -234,15 +261,15 @@ dom.label.DOM_Breakpoints=DOM töréspontok
 # LOCALIZATION NOTE (EditAttribute, html.tip.Edit_Attribute): Menu item label used in HTML panel context menu. Allows
 # editing an existing HTML element attribute.
 # %S = Name of the clicked attribute
-# examples: Edit Attribute "onclick"...
-EditAttribute=\"%S\" tulajdonság szerkesztése...
-html.tip.Edit_Attribute=Edit the value of the attribute "%S" of this element
+# examples: Edit Attribute "onclick"…
+EditAttribute=\"%S\" tulajdonság szerkesztése…
+html.tip.Edit_Attribute=Elem "%S" attribútumának szerkesztése
 # LOCALIZATION NOTE (DeleteAttribute, html.tip.Delete_Attribute): Menu item label used in HTML panel context menu. Allows
 # deleting an existing HTML element attribute.
 # %S = Name of the clicked attribute
-# examples: Delete Attribute "onclick"...
+# examples: Delete Attribute "onclick"…
 DeleteAttribute=\"%S\" tulajdonság törlése
-html.tip.Delete_Attribute=Delete the attribute "%S" from this element
+html.tip.Delete_Attribute=Elem "%S" attribútumának törlése
 # LOCALIZATION NOTE (InheritedFrom): Displaying an HTML element name + an applied CSS rule,
 # that has been inherited. Used in the Style side panel (under HTML panel).
 # examples: Inherited from table.tabView
@@ -259,53 +286,53 @@ css.EmptyStyleSheet=Nincsenek szabályok. <a>Szabály létrehozása</a>.
 # (available within the HTML panel) in case there are no CSS rules for the selected element.
 # The text between <a> and </a> is displayed as a link.
 css.EmptyElementCSS=Ehhez az elemhez nem tartoznak stílusszabályok. <a>Szabály létrehozása</a>.
-EditStyle=Elem stílusának szerkesztése...
-style.tip.Edit_Style=Edit the element's inline style
-AddRule=Add Rule...
-css.tip.AddRule=Add a general rule for this element
-NewRule=Új szabály...
-css.tip.New_Rule=Add a new rule
+EditStyle=Elem stílusának szerkesztése…
+style.tip.Edit_Style=Elem inline stílusának szerkesztése
+AddRule=Szabály hozzáadása…
+css.tip.AddRule=Általános szabály hozzáadása ehhez az elemhez
+NewRule=Új szabály…
+css.tip.New_Rule=Új szabály felvétele
 # LOCALIZATION NOTE (css.Delete_Rule, css.tip.Delete_Rule): Menu item label used in the CSS panel context menu.
 # Allows to delete an existing CSS rule
 # %S = Selector of the clicked rule
 # examples: Delete "div > p"
-css.Delete_Rule=Delete "%S"
-css.tip.Delete_Rule=Delete the rule "%S" and all its properties
+css.Delete_Rule="%S" törlése
+css.tip.Delete_Rule="%S" szabály és az összes tulajdonságának törlése
 # LOCALIZATION NOTE (css.menu.Edit_Media_Query, css.menu.tip.Edit_Media_Query):
 # Menu item label used in the CSS panel context menu.
 # Allows to add or edit the CSS media query of an import rule
-css.menu.Edit_Media_Query=Edit Media Query...
-css.menu.tip.Edit_Media_Query=Edit the media query assigned to this rule
-NewProp=Új tulajdonság...
-css.tip.New_Prop=Add a new property to the current rule
+css.menu.Edit_Media_Query=Média lekérdezés szerkesztése…
+css.menu.tip.Edit_Media_Query=Média lekérdezés szerkesztése ehhez a szabályhoz
+NewProp=Új tulajdonság…
+css.tip.New_Prop=Új tulajdonság felvétele az aktuális szabályhoz
 # LOCALIZATION NOTE (EditProp, css.tip.Edit_Prop): Menu item label used in the CSS panel context menu.
 # Allows to edit an existing CSS rule property.
 # %S = Name of the clicked property
-# examples: Edit "background-color"...
-EditProp=\"%S\" szerkesztése...
-css.tip.Edit_Prop=Edit the value of the property "%S"
+# examples: Edit "background-color"…
+EditProp=\"%S\" szerkesztése…
+css.tip.Edit_Prop="%S" tulajdonság értékének szerkesztése
 # LOCALIZATION NOTE (DisableProp): Menu item label used in the CSS panel context menu.
 # Allows to disable an existing CSS rule property.
 # %S = Name of the clicked property
 # examples: Disable "background-color"
 DisableProp=\"%S\" letiltása
-css.tip.Disable_Prop=Disable the property "%S"
+css.tip.Disable_Prop="%S" tulajdonság letiltása
 # LOCALIZATION NOTE (DeleteProp, css.tip.Delete_Prop): Menu item label used in the CSS panel context menu.
 # Allows to delete an existing CSS rule property.
 # %S = Name of the clicked property
 # examples: Delete "background-color"
 DeleteProp=\"%S\" törlése
-css.tip.Delete_Prop=Delete the property "%S"
+css.tip.Delete_Prop="%S" tulajdonság törlése
 # Console context menu labels.
 BreakOnThisError=Ennél a hibánál megáll
-console.menu.tip.Break_On_This_Error=Stop the JavaScript execution as soon as this error occurs
+console.menu.tip.Break_On_This_Error=JavaScript futásának leállítása, amint ez a hiba előfordul
 BreakOnAllErrors=Minden hibánál megáll
-console.menu.tip.Break_On_All_Errors=Stop the JavaScript execution as soon as an error occurs
+console.menu.tip.Break_On_All_Errors=JavaScript futásának leállítása, amint bármilyen hiba előfordul
 # LOCALIZATION NOTE (script.option.Track_Throw_Catch):
 # Script panel option (located in tab's option menu). If set to true, tracking of
 # throw/catch blocks is enabled.
 TrackThrowCatch=Throw/Catch nyomkövetése
-script.option.tip.Track_Throw_Catch=Track exceptions even when they are caught by try/catch blocks
+script.option.tip.Track_Throw_Catch=Kivételek követése, akkor is ha try/catch blokkal le lettek kezelve
 UseLastLineForEvalName=Utolsó forráskód sor használata eval() neveknél
 UseMD5ForEvalName=MD5 név használata eval() neveknél
 # Breakpoints side panel
@@ -313,21 +340,21 @@ Breakpoints=Töréspontok
 ErrorBreakpoints=Hiba töréspontok
 LoggedFunctions=Naplózott függvények
 EnableAllBreakpoints=Összes töréspont engedélyezése
-breakpoints.option.tip.Enable_All_Breakpoints=Enable all listed breakpoints
+breakpoints.option.tip.Enable_All_Breakpoints=Az összes töréspont engedélyezése
 DisableAllBreakpoints=Összes töréspont letiltása
-breakpoints.option.tip.Disable_All_Breakpoints=Disable all listed breakpoints
+breakpoints.option.tip.Disable_All_Breakpoints=Az összes töréspont letiltása
 ClearAllBreakpoints=Összes töréspont eltávolítása
-breakpoints.option.tip.Clear_All_Breakpoints=Remove all listed breakpoints
+breakpoints.option.tip.Clear_All_Breakpoints=Az összes töréspont törlése
 ConditionInput=Ezen a törésponton akkor áll meg, ha a következő kifejezés igaz:
 # LOCALIZATION NOTE (breakpoints.Remove_Breakpoint, breakpoints.tip.Remove_Breakpoint, breakpoints.Disable_Breakpoint,
 # breakpoints.tip.Disable_Breakpoint, breakpoints.Enable_Breakpoint, breakpoints.tip.Enable_Breakpoint):
 # Context menu items in the Script panel and Breakpoints side panel.
 breakpoints.Remove_Breakpoint=Töréspontok eltávolítása
-breakpoints.tip.Remove_Breakpoint=Remove the breakpoint
+breakpoints.tip.Remove_Breakpoint=Töréspont törlése
 breakpoints.Disable_Breakpoint=Töréspont kikapcsolása
-breakpoints.tip.Disable_Breakpoint=Disable the breakpoint
+breakpoints.tip.Disable_Breakpoint=Töréspont letiltása
 breakpoints.Enable_Breakpoint=Töréspont bekapcsolása
-breakpoints.tip.Enable_Breakpoint=Enable the breakpoint
+breakpoints.tip.Enable_Breakpoint=Töréspont engedélyezése
 # LOCALIZATION NOTE (script.balloon.Continue, script.balloon.Disable): Labels used for buttons
 # within balloon popup dialog. This dialog appears when the debugger halts at a breakpoint or at
 # a 'debugger;' keyword.
@@ -337,37 +364,39 @@ script.balloon.Continue=Folytatás
 script.balloon.Disable=Letiltás
 ScriptsFilterStatic=Statikus szkriptek megjelenítése
 ScriptsFilterEval=Statikus és eval szkriptek megjelenítése
-ScriptsFilterEvent=Statikus és esemény szkriptek megjelenítése
-ScriptsFilterAll=Statikus, eval és esemény szkriptek megjelenítése
+ScriptsFilterEvent=Statikus és eseménykezelő szkriptek megjelenítése
+ScriptsFilterAll=Statikus, eval és eseménykezelő szkriptek megjelenítése
 ScriptsFilterStaticShort=statikus
 ScriptsFilterEvalShort=eval
-ScriptsFilterEventShort=események
+ScriptsFilterEventShort=eseménykezelők
 ScriptsFilterAllShort=mind
 # LOCALIZATION NOTE (callstack.Expand_All, callstack.tip.Expand_All,
 # callstack.Collapse_All, callstack.tip.Collapse_All):
 # Context menu item labels used in Stack side panel (within Script panel)
 # Firebug needs to be halted at a breakpoint to see these items.
 callstack.Expand_All=Az összes kibontása
-callstack.tip.Expand_All=Expand all stack frame functions
+callstack.tip.Expand_All=A veremben található összes függvény kibontása
 callstack.Collapse_All=Az összes becsukása
-callstack.tip.Collapse_All=Collapse all stack frame functions
+callstack.tip.Collapse_All=A veremben található összes függvény becsukása
 # LOCALIZATION NOTE (callstack.Execution_not_stopped):
 # Message displayed in the Stack side panel if the script execution is not stopped.
-callstack.Execution_not_stopped=Stack frames are just shown when the script execution is stopped.
+callstack.Execution_not_stopped=A verem tartalma csak akkor jelenik meg, ha a futás leállt.
 # LOCALIZATION NOTE (ShowUserProps, ShowUserFuncs, ShowDOMProps, ShowDOMFuncs, ShowDOMConstants,
 # ShowOwnProperties, ShowOwnPropertiesTooltip, ShowEnumerableProperties, ShowEnumerablePropertiesTooltip,
 # ShowInlineEventHandlers):
 # Labels for DOM panel options (located in tab's option menu)
 ShowUserProps=Felhasználói tulajdonságok megjelenítése
-dom.option.tip.Show_User_Props=Show user-defined object properties
+dom.option.tip.Show_User_Props=Felhasználó által definiált objektum tulajdonságok
 ShowUserFuncs=Felhasználói függvények megjelenítése
-dom.option.tip.Show_User_Funcs=Show user-defined object methods
+dom.option.tip.Show_User_Funcs=Felhasználó által definiált objektum metódusok
 ShowDOMProps=DOM tulajdonságok megjelenítése
-dom.option.tip.Show_DOM_Props=Show properties specified inside the DOM
+dom.option.tip.Show_DOM_Props=DOM-ban definiált tulajdonságok megjelenítése
 ShowDOMFuncs=DOM függvények megjelenítése
-dom.option.tip.Show_DOM_Funcs=Show functions specified inside the DOM
+dom.option.tip.Show_DOM_Funcs=DOM-ban definiált függvények megjelenítése
 ShowDOMConstants=DOM konstansok megjelenítése
-dom.option.tip.Show_DOM_Constants=Show constants specified inside the DOM
+dom.option.tip.Show_DOM_Constants=DOM-ban definiált konstansok megjelenítése
+ShowClosures=Lezárások megjelenítése
+dom.option.tip.Show_Closures=A különböző függvények lezárásainak megjelenítése (bekapcsolja a hibakeresőt)
 ShowInlineEventHandlers=Inline eseménykezelők megjelenítése
 ShowInlineEventHandlersTooltip=Elérhető inline eseménykezelők megjelenítése, amelyek nincsenek függvényhez rendelve.
 ShowOwnProperties=Csak saját tulajdonságok megjelenítése
@@ -375,111 +404,118 @@ ShowOwnPropertiesTooltip=Ne jelenjen meg a prototípus lánc
 ShowEnumerableProperties=Csak felsorolható tulajdonságok megjelenítése
 ShowEnumerablePropertiesTooltip=Ne jelenjenek meg a nem felsorolható tulajdonságok
 NoMembersWarning=Ennek az objektumnak nincsenek megjeleníthető tulajdonságai.
-NewWatch=Új megfigyelő kifejezés...
+NewWatch=Új megfigyelő kifejezés…
 # LOCALIZATION NOTE (AddWatch, watch.tip.Add_Watch): Context menu item in the DOM panel, Script panel and Watch side panel.
 # Adds the selection or object to the Watch side panel to observe it
 AddWatch=megfigyelés hozzáadás
-watch.tip.Add_Watch=Add the selection/object to the Watch side panel for observation
+watch.tip.Add_Watch=A kijelölés/objektum hozzáadása a Figyelő panelhez
 # LOCALIZATION NOTE (CopySourceCode, script.tip.Copy_Source_Code): Context menu item of the Script panel.
 # Copies the selected source code to the clipboard.
 CopySourceCode=Forrás másolása
-script.tip.Copy_Source_Code=Copy the selected source code to the clipboard
+script.tip.Copy_Source_Code=Kijelölt forráskód másolása a vágólapra
 Use_hash_plus_number_to_go_to_line=Írja be, hogy #<szám>, az adott sorra való ugráshoz
 CopyValue=Érték másolása
-dom.tip.Copy_Value=Copy the property's value to the clipboard
+dom.tip.Copy_Value=Tulajdonság értékének másolása a vágólapra
 Copy_Name=Név másolása
-dom.tip.Copy_Name=Copy the property's name to the clipboard
+dom.tip.Copy_Name=Tulajdonság nevének másolása a vágólapra
 Copy_Path=Útvonal másolása
-dom.tip.Copy_Path=Copy the property path
-NewProperty=Új tulajdonság...
-EditProperty=Tulajdonság szerkesztés...
-dom.tip.Edit_Property=Edit the property's value
-EditVariable=Változó szerkesztés...
-stack.tip.Edit_Variable=Edit the variable's value
-EditWatch=Megfigyelő szerkesztés...
-watch.tip.Edit_Watch=Edit the watch expression's value
+dom.tip.Copy_Path=Tulajdonság útvonalának másolása a vágólapra
+NewProperty=Új tulajdonság…
+EditProperty=Tulajdonság szerkesztés…
+dom.tip.Edit_Property=Tulajdonság értékénel szerkesztése
+EditVariable=Változó szerkesztés…
+stack.tip.Edit_Variable=Változó értékének szerkesztése
+EditWatch=Megfigyelő szerkesztés…
+watch.tip.Edit_Watch=Megfigyelt kifejezés értékének szerkesztése
 DeleteProperty=Tulajdonság törlése
-dom.tip.Delete_Property=Delete the property
+dom.tip.Delete_Property=Tulajdonság törlése
 DeleteWatch=Megfigyelő törlése
-DeleteAllWatches=Delete All Watches
-watch.tip.Delete_Watch=Delete the watch expression
-watch.tip.Delete_All_Watches=Delete all the watch expressions
+DeleteAllWatches=Figyelő panel kiürítése
+watch.tip.Delete_Watch=Megfigyelt kifejezés törlése
+watch.tip.Delete_All_Watches=Az összes megfigyelt kifejezés törlése
 # LOCALIZATION NOTE (SetBreakpoint, script.tip.Set_Breakpoint): Context menu item of the Script panel.
 # Toggles setting of a breakpoint at the current line of a script inside the Script panel.
 SetBreakpoint=Töréspont beállítása
-script.tip.Set_Breakpoint=Toggles setting of a breakpoint at the current line
+script.tip.Set_Breakpoint=Töréspont ki/bekapcsolása az adott soron
 # LOCALIZATION NOTE (EditBreakpointCondition, breakpoints.tip.Edit_Breakpoint_Condition):
 # Context menu item of the Script panel.
 # Allows to edit the condition, under which a breakpoint stops the JavaScript execution
-EditBreakpointCondition=Töréspont feltétel szerkesztés...
-breakpoints.tip.Edit_Breakpoint_Condition=Edit the condition, under which this breakpoint stops the JavaScript execution
+EditBreakpointCondition=Töréspont feltétel szerkesztés…
+breakpoints.tip.Edit_Breakpoint_Condition=Töréspont feltételének szerkesztése, ami alapján megállítja a JavaScript futását
 NoBreakpointsWarning=Ezen az oldalon nincs beállítva töréspont.
 # LOCALIZATION NOTE (style.option.Only_Show_Applied_Styles, style.option.tip.Only_Show_Applied_Styles):
 # Style side panel option (located in tab's option menu). If set to true,
 # just styles applied to an element will be displayed and overwritten ones will be hidden.
 Only_Show_Applied_Styles=Csak alkalmazott stílusok megjelenítése
-style.option.tip.Only_Show_Applied_Styles=Just show styles applied to the element
+style.option.tip.Only_Show_Applied_Styles=Csak az elemre alkalmazott stílusok megjelenítése
 # LOCALIZATION NOTE (style.option.Show_User_Agent_CSS, style.option.tip.Show_User_Agent_CSS):
 # Style side panel option (located in tab's option menu). If set to true, the Style side panel will
 # also display styles defined by the user agent.
 Show_User_Agent_CSS=Beépített CSS megjelenítése
-style.option.tip.Show_User_Agent_CSS=Also show the CSS defined by the user agent
+style.option.tip.Show_User_Agent_CSS=A böngésző alapértelmezett CSS tulajdonságainak megjelenítése
 # LOCALIZATION NOTE (computed.option.label.Colors_As_Hex, computed.option.tip.Colors_As_Hex,
 #   computed.option.label.Colors_As_RGB, computed.option.tip.Colors_As_RGB,
 #   computed.option.label.Colors_As_HSL, computed.option.tip.Colors_As_HSL):
 # CSS panel, Style side panel and Computed side panel option (located in tab's option menu).
 # Allows switching the display of CSS colors between hex, rgb(a) and hsl(a) format
-computed.option.label.Colors_As_Hex=Colors As Hex
-computed.option.tip.Colors_As_Hex=Show colors in hexadecimal format
-computed.option.label.Colors_As_RGB=Colors As RGB
-computed.option.tip.Colors_As_RGB=Show colors in RGB format
-computed.option.label.Colors_As_HSL=Colors As HSL
-computed.option.tip.Colors_As_HSL=Show colors in HSL format
+computed.option.label.Colors_As_Hex=Színformátum: HEX
+computed.option.tip.Colors_As_Hex=Színek megjelenítése hexadecimális formátumban
+computed.option.label.Colors_As_RGB=Színformátum: RGB
+computed.option.tip.Colors_As_RGB=Színek megjelenítése RGB formátumban
+computed.option.label.Colors_As_HSL=Színformátum: HSL
+computed.option.tip.Colors_As_HSL=Színek megjelenítése HSL formátumban
 # LOCALIZATION NOTE (style.option.label.active, style.option.tip.active):
 # Style side panel option tooltip (located in tab's option menu). If the option is set to true,
 # the Style side panel will simulate the element being activated and therefore display
 # :active pseudo-class styles
 style.option.label.active=:active
-style.option.tip.active=Display :active pseudo-class styles
+style.option.tip.active=:active pszeudo-osztályú stílusok megjelenítése
 # LOCALIZATION NOTE (style.option.label.hover, style.option.tip.hover):
 # Style side panel option tooltip (located in tab's option menu). If the option is set to true,
 # the Style side panel will simulate the element being hovered and therefore display
 # :hover pseudo-class styles
 style.option.label.hover=:hover
-style.option.tip.hover=Display :hover pseudo-class styles
+style.option.tip.hover=:hover pszeudó-osztályú stílusok megjelenítése
 # LOCALIZATION NOTE (style.option.label.focus, style.option.tip.focus):
 # Style side panel option tooltip (located in tab's option menu). If the option is set to true,
 # the Style side panel will simulate the element being focused and therefore display
 # :focus pseudo-class styles
 style.option.label.focus=:focus
-style.option.tip.focus=Display :focus pseudo-class styles
+style.option.tip.focus=:focus pszeudó-osztályú stílusok megjelenítése
 # LOCALIZATION NOTE (css.label.Inspect_Declaration, css.tip.Inspect_Declaration):
 # CSS panel/Style side panel context menu option. Allows inspecting a font face of a web font
 # declaration inside the CSS panel
-css.label.Inspect_Declaration=Inspect Declaration
-css.tip.Inspect_Declaration= Inspect the declaration of this font
+css.label.Inspect_Declaration=Deklaráció megtekintése
+css.tip.Inspect_Declaration=Betűtípus deklarációjának megtekintése
 # LOCALIZATION NOTE (css.option.Expand_Shorthand_Properties, css.option.tip.Expand_Shorthand_Properties):
 # CSS panel/Style side panel option (located in tab's option menu). If set to true,
 # CSS shorthand properties like 'margin' will be split into their components, e.g. 'margin-top',
 # 'margin-left', 'margin-bottom', 'margin-right'
 Expand_Shorthand_Properties=Rövidített tulajdonságok kibővítése
-css.option.tip.Expand_Shorthand_Properties=Expand CSS shorthand properties into their components
+css.option.tip.Expand_Shorthand_Properties=CSS gyorsírás kibontása az elemeire
 # LOCALIZATION NOTE (computed.option.Sort_Alphabetically, computed.option.tip.Sort_Alphabetically):
 # Computed side panel option (located in tab's option menu). If set to 'alphabetical',
 # the computed styles will be listed alphabetically by their name, otherwise they will be grouped
 # into categories
 Sort_alphabetically=Rendezés ábécérendben
-computed.option.tip.Sort_Alphabetically=Sort the styles by their name/group the styles into categories
+computed.option.tip.Sort_Alphabetically=Stílusok rendezése név/csoport szerint kategóriákba
 # LOCALIZATION NOTE (computed.option.Show_Mozilla_Specific_Styles, computed.option.tip.Show_Mozilla_Specific_Styles):
 # Computed side panel option (located in tab's option menu). If set to true,
 # also styles prefixed with -moz will be displayed
 Show_Mozilla_specific_styles=Mozilla specifikus stílusok megjelenítése
-computed.option.tip.Show_Mozilla_Specific_Styles=Also show styles prefixed with -moz
+computed.option.tip.Show_Mozilla_Specific_Styles=-moz előtagú stílusok megjelenítése
 # LOCALIZATION NOTE (computed.No_User-Defined_Styles):
 # Displayed in the Computed side panel (available within the HTML panel) in case there are no
 # user-defined CSS rules applying to the selected element.
-computed.No_User-Defined_Styles=This element has no user-defined style rules.
+computed.No_User-Defined_Styles=Erre az elemre nem vonatkoznak felhasználó által definiált stílus szabályok.
 script.Type_any_key_to_filter_list=Gépeljen be egy karaktert a lista szűréséhez
+# LOCALIZATION NOTE (location.inline):
+# Label used within the Location Menu for inline styles or scripts
+location.inline=Inline
+# LOCALIZATION NOTE (location.no_domain):
+# Label used within the Location Menu for the group of scripts,
+# which don't have a domain specified like e.g. eval()'ed scripts
+location.no_domain=Nincs tartomány
 # LOCALIZATION NOTE (LayoutPadding, LayoutBorder, LayoutMargin, LayoutPosition, LayoutAdjacent):
 # Labels used to describe layout properties a the selected HTML element.
 # Used in the Layout side panel (within HTML panel).
@@ -494,17 +530,17 @@ position=position
 # rulers and guides will be displayed for the element on the page
 # when hovering parts of the layout box
 ShowRulers=Vonalzók és segédvonalak megjelenítése
-layout.option.tip.Show_Rulers=Show rulers and guides on the page when hovering parts of the layout box
+layout.option.tip.Show_Rulers=Vonalzó és segédvonalak megjelenítése az oldalon, amikor az egeret az elrendezés elemei fölé viszi
 # Net panel
-Loading=Betöltés...
+Loading=Betöltés…
 Headers=Fejlécek
 # LOCALIZATION NOTE (net.tip.Clear)
 # Tooltip for the button inside the Net panel to clear the request list
-net.tip.Clear=Clear the request list
+net.tip.Clear=Lekérdezések listájának törlése
 # LOCALIZATION NOTE (net.header.Reset_Header, net.header.tip.Reset_Header)
 # Label for header context menu within the Net panel
 net.header.Reset_Header=Fejlécek visszaállítása
-net.header.tip.Reset_Header=Reset the header display
+net.header.tip.Reset_Header=Fejléc visszaállítása
 # LOCALIZATION NOTE (net.header.URL, net.header.URL_Tooltip, net.header.Status,
 # net.header.Status_Tooltip, net.header.Domain, net.header.Domain_Tooltip,
 # net.header.Size, net.header.Size_Tooltip, net.header.Timeline, net.header.Timeline_Tooltip,
@@ -532,14 +568,36 @@ net.label.XHR_Breakpoints=XHR töréspontok
 # LOCALIZATION NOTE (net.label.Break_On_XHR, net.tip.Break_On_XHR):
 # Net panel context menu item for stopping the JavaScript execution on an XHR
 net.label.Break_On_XHR=Megáll XHR esetén
-net.tip.Break_On_XHR=Stop the JavaScript execution as soon as an XMLHttpRequest is made
+net.tip.Break_On_XHR=JavaScript futásának leállítása, amikor egy XMLHttpRequest kérést indít
 # LOCALIZATION NOTE (net.headers.view_source, net.headers.pretty_print): Labels used in the
 # Net panel's Headers tab (displayed if you expand a network request). The label is used
 # for a link, that switches the view between raw source code and formated header values.
 net.headers.view_source=forrás megtekintése
 net.headers.pretty_print=pretty print
-# LOCALIZATION NOTE (net.filter.Media): Label for Net panel filter (used on the Net panel toolbar)
-net.filter.Media=Média
+# LOCALIZATION NOTE (net.filter.label.All, net.filter.tooltip.All, net.filter.label.HTML,
+# net.filter.tooltip.HTML, net.filter.label.CSS, net.filter.tooltip.CSS, net.filter.label.JS,
+# net.filter.tooltip.JS, net.filter.label.XHR, net.filter.tooltip.XHR, net.filter.label.Images,
+# net.filter.tooltip.Images, net.filter.label.Plugins, net.filter.tooltip.Plugins,
+# net.filter.label.Media, net.filter.tooltip.Media):
+# Labels and tooltips for Net panel filter (used on the Net panel toolbar)
+net.filter.label.All=Mind
+net.filter.tooltip.All=Az összes MIME típus megjelenítése
+net.filter.label.HTML=HTML
+net.filter.tooltip.HTML=Csak HTML fájlok megjelenítése
+net.filter.label.CSS=CSS
+net.filter.tooltip.CSS=Csak CSS fájlok megjelenítése
+net.filter.label.JS=JavaScript
+net.filter.tooltip.JS=Csak JavaScript fájlok megjelenítése
+net.filter.label.XHR=XHR
+net.filter.tooltip.XHR=Csak XMLHttpRequest lekérdezések megjelenítése
+net.filter.label.Images=Képek
+net.filter.tooltip.Images=Csak képek megjelenítése
+net.filter.label.Plugins=Bővítmények
+net.filter.tooltip.Plugins=Csak Flash és Silverlight fájlok megjelenítése
+net.filter.label.Media=Média
+net.filter.tooltip.Media=Csak hang- és videofájlok megjelenítése
+net.filter.label.Fonts=Betűtípusok
+net.filter.tooltip.Fonts=Csak betűtípus fájlok megjelenítése
 # LOCALIZATION NOTE (Post, Put): Label (verb) used in the Net panel for detailed info about
 # a network request (displayed when a Net panel entry is expanded). The content of
 # this tab displays sent data (related to an HTTP send method).
@@ -586,11 +644,11 @@ net.jsonviewer.Copy_JSON=\"%S\" másolása JSON-ként
 RequestHeaders=Kérés fejlécek
 ResponseHeaders=Válasz fejlécek
 CachedResponseHeaders=Válasz fejlécek a gyorsítótárból
-PostRequestHeaders=Request Headers From Upload Stream
+PostRequestHeaders=Lekérdezés fejlécek a feltöltési adatfolyamból
 # LOCALIZATION NOTE (net.label.ResponseHeadersFromBFCache):
 # Label (noun) used in the Net panel and displayed instead of Response Headers
 # if the response comes directly from the cache (BFCache).
-net.label.ResponseHeadersFromBFCache=The request was resolved directly from the cache, so we have no response from the server. See below for the cached response.
+net.label.ResponseHeadersFromBFCache=Ez a lekérdezés a gyorsítótárból lett feloldva, így nincs válasz a kiszolgálóról. Alább megtekinthető a gyorsítótárazott válasz.
 # LOCALIZATION NOTE (plural.Limit_Exceeded2): Semicolon list of plural forms.
 # A message displayed in the Net panel when some entries must be removed in the case the maximum number
 # of entries has been reached.
@@ -604,17 +662,18 @@ LimitPrefs=Beállítások
 # examples: In order to change the limit modify 'firebug.extensions.console.logLimit'
 LimitPrefsTitle=Hogy változtass a korláton, módosítsd a következőt: %S
 Refresh=Frissítés
-panel.tip.Refresh=Refresh the panel display
+panel.tip.Refresh=A panel megjelenítésének frissítése
 # LOCALIZATION NOTE (OpenInTab, firebug.tip.Open_In_Tab): Context menu option of source links,
 # stylesheets and net requests to open the underlying URL in a new browser tab
 OpenInTab=Megnyitás új lapon
-firebug.tip.Open_In_Tab=Open the URL in a new browser tab
+firebug.tip.Open_In_Tab=URL megnyitása új lapon
 Open_Response_In_New_Tab=Válasz megnyitása új fülön
-net.tip.Open_Response_In_New_Tab=Open the response in a new browser tab
+net.tip.Open_Response_In_New_Tab=Válasz megtekintése új lapon
 # LOCALIZATION NOTE (Profile): Caption (verb) for reported profile info.
 # (result of JavaScript profiler tool).
 Profile=Futásidő elemzés
 ProfilerStarted=Az elemző már fut. Az eredmény megjelenítéséhez kattints újból a \'Futásidő elemzésre\'.
+ProfilerRequiresTheScriptPanel=A futásidő elemzéshez a Szkript panelt be kell kapcsolni.
 # LOCALIZATION NOTE (plural.Profile_Time2): Semicolon list of plural forms.
 # Caption for reported profile info (result of JavaScript profiler tool).
 # %1 = Number of milliseconds
@@ -629,8 +688,7 @@ TimeHeaderTooltip=A függvényben töltött idő, a belső hívásokkal együtt.
 AvgHeaderTooltip=Átlag idő, beleértve a függvényhívásokat.
 MinHeaderTooltip=Minimum idő, beleértve a függvényhívásokat.
 MaxHeaderTooltip=Maximum idő, beleértve a függvényhívásokat.
-ProfileButton.Enabled.Tooltip=JavaScript futásidő elemzés.
-ProfileButton.Disabled.Tooltip=JavaScript futásidő elemzés (Szkript panel engedélyezése szükséges).
+ProfileButton.Tooltip=JavaScript futásidő elemzése
 Function=Függvény
 Percent=Százalék
 # LOCALIZATION NOTE (Calls, OwnTime, Time, Avg, Min, Max, File): Used in profiler report header
@@ -648,66 +706,95 @@ File=Fájl
 Copy=Másolás
 Cut=Kivágás
 Remove=Eltávolítás
-Delete=Delete
+Delete=Törlés
 Paste=Beilleszt
-SelectAll=Select All
-html.Copy_Node=Copy %S
-html.tip.Copy_Node=Copy the %S node and all its contents to the clipboard
+SelectAll=Mindet kijelöli
+html.Copy_Node=%S másolása
+html.tip.Copy_Node=%S csomópont és minden tartalmának másolása a vágólapra
 CopyInnerHTML=innerHTML másolása
-html.tip.Copy_innerHTML=Copy the contents of the element to the clipboard
+html.tip.Copy_innerHTML=Elem tartalmának másolása a vágólapra
 CopyXPath=XPath másolása
-html.tip.Copy_XPath=Copy the element's XPath to the clipboard
+html.tip.Copy_XPath=Elem XPath útvonalának másolása a vágólapra
 Copy_CSS_Path=CSS útvonal másolása
-html.tip.Copy_CSS_Path=Copy the element's CSS path to the clipboard
+html.tip.Copy_CSS_Path=Elem CSS útvonalának másolása a vágólapra
+# LOCALIZATION NOTE (html.menu.Paste, html.tip.Paste): Context menu item (with subitems).
+# Used in the HTML Panel to paste HTML/SVG/XML/XUL/MathML contents
+# %S = the type of the content to paste (HTML, SVG, XML, XUL or MathML)
+html.menu.Paste=%S beillesztése
+html.tip.Paste=%S beillesztése tartalomként
+# LOCALIZATION NODE (html.menu.Paste_*, html.tip.Paste_*): Context menu items.
+# These items are paste options, and appears as subitems of html.menu.Paste in the context menu.
+html.menu.Paste_Replace_Content=Tartalom cseréje
+html.tip.Paste_Replace_Content=Elem tartalmának lecserélése a vágólapról
+html.menu.Paste_Replace_Node=Csomópont lecserélése
+html.tip.Paste_Replace_Node=HTML csomópont lecserélése a vágólapról
+html.menu.Paste_AsFirstChild=Beszúrás első gyermekként
+html.tip.Paste_AsFirstChild=Beszúrás első gyermekként a vágólapról
+html.menu.Paste_AsLastChild=Beszúrás utolsó gyermekként
+html.tip.Paste_AsLastChild=Beszúrás utolsó gyermekként a vágólapról
+html.menu.Paste_Before=Beszúrás elé
+html.tip.Paste_Before=Beszúrás a csomópont elé
+html.menu.Paste_After=Beszúrás utána
+html.tip.Paste_After=Beszúrás a csomópont után
+# LOCALIZATION NOTE (html.menu.Reload_Frame, html.menu.tip.Reload_Frame):
+# Context menu item of HTML frames
+html.menu.Reload_Frame=Keret újratöltése
+html.menu.tip.Reload_Frame=Keret tartalmának újratöltése
 # LOCALIZATION NOTE (CopyError, console.menu.tip.Copy_Error): Context menu item. Used in the Console
 # panel when clicking an error object.
 CopyLocation=Cím másolása
-clipboard.tip.Copy_Location=Copy the URL of the object's location to the clipboard
-CopyURLParameters=Copy URL Parameters
-net.tip.Copy_URL_Parameters=Copy URL parameters to the clipboard
-CopyPOSTParameters=Copy POST Parameters
-net.tip.Copy_POST_Parameters=Copy POST parameters to the clipboard
+clipboard.tip.Copy_Location=Objektum URL-jének másolása a vágólapra
+CopyURLParameters=URL paraméterek másolása
+net.tip.Copy_URL_Parameters=URL paraméterek másolása a vágólapra
+CopyPOSTParameters=POST paraméterek másolása
+net.tip.Copy_POST_Parameters=POST paraméterek másolása a vágólapra
 CopyLocationParameters=Cím másolása paraméterekkel együtt
-net.tip.Copy_Location_Parameters=Copy the URL incl. the parameters to the clipboard
+net.tip.Copy_Location_Parameters=URL másolása a vágólapra paraméterekkel
 CopyRequestHeaders=Kérés fejlécek másolása
-net.tip.Copy_Request_Headers=Copy the request headers to the clipboard
+net.tip.Copy_Request_Headers=Lekérdezés fejléceinek másolása a vágólapra
 CopyResponseHeaders=Válasz fejlécek másolása
-net.tip.Copy_Response_Headers=Copy the response headers to the clipboard
+net.tip.Copy_Response_Headers=Válasz fejléceinek másolása a vágólapra
 CopyResponse=Válasz törzs másolása
-net.tip.Copy_Response=Copy the response body to the clipboard
+net.tip.Copy_Response=Válasz törzsének másolása a vágólapra
 # LOCALIZATION NOTE (CopyError, console.menu.tip.Copy_Error): Context menu item. Used in the Console
 # panel when clicking an error object.
 CopyError=Hiba másolása
-console.menu.tip.Copy_Error=Copy the error information to the clipboard
+console.menu.tip.Copy_Error=Hibainformációk másolása a vágólapra
 # LOCALIZATION NOTE (CopySource, dom.tip.Copy_Source): Context menu item of. Used in the Console
 # panel when clicking an error object.
 CopySource=Függvény másolása
-dom.tip.Copy_Source=Copy the function's source code to the clipboard
+dom.tip.Copy_Source=Függvény forráskódjának másolása a vágólapra
 # LOCALIZATION NOTE (ShowCallsInConsole): Context menu item of a function object inside the
 # DOM panel and Watch side panel.
 # %S = Name of the function
 # example: Log Calls to "getData"
 # example: Log calls to the function "getData" inside the Console panel
 ShowCallsInConsole=Hívások naplózása ide: \"%S\"
-dom.tip.Log_Calls_To_Function=Log calls to the function "%S" inside the Console panel
+dom.tip.Log_Calls_To_Function="%S" függvény hívásainak naplózása a Konzol panelra
 # LOCALIZATION NOTE (ShowEventsInConsole, html.tip.Show_Events_In_Console):
 # Menu item label used in HTML elements context menu. Allows logging of event information
 # to the console.
 ShowEventsInConsole=Események naplózása
-html.tip.Show_Events_In_Console=Log event information to the console
+html.tip.Show_Events_In_Console=Esemény információk naplózása a konzolra
 # LOCALIZATION NOTE (panel.Enabled, panel.tip.Enabled):
 # Option inside the options menu of activatable panels. Enables/Disables the panel.
 panel.Enabled=Engedélyezés
-panel.tip.Enabled=Toggle the panel activation
+panel.tip.Enabled=Panel ki/bekapcsolása
 # LOCALIZATION NOTE (panel.tooltip.Show_Command_Line_Popup): Tooltip used for a button on main
 # Firebug toolbar. This button allows to open the Command Line within other panels
 # than the Console panel.
-panel.tooltip.Show_Command_Line_Popup=Show Command Line Popup
+panel.tooltip.Show_Command_Line_Popup=Felugró parancssor megjelenítése
 # LOCALIZATION NOTE (console.MethodNotSupported): Message displayed in the Console panel,
 # if a specific method is not supported.
 # %S = Name of the unsupported method
 # example: Firebug console does not support 'bind'
 console.MethodNotSupported=A Firebug konzol nem támogatja a(z) \'%S\' metódust
+# LOCALIZATION NOTE (commandline.errorSourceHeader): Message displayed in the header of the
+# source code where an exception has occured.
+commandline.errorSourceHeader=KIFEJEZÉS KIÉRTÉKELVE A FIREBUG PARANCSSORBAN:
+# LOCALIZATION NOTE (commandline.MethodDisabled): Message displayed in the Console panel,
+# if a disabled method is entered via the Command Line.
+commandline.MethodDisabled=Ez a parancssor funkció ideiglenesen le van tiltva.
 # LOCALIZATION NOTE (commandline.MethodNotSupported): Message displayed in the Console panel,
 # if an unsupported method is entered via the Command Line.
 # %S = Name of the unsupported method
@@ -715,9 +802,9 @@ commandline.MethodNotSupported=A Firebug parancssor nem támogatja a(z) \'%S\' m
 # LOCALIZATION NOTE (commandline.CurrentWindow): Message displayed in the Console panel when
 # cd(someWindow) is run. A space and a representation of the window object is appended
 # internally by Firebug.
-commandline.CurrentWindow=Current window:
+commandline.CurrentWindow=Aktuális ablak:
 # LOCALIZATION NOTE (console.Disable_Break_On_All_Errors, console.Break_On_All_Errors):
-# Tooltip for the "Break on... " button used when the Console panel is selected.
+# Tooltip for the "Break on… " button used when the Console panel is selected.
 console.Disable_Break_On_All_Errors=Ne álljon meg minden hibánál
 console.Break_On_All_Errors=Minden hibánál megáll
 # LOCALIZATION NOTE (console.Break_On_This_Error): Tooltip for the breakpoint besides an error message
@@ -725,10 +812,18 @@ console.Break_On_All_Errors=Minden hibánál megáll
 console.Break_On_This_Error=Megszakítás ennél a hibánál
 # LOCALIZATION NOTE (console.Use_Arrow_keys,_Tab_or_Enter): Hint at the top of the Completion List Popup
 # in the Command Line
-console.Use_Arrow_keys,_Tab_or_Enter=Use Arrow keys, Tab or Enter
+console.Use_Arrow_keys,_Tab_or_Enter=Használja a nyíl, Tab vagy Enter billentyűket
 # LOCALIZATION NOTE (console.JSDisabledInFirefoxPrefs): Hint shown inside the Console panel in the case
 # JavaScript is not available
 console.JSDisabledInFirefoxPrefs=A JavaScript jelenleg le van tiltva a Firefox beállításaiban. Ha szeretné használni a Konzol panelt, kérem engedélyezze az \'Eszközök\' -> \'Beállítások\' -> \'Tartalom\' -> \'JavaScript engedélyezése\' opciót.
+# LOCALIZATION NOTE (console.tip.ScriptPanelMustBeEnabledForTraces): Message shown inside the Console
+# panel instead of a stack trace when it is missing because the script panel is disabled. The text
+# enclosed in <a></a> is a link which enables the Script panel.
+console.ScriptPanelMustBeEnabledForTraces=A Szkript panelt be kell kapcsolni a veremkiíráshoz. <a>Szkript panel bekapcsolása</a>
+# LOCALIZATION NOTE (tooltip.multipleFiltersHint):
+# Hint used for Console and Net panel filter button tooltips describing the shortcut for selecting
+# multiple filters
+tooltip.multipleFiltersHint=Ctrl+kattintással kijelölhet több szűrőt
 # LOCALIZATION NOTE (console.multiHighlightLimitExceeded):
 # Used by the Console panel for arrays. If the user moves the mouse over an array bracket,
 # all elements in the array are highlighted on the page. If there are too many elements
@@ -741,6 +836,81 @@ console.multiHighlightLimitExceeded=Túl sok elem van a tömbben az összes kiem
 # in cases when the current page is an XML document. The text between <a> and </a> is a link,
 # that causes to switch to HTML rendering of the document.
 commandline.disabledForXMLDocs=A Firebug parancssora ki van kapcsolva XML oldalakon. <a>Váltson át HTML-re</a> a bekapcsolásához.
+# LOCALIZATION NOTE (commandline.Use_in_Command_Line): Right-click option for copying a JS value into the variable
+# $p and opening the Command Line.
+commandline.Use_in_Command_Line=Használja a parancssorban
+commandline.tip.Use_in_Command_Line=Ugrás a parancssorra és ez az érték legyen eltárolva a "$p" változóban
+# LOCALIZATION NOTE (commandline.include.includeSuccess): For the include() function. This message is displayed
+# in the Console panel when a remote script evaluation succeeded
+# %S = the filename
+commandline.include.includeSuccess=%S fájl beimportálva.
+# LOCALIZATION NOTE (commandline.include.aliasNotFound): For the include() function. This message is displayed
+# in the Console panel when a requested alias is not found
+# %S = the alias name
+commandline.include.aliasNotFound=A(z) "%S" alias nem található.
+# LOCALIZATION NOTE (commandline.include.loadFail): For the include() function. This message is displayed
+# in the Console panel when the remote script download failed
+# %S = the filename
+commandline.include.loadFail=A következő szkriptet nem lehet betölteni: %S
+# LOCALIZATION NOTE (commandline.include.invalidRequestProtocol): For the include() function. This message is displayed
+# in the Console panel when the user tries to download a script with another scheme than HTTP(S)
+# %S = the filename
+commandline.include.invalidRequestProtocol=Csak a HTTP/HTTPS protokollok támogatottak.
+# LOCALIZATION NOTE (commandline.include.invalidSyntax): For the include() function. This message is displayed
+# in the Console panel when the user tries to execute a non-Javascript file
+# or when the script contains syntax errors
+commandline.include.invalidSyntax=A fájl beimportálása sikertelen, mert hibás a szintaxis. Biztos, hogy a fájl JavaScript-et tartalmaz?
+# LOCALIZATION NOTE (commandline.include.aliasCreated): For the include() function. This message is displayed
+# in the Console panel when a new alias is created successfully
+# %S = the alias name
+commandline.include.aliasCreated="%S" alias létrehozva.
+# LOCALIZATION NOTE (commandline.include.aliasRemoved): For the include() function. This message is displayed
+# in the Console panel when a new alias is removed successfully
+# %S = the alias name
+commandline.include.aliasRemoved="%S" alias törölve.
+# LOCALIZATION NOTE (commandline.include.invalidAliasName): For the include() function. This message is displayed
+# in the Console panel if an invalid alias name (which contains "/" or ".") is provided.
+# %S = the invalid alias name
+commandline.include.invalidAliasName=Az alias nevek nem tartalmazhatnak "." vagy "/" karaktereket; érvénytelen alias név: "%S".
+# LOCALIZATION NOTE (commandline.include.tooLongAliasName): For the include() function. This message is displayed
+# in the Console panel if the provided alias name is too long (i.e. more than 30 characters)
+# %S = the invalid alias name
+commandline.include.tooLongAliasName=Az alias nevek nem tartalmazhatnak 30-nál több karaktert; érvénytelen alias név: "%S".
+# LOCALIZATION NOTE (commandline.include.wrongAliasArgument): For the include() function. This message is displayed
+# in the Console panel if the type of the alias name is invalid (a string is expected)
+commandline.include.invalidAliasArgumentType=Érvénytelen második paraméter; alias nevet kell megadni.
+# LOCALIZATION NOTE (commandline.include.wrongUrlArgument): For the include() function. This message is displayed
+# in the Console panel if the type of the url arguement is invalid (a string or null are expected)
+commandline.include.invalidUrlArgumentType=Érvénytelen URL paraméter.
+# LOCALIZATION NOTE (commandline.include.confirmDelete): For the include() function. This message is displayed
+# in a confirmation dialog when the user wants to delete an alias
+# %S = the name of the alias to delete
+commandline.include.confirmDelete=Biztosan törölni szeretné az aliast: "%S"?
+# LOCALIZATION NOTE (commandline.include.noDefinedAlias): For the include() function. This message is displayed
+# when the user wants to display the aliases table but there no alias is defined.
+commandline.include.noDefinedAlias=(még nincsenek definiálva aliasok)
+commandline.tip.Delete_Alias=Alias törlése
+commandline.tip.Edit_Alias_Name=Alias nevének szerkesztése
+commandline.tip.Edit_Alias_URL=Alias URL-jének szerkesztése
+commandline.tip.Open_In_Scratchpad=Szkript tartalmának megnyitása Scratchpad-ben
+commandline.tip.Include_Script=Szkript letöltése és futtatása
+commandline.label.DeleteAlias=Alias törlése
+commandline.label.EditAliasName=Alias nevének szerkesztése
+commandline.label.EditAliasURL=Alias URL szerkesztésw
+commandline.label.OpenInScratchpad=Megnyitás Scratchpad-ben
+commandline.label.IncludeScript="%S" importálása
+# LOCALIZATION NOTE (Do_not_show_this_message_again):
+# Message within a confirmation dialog that is displayed when deleting things.
+# This message is displayed next to a check-box that can be used to disabled this
+# confirmation.
+#
+# NOTE to translators: this message was originally taken from cookies.msg.Do_not_show_this_message_again
+Do_not_show_this_message_again=Ne jelenjen meg többször ez az üzenet
+# LOCALIZATION NOTE (scratchpad.loading, scratchpad.failLoading)
+# Used when Firebug downloads a remote script and wants to display it in Scratchpad
+# The messages appears as Javascript Comments in Scratchpad
+scratchpad.loading=Betöltés, kérem várjon…
+scratchpad.failLoading=Hiba a szkript betöltésekor.
 # LOCALIZATION NOTE (net.sizeinfo.Response_Body, net.sizeinfo.Post_Body, net.sizeinfo.Total_Sent,
 # net.sizeinfo.Total_Received, net.sizeinfo.Including_Headers):
 # Labels used for a detailed size info tooltip. The tooltip is displayed, if the mouse hovers over
@@ -759,22 +929,22 @@ net.responseSizeLimitMessage=Elérte a Firebug a válasz méretkorlátját. Katt
 net.postDataSizeLimitMessage=A POST adat mérete elérte a korlátot, ezért a Firebug eltávolította.
 net.Break_On_XHR=Megállítás XHR esetén
 net.label.Parameters=Paraméterek
-net.label.Parts=Parts???
+net.label.Parts=Részegységek
 net.label.Source=Forrás
 # LOCALIZATION NOTE (net.label.Resend): Label for context menu item. Used when clicking
 # on a HTTP request (in the Console or Net panel) to re-send it with the same arguments.
 net.label.Resend=Újraküldés
-net.tip.Resend=Send the request again
+net.tip.Resend=Küldje újra a lekérdezést
 # LOCALIZATION NOTE (net.option.Disable_Browser_Cache, net.option.tip.Disable_Browser_Cache):
 # Net panel option (located in tab's option menu). If set to true, the browser's HTTP cache is disabled
 net.option.Disable_Browser_Cache=Böngésző gyorsítótár letiltása
-net.option.tip.Disable_Browser_Cache=Disable the browser's HTTP cache
+net.option.tip.Disable_Browser_Cache=A böngésző HTTP gyorsítótárának letiltása
 # LOCALIZATION NOTE (net.option.Show_Paint_Events, net.option.tip.Show_Paint_Events):
 # Net panel option (located in tab's option menu). If set to true, the Net panel displays
 # MozAfterPaint events.
 # See also: http://www.softwareishard.com/blog/firebug/watching-mozafterpaint-in-firebug/
 net.option.Show_Paint_Events=Rajzolási események megjelenítése
-net.option.tip.Show_Paint_Events=Show MozAfterPaint events as green lines inside the timeline
+net.option.tip.Show_Paint_Events=MozAfterPaint események jelölése zöld vonallal az idővonalon
 # LOCALIZATION NOTE (net.option.Show_BFCache_Responses, net.option.tip.Show_BFCache_Responses):
 # Net panel option (located in tab's option menu). If set to true, the Net panel also displays responses coming from
 # BFCache (back-forward cache). See also: https://developer.mozilla.org/En/Working_with_BFCache
@@ -783,22 +953,31 @@ net.option.tip.Show_BFCache_Responses=A BFCache-ből (Vissza-Előre gyorsítót
 # LOCALIZATION NOTE (script.Break_On_Next, script.Disable_Break_On_Next):
 # Tooltip used for the Break On Next button inside panel toolbar of the Script panel.
 # (breaking on next executed JavaScript statement)
-script.Break_On_Next=Break On Next
-script.Disable_Break_On_Next=Töréspont kikapcsolása legközelebb
+script.Break_On_Next=Leállítás a következő utasításnál
+script.Disable_Break_On_Next=Ne álljon le a következő utasításnál
 ShowHttpHeaders=HTTP fejlécek megjelenítése
 # LOCALIZATION NOTE (plural.Request_Count2): Semicolon list of plural forms.
 # A label used in the Net panel. Displays the number of HTTP requests executed by the current page.
 # %1 = Number of requests
 # example: 21 requests
 plural.Request_Count2=%1$S kérés;%1$S kérés
-FromCache=gyorsítótárból
+# LOCALIZATION NOTE (net.summary.from_cache):
+# Label used in the Net panel's request summary. Displays the summarized response size coming from cache for all HTTP requests.
+net.summary.from_cache=%S a gyorsítótárból
+# LOCALIZATION NOTE (net.summary.tip.request_count, net.summary.tip.total_size,
+# net.summary.tip.total_cached_size, net.summary.tip.total_request_time):
+# Labels used for the tooltips in the Net panel's request summary
+net.summary.tip.request_count=Lekérdezések száma
+net.summary.tip.total_size=Az összes lekérdezés teljes mérete
+net.summary.tip.total_cached_size=Az összes lekérdezés mérete a gyorsítótárból
+net.summary.tip.total_request_time=Az összes lekérdezés betöltéséhez és az "onload" esemény elindulásához szükséges idő
 StopLoading=Betöltés leállítása
-net.tip.Stop_Loading=Stop loading the request
+net.tip.Stop_Loading=Lekérdezés betöltésének megszakítása
 LargeData=(Nagyon nagy adat)
 ShowComputedStyle=Számított stíluslapok megjelenítése
 StyleGroup-text=Szöveg
 StyleGroup-background=Háttér
-StyleGroup-box=Doboz modell
+StyleGroup-box=Dobozmodell
 StyleGroup-layout=Elrendezés
 StyleGroup-other=Egyéb
 Dimensions=%S x %S
@@ -806,32 +985,48 @@ Dimensions=%S x %S
 # Context menu item for color values inside the CSS panel.
 # Copies the color value to the clipboard.
 CopyColor=Szín másolása
-css.tip.Copy_Color=Copy the color to the clipboard
+css.tip.Copy_Color=Szín másolása a vágólapra
 # LOCALIZATION NOTE (CopyImageLocation, css.tip.Copy_Image_Location,
 # OpenImageInNewTab, css.tip.Open_Image_In_New_Tab):
 # Context menu items for images inside the CSS panel.
 # Allow copying the URL of an image to the clipboard and opening it in a new browser tab
 CopyImageLocation=Kép címének másolása
-css.tip.Copy_Image_Location=Copy the URL of the image to the clipboard
+css.tip.Copy_Image_Location=Kép URL-jének másolása a vágólapra
 OpenImageInNewTab=Kép megnyitása új fülön
-css.tip.Open_Image_In_New_Tab=Open the image in a new browser tab
-# LOCALIZATION NOTE (callstack.option.Omit_Object_Path_Stack, callstack.option.tip.Omit_Object_Path_Stack):
+css.tip.Open_Image_In_New_Tab=Kép megnyitása új lapon
+# LOCALIZATION NOTE (OmitObjectPathStack, callstack.option.tip.Omit_Object_Path_Stack):
 # Stack side panel option (located in tab's option menu). If set to true,
 # the object path stack won't be displayed.
 OmitObjectPathStack=Eszköztár verem kihagyása
-callstack.option.tip.Omit_Object_Path_Stack=Do not display the object path stack
+callstack.option.tip.Omit_Object_Path_Stack=Ne jelenjen meg az objektum útvonal verem
 Load_Original_Source=Eredeti forrás betöltése
-css.tip.Load_Original_Source=Discard the changes and load the original CSS
+css.tip.Load_Original_Source=Változtatások elvetése és eredeti CSS betöltése
+# LOCALIZATION NOTE (callstack.option.Show_Arguments, callstack.option.tip.Show_Arguments):
+# Stack side panel option (located in tab's option menu). If set to true,
+# function arguments are displayed
+callstack.option.Show_Arguments=Paraméterek megjelenítése
+callstack.option.tip.Show_Arguments=Függvények paramétereinek megjelenítése
 # LOCALIZATION NOTE (Copy_Rule_Declaration, css.tip.Copy_Rule_Declaration):
 # Menu item label and tooltip used in CSS panel/Style side panel context menu.
 # Allows copying the current CSS rule including all its properties to the clipboard.
 Copy_Rule_Declaration=Szabály deklarációjának másolása
-css.tip.Copy_Rule_Declaration=Copy the rule including all its properties to the clipboard
+css.tip.Copy_Rule_Declaration=A szabály másolása a vágólapra az összes tulajdonságával
 # LOCALIZATION NOTE (Copy_Style_Declaration, css.tip.Copy_Style_Declaration):
 # Menu item label and tooltip used in CSS panel/Style side panel context menu.
 # Allows copying the current CSS rule's properties to the clipboard.
 Copy_Style_Declaration=Stílus deklaráció másolása
-css.tip.Copy_Style_Declaration=Copy the rule's properties to the clipboard
+css.tip.Copy_Style_Declaration=A szabály tulajdonságainak másolása a vágólapra
+# LOCALIZATION NOTE (css.label.Copy_Property_Declaration, css.tip.Copy_Property_Declaration,
+# css.label.Copy_Property_Name, css.tip.Copy_Property_Name, css.label.Copy_Property_Value,
+# css.tip.Copy_Property_Value):
+# Menu item labels and tooltips used in CSS panel/Style side panel context menu.
+# Allow copying the current CSS property's declaration/name/value to the clipboard.
+css.label.Copy_Property_Declaration=Tulajdonság másolása a vágólapra
+css.tip.Copy_Property_Declaration=A tulajdonság deklarációjának másolása a vágólapra
+css.label.Copy_Property_Name=Tulajdonság nevének másolása
+css.tip.Copy_Property_Name=A tulajdonság nevének másolása a vágólapra
+css.label.Copy_Property_Value=Tulajdonság értékének másolása
+css.tip.Copy_Property_Value=A tulajdonság értékének másolása a vágólapra
 # LOCALIZATION NOTE (plural.Error_Count2): Semicolon list of plural forms.
 # A label used in for Firebug Start Button. Displays the number of JavaScript errors found by Firebug.
 # %1 = Number of errors
@@ -854,10 +1049,6 @@ With_Scope=Ezzel
 Call_Scope=Hívás
 # Window: the scope inside of a Javascript window object.
 Window_Scope=Ablak
-Logs=Napló
-Options=Opciók
-Copy_Stack=Verem másolása
-Copy Exception=Kivétel másolása
 # LOCALIZATION NOTE (requestinfo.Blocking, requestinfo.Resolving, requestinfo.Connecting,
 # requestinfo.Sending, requestinfo.Waiting, requestinfo.Receiving, requestinfo.ContentLoad,
 # requestinfo.WindowLoad):
@@ -881,17 +1072,17 @@ search.Firebug_Search=Firebug keresés
 # search.Multiple_Files, search.Use_Regular_Expression):
 # Labels used within an options menu for the search box. This menu is displayed if the search box is focused.
 search.Next=Következő
-search.tip.Next=Search for the next match
+search.tip.Next=Következő talált keresése
 search.Previous=Előző
-search.tip.Previous=Search for the previous match
+search.tip.Previous=Előző találat keresése
 search.Case_Sensitive=Kis- és nagybetűk erőltetett megkülönböztetése
-search.tip.Case_Sensitive=Consider the case when searching
+search.tip.Case_Sensitive=Kis- és nagybetűk megkülönböztetése kereséskor
 search.Case_Insensitive=Kis- és nagybetűk figyelmen kívül hagyása
-search.tip.Case_Insensitive=Ignore the case when searching
+search.tip.Case_Insensitive=Ne különböztesse meg a kis- és nagybetűket kereséskor
 search.Multiple_Files=Több fájl
-search.tip.Multiple_Files=Search inside all files related to this panel
+search.tip.Multiple_Files=Keresés a panelban látható összes fájlban
 search.Use_Regular_Expression=Reguláris kifejezés használata
-search.tip.Use_Regular_Expression=Interpret the entered string as a regular expression when searching
+search.tip.Use_Regular_Expression=A keresett szöveg értelmezése reguláris kifejezésként
 # LOCALIZATION NOTE (search.html.CSS_Selector, search.net.Headers, search.net.Parameters, search.net.Response_Bodies,
 # search.script.Multiple_Files):
 # Labels used within an options menu for the search box. This menu is displayed if the search box is focused.
@@ -900,9 +1091,9 @@ search.html.CSS_Selector=CSS szelektor
 search.net.Headers=Fejlécek
 search.net.Parameters=Paraméterek
 search.net.Response_Bodies=Válasz törzsek
-search.net.tip.Response_Bodies=Search also in response bodies
+search.net.tip.Response_Bodies=Keresés a válaszok törézsében is
 firebug.console.Persist=Rögzít
-firebug.console.Do_Not_Clear_On_Reload2=Do not clear the panel on page reload
+firebug.console.Do_Not_Clear_On_Reload2=Ne ürítse ki a panelt az oldal újratöltésekor
 firebug.console.Show_All_Log_Entries=Összes naplóbejegyzés megjelenítése
 firebug.console.Errors=Hibák
 firebug.console.Filter_by_Errors=Szűrés hibák alapján
@@ -912,119 +1103,123 @@ firebug.console.Info=Infók
 firebug.console.Filter_by_Info=Szűrés infók alapján
 firebug.console.Debug_Info=Hibakeresési infók
 firebug.console.Filter_by_Debug_Info=Szűrés hibakeresési infók alapján
-firebug.Deactivate_Firebug=Deactivate Firebug
-firebug.tip.Deactivate_Firebug=Deactivate Firebug for the current website
+firebug.Deactivate_Firebug=Firebug kikapcsolása
+firebug.tip.Deactivate_Firebug=Firebug kikapcsolása az aktuális weboldalon
+# LOCALIZATION NOTE (firebug.tip.Toggle_Side_Panels): A tooltip used for side panels visibility
+# toggle button. The button is available on the right side of panel's toolbar (only for panels
+# that have a side panel).
+firebug.tip.Toggle_Side_Panels=Oldalpanelok láthatóságának ki/bekapcsolása
 firebug.ShowFirebug=Firebug megnyitása
-firebug.menu.tip.Open_Firebug=Show the Firebug UI
+firebug.menu.tip.Open_Firebug=Firebug UI megjelenítése
 firebug.HideFirebug=Firebug elrejtése
-firebug.menu.tip.Minimize_Firebug=Minimize Firebug, but keep it active
-firebug.FocusFirebug=Focus Firebug Window
-firebug.menu.tip.Focus_Firebug=Focus Detached Firebug Window
+firebug.menu.tip.Minimize_Firebug=Firebug levitele kis méretbe, de maradjon aktív
+firebug.FocusFirebug=Fókuszáljon a Firebug ablakra
+firebug.menu.tip.Focus_Firebug=Fókuszálás a leválasztott Firebug ablakra
 firebug.menu.Enable_All_Panels=Az összes panel engedélyezése
-firebug.menu.tip.Enable_All_Panels=Enable all activable panels
+firebug.menu.tip.Enable_All_Panels=Az összes panel bekapcsolása
 firebug.menu.Disable_All_Panels=Az összes panel letiltása
-firebug.menu.tip.Disable_All_Panels=Disable all activable panels
+firebug.menu.tip.Disable_All_Panels=Az összes panel kikapcsolása
 firebug.menu.Customize_shortcuts=Billentyűparancsok testreszabása
-firebug.menu.tip.Customize_Shortcuts=Customize Firebug's internal key bindings
+firebug.menu.tip.Customize_Shortcuts=A Firebug belső billentyűkombinációinak testreszabása
 firebug.Options=Beállítások
-firebug.menu.tip.Options=Global Firebug preferences
+firebug.menu.tip.Options=Általános Firebug beállítások
 firebug.menu.Enable_Accessibility_Enhancements=Kisegítő lehetőségek bekapcsolása
-firebug.menu.tip.Enable_Accessibility_Enhancements=Enable full control via keyboard and other accessibility enhancements
-firebug.menu.Activate_Same_Origin_URLs2=Activate For Same Origin URLs
-firebug.menu.tip.Activate_Same_Origin_URLs=Activate Firebug for URLs matching the same origin policy
+firebug.menu.tip.Enable_Accessibility_Enhancements=Teljes vezérlés engedélyezése billentyűzettel, valamint további könnyű hozzáférést segítő lehetőségek
+firebug.menu.Activate_Same_Origin_URLs2=Bekapcsolás azonos forrás URL-ekhez
+firebug.menu.tip.Activate_Same_Origin_URLs=Firebug bekapcsolása az azonos forrás URL szabály alapján
 firebug.menu.Reset_All_Firebug_Options=Az összes beállítás visszaállítása
-firebug.menu.tip.Reset_All_Firebug_Options=Reset all Firebug preferences to their default values
+firebug.menu.tip.Reset_All_Firebug_Options=Az összes Firebug beállítás visszaállítása az alapértelmezett értékére
 firebug.menu.Firebug_Online=Firebug Online
-firebug.menu.tip.Firebug_Online=Websites related to Firebug
-firebug.menu.Extensions=Firebug Extensions...
-firebug.menu.tip.Extensions=Download and Install Firebug Extensions
-firebug.menu.Vertical_Panels=Vertical Panels
-firebug.menu.tip.Vertical_Panels=Toggle the layout of the Firebug main and side panels
-firebug.menu.Show_Info_Tips=Show Info Tips
-firebug.menu.tip.Show_Info_Tips=Show popups with information about the hovered element
+firebug.menu.tip.Firebug_Online=A Firebuggal kapcsolatos weboldalak
+firebug.menu.Extensions=Firebug kiegészítők…
+firebug.menu.tip.Extensions=Firebug kiegészítő letöltése és a telepítése
+firebug.menu.Vertical_Panels=Függőleges panelok
+firebug.menu.tip.Vertical_Panels=A Firebug fő- és oldalpanelok elrendezésének beállítása
+firebug.menu.Show_Info_Tips=Gyorstippek megjelenítése
+firebug.menu.tip.Show_Info_Tips=Gyorstippek megjelenítése, amikor az elemek fölé viszi a kurzort
 firebug.Show_Error_Count=Hibaszámláló megjelenítése
-firebug.menu.tip.Show_Error_Count=Show the number of errors logged inside the console
+firebug.menu.tip.Show_Error_Count=A naplózott hibák számának megjelenítése a konzolon
 firebug.TextSize=Szöveg nagyítása
-firebug.menu.tip.Text_Size=Change the text size used in Firebug
+firebug.menu.tip.Text_Size=A Firebugban használt betűméret módosítása
 firebug.IncreaseTextSize=Nagyítás
-firebug.menu.tip.Increase_Text_Size=Increase the text sizes used in Firebug
+firebug.menu.tip.Increase_Text_Size=A Firebugban használt betűméret növelése
 firebug.DecreaseTextSize=Kicsinyítés
-firebug.menu.tip.Decrease_Text_Size=Decrease the text sizes used in Firebug
+firebug.menu.tip.Decrease_Text_Size=A Firebugban használt betűméret csökkentése
 firebug.NormalTextSize=Visszaállítás
-firebug.menu.tip.Normal_Text_Size=Reset the text size used in Firebug to the default
-firebug.Website=Firebug honlap...
-firebug.menu.tip.Website=Open the official Firebug website
-firebug.help=Help...
-firebug.menu.tip.help=Open the page with links to pages explaining Firebug
-firebug.Documentation=Dokumentáció...
-firebug.menu.tip.Documentation=Open the documentation about Firebug
-firebug.KeyShortcuts=Gyorsbillentyűk...
-firebug.menu.tip.Key_Shortcuts=Open the list of mouse and keyboard shortcuts available in Firebug
-firebug.Forums=Vita fórum...
-firebug.menu.tip.Forums=Open the discussion group site
-firebug.Issues=Hibabejelentő...
-firebug.menu.tip.Issues=Open the issue tracker site
-firebug.Donate=Támogatás...
-firebug.menu.tip.Donate=Open the contribution site
-firebug.About=Névjegy...
-firebug.menu.tip.About=Information about Firebug
-ProfileJavaScript=Profile JavaScript
-firebug.menu.tip.Profile_JavaScript=Profile JavaScript execution time
+firebug.menu.tip.Normal_Text_Size=A Firebugban használt betűméret visszaállítása az alapértékre
+firebug.Website=Firebug honlap…
+firebug.menu.tip.Website=A hivatalos Firebug weboldal megnyitása
+firebug.help=Súgó…
+firebug.menu.tip.help=A Firebug használatával kapcsolatos segítséget tartalmazó oldal megnyitása
+firebug.Documentation=Dokumentáció…
+firebug.menu.tip.Documentation=A Firebuggal kapcsolatos dokumentáció megnyitása
+firebug.KeyShortcuts=Gyorsbillentyűk…
+firebug.menu.tip.Key_Shortcuts=A Firebugban elérhető egér- és billentyűkombinációk listájának megnyitása
+firebug.Forums=Vita fórum…
+firebug.menu.tip.Forums=Fórumoldal megnyitása
+firebug.Issues=Hibabejelentő…
+firebug.menu.tip.Issues=Hibajelentő oldal megnyitása
+firebug.Donate=Támogatás…
+firebug.menu.tip.Donate=A közreműködők oldal megnyitása
+firebug.About=Névjegy…
+firebug.menu.tip.About=Információk a Firebugról
+ProfileJavaScript=JavaScript futásidő elemzése
+firebug.menu.tip.Profile_JavaScript=JavaScript futásidő elemzés készítése
 firebug.Search=Keresés
-firebug.menu.tip.Search=Set focus to the search field
+firebug.menu.tip.Search=Keresőmező fókuszálása
 # Firebug shortcuts
 firebug.shortcut.reenterCommand.label=Parancs megismétlése
-firebug.shortcut.tip.reenterCommand=Re-enter the last command into the Command Line
+firebug.shortcut.tip.reenterCommand=Előző parancs beírása újból a parancssorba
 firebug.shortcut.toggleInspecting.label=Vizsgálat ki/bekapcsolása
-firebug.shortcut.tip.toggleInspecting=Enable/disable the Inspector
+firebug.shortcut.tip.toggleInspecting=Elemző ki/bekapcsolása
 firebug.shortcut.toggleQuickInfoBox.label=Gyors infó doboz ki/bekapcsolása
-firebug.shortcut.tip.toggleQuickInfoBox=Enable/disable the display of a panel with information about the currently inspected element
+firebug.shortcut.tip.toggleQuickInfoBox=Az aktuálisan elemzett elemről megjelenő információs panel ki/bekapcsolása
 firebug.shortcut.toggleProfiling.label=Mérés ki/bekapcsolása
-firebug.shortcut.tip.toggleProfiling=Enable/disable the JavaScript Profiler
+firebug.shortcut.tip.toggleProfiling=JavaScript futásidő elemző ki/bekapcsolása
 firebug.shortcut.focusCommandLine.label=Fókuszálás a parancssorra
-firebug.shortcut.tip.focusCommandLine=Open Firebug and set the focus to the Command Line / toggle the Command Line Popup
+firebug.shortcut.tip.focusCommandLine=Firebug megnyitása és a fókusz parancssorba helyezése / felugró parancssor ki/bekapcsolása
 firebug.shortcut.focusFirebugSearch.label=Fókuszálás a Firebug keresőre
-firebug.shortcut.tip.focusFirebugSearch=Set the focus to the search field
+firebug.shortcut.tip.focusFirebugSearch=Fókuszálás a keresőmezőre
 firebug.shortcut.focusWatchEditor.label=Fókuszálás a Figyelő szerkesztőre
-firebug.shortcut.tip.focusWatchEditor=Switch to the Script panel and set the focus to the field for entering a new watch expression
+firebug.shortcut.tip.focusWatchEditor=Átváltás a Szkript panelra és a fókusz beállítása az új figyelő kifejezés mezőre
 firebug.shortcut.focusLocation.label=Fókuszálás a címsorra
-firebug.shortcut.tip.focusLocation=Open the Location Menu
+firebug.shortcut.tip.focusLocation=Helyzet menü megnyitása
 firebug.shortcut.nextObject.label=Következő objektum
-firebug.shortcut.tip.nextObject=Select the next object in the element path of a panel
+firebug.shortcut.tip.nextObject=Következő objektum megnyitása a panelon
 firebug.shortcut.previousObject.label=Előző objektum
-firebug.shortcut.tip.previousObject=Select the previous object in the element path of a panel
+firebug.shortcut.tip.previousObject=Előző objektum megnyitása a panelon
 firebug.shortcut.customizeFBKeys.label=Firebug billentyűparancsok testreszabása
-firebug.shortcut.tip.customizeFBKeys=Open the Firebug Shortcut Bindings dialog
+firebug.shortcut.tip.customizeFBKeys=Firebug billentyűparancsok ablak megnyitása
 firebug.shortcut.detachFirebug.label=Firebug megnyitása új ablakban
-firebug.shortcut.tip.detachFirebug=Detach Firebug into its own window
+firebug.shortcut.tip.detachFirebug=Firebug leválasztása külön ablakba
 firebug.shortcut.leftFirebugTab.label=Váltás a baloldali Firebug panelra
-firebug.shortcut.tip.leftFirebugTab=Switch to the Firebug panel to the left
+firebug.shortcut.tip.leftFirebugTab=A Firebug panel rögzítése a baloldalra
 firebug.shortcut.rightFirebugTab.label=Váltás a jobboldali Firebug panelra
-firebug.shortcut.tip.rightFirebugTab=Switch to the Firebug panel to the right
+firebug.shortcut.tip.rightFirebugTab=A Firebug panel rögzítése a jobboldalra
 firebug.shortcut.toggleFirebug.label=Firebug megnyitása
-firebug.shortcut.tip.toggleFirebug=Open/Minimize Firebug UI
-firebug.shortcut.closeFirebug.label=Deactivate Firebug
-firebug.shortcut.tip.closeFirebug=Deactivate Firebug for the current website
+firebug.shortcut.tip.toggleFirebug=Firebug UI megnyitása/kis méret
+firebug.shortcut.closeFirebug.label=Firebug kikapcsolása
+firebug.shortcut.tip.closeFirebug=Firebug kikapcsolása az aktuális weboldalon
 firebug.shortcut.previousFirebugTab.label=Előző Firebug fül
-firebug.shortcut.tip.previousFirebugTab=Switch to the previously selected Firebug panel
+firebug.shortcut.tip.previousFirebugTab=Váltás az előzőleg kiválasztott Firebug panelra
 firebug.shortcut.clearConsole.label=Konzol ürítése
-firebug.shortcut.tip.clearConsole=Remove all logs from the console
+firebug.shortcut.tip.clearConsole=Az összes napló eltávolítása a konzolról
 firebug.shortcut.openTraceConsole.label=Figyelő konzol megnyitása
-firebug.shortcut.tip.openTraceConsole=Open the FBTrace Console
+firebug.shortcut.tip.openTraceConsole=FBTrace konzol megnyitása
 firebug.shortcut.navBack.label=Vissza
-firebug.shortcut.tip.navBack=Switch to the previous panel or location list item of the navigation history
+firebug.shortcut.tip.navBack=Váltás az előző panelra vagy a helylista elemre a navigációs előzményekben
 firebug.shortcut.navForward.label=Előre
-firebug.shortcut.tip.navForward=Switch to the next panel or location list item of the navigation history
+firebug.shortcut.tip.navForward=Váltás a következő panelra vagy a helylista elemre a navigációs előzményekben
 firebug.shortcut.increaseTextSize.label=Szövegméret növelése
-firebug.shortcut.tip.increaseTextSize=Increase the text sizes used in Firebug
+firebug.shortcut.tip.increaseTextSize=A Firebugban használt betűk méretének növelése
 firebug.shortcut.decreaseTextSize.label=Szövegméret csökkentése
-firebug.shortcut.tip.decreaseTextSize=Decrease the text sizes used in Firebug
+firebug.shortcut.tip.decreaseTextSize=A Firebugban használt betűk méretének csökkentése
 firebug.shortcut.normalTextSize.label=Normál szövegméret
-firebug.shortcut.tip.normalTextSize=Reset the text sizes used in Firebug to the default
-firebug.shortcut.help.label=Open help
-firebug.shortcut.tip.help=Open the page answering the frequently asked questions
-firebug.shortcut.toggleBreakOn.label=Toggle Break On ...
-firebug.shortcut.tip.toggleBreakOn=Enable/disable stopping the script execution on specific events occurring inside a panel
+firebug.shortcut.tip.normalTextSize=A Firebugban használt betűk méretének visszaállítása az alapértékre
+firebug.shortcut.help.label=Súgó megnyitása
+firebug.shortcut.tip.help=Gyakran ismételt kérdések oldal megnyitása
+firebug.shortcut.toggleBreakOn.label=Töréspont ki/bekapcsolása…
+firebug.shortcut.tip.toggleBreakOn=Szkript futásának leállítása bizonyos események bekövetkezésekor a panelon
 firebug.panel_selector=Panel kiválasztó
 customizeShortcuts=Firebug billentyűparancsok beállítása
 # A11y Chrome Labels (not visible, spoken by screen readers)
@@ -1187,7 +1382,7 @@ confirmation.Edit_CSS_Source=A már meglévő CSS módosításai el fognak veszn
 # Console messages
 warning.Console_must_be_enabled=Engedélyezni kell a konzolt.
 warning.Command_line_blocked?=A parancssor blokkolva?
-warning.dollar_change=The console command line function $() has changed meaning from $=getElementById(id) to $=querySelector(selector). You might try $("#%S") instead.
+warning.dollar_change=A konzol parancssor $() függvénynek megváltozott a feloldása a $=getElementById(id)-ról $=querySelector(selector)-ra. Megpróbálhatná így: $("#%S").
 message.Reload_to_activate_window_console=Frissítsen, hogy aktiválódjon a konzol.
 # LOCALIZATION NOTE (message.sourceNotAvailableFor, message.The_resource_from_this_URL_is_not_text):
 # An error message displayed in the Script panel when a source can't be displayed
@@ -1227,13 +1422,13 @@ script.suggestion.all_scripts_filtered=Ellenőrizze a szkript szűrés beállít
 # LOCALIZATION NOTE (script.warning.no_system_source_debugging, script.suggestion.no_system_source_debugging):
 # Message displayed in the Script panel, if the page opened is accessed via a chrome URL.
 # The suggestion message represents an advice how to solve the problem.
-script.warning.no_system_source_debugging=System sources can't be debugged
-script.suggestion.no_system_source_debugging=Firebug currently can't be used to debug user agent internal files. See <a>issue 5110</a> for the reason.
+script.warning.no_system_source_debugging=A rendszererőforrásokban nem lehet hibakeresést indítani
+script.suggestion.no_system_source_debugging=A Firebug jelenleg nem tud hibakeresést végezni a böngésző belső fájljain. Tekintse meg az <a>5110. számú hibát</a> a részletekért.
 # LOCALIZATION NOTE (script.warning.debugger_active, script.suggestion.debugger_active):
 # Message displayed in the Script panel, if the page doesn't include any JavaScript.
 # The suggestion message represents an advice how to solve the problem.
 script.warning.no_javascript=Nincs JavaScript az oldalon
-script.suggestion.no_javascript2=If <script> tags have a "type" attribute, it should equal "text/javascript" or "application/javascript". Also scripts must be parsable (syntactically correct).
+script.suggestion.no_javascript2=Ha a <script> címkének van "type" attribútuma, akkor abban "text/javascript" vagy "application/javascript" értéknek kell szerepelnie, valamint a szkriptnek szintaktikailag helyesnek kell lennie.
 # LOCALIZATION NOTE (script.warning.debugger_active, script.suggestion.debugger_active):
 # Message displayed in the Script panel, if the page is opened in different tabs/windows and
 # the debugger is already halted at a breakpoint inside another tab/window.
@@ -1243,6 +1438,11 @@ script.suggestion.debugger_active=A hibakereső jelenleg leállt egy töréspont
 script.button.Go_to_that_page=Ugrás az oldalra
 script.warning.debugger_not_activated=A hibakereső nincs aktiválva
 script.suggestion.debugger_not_activated=A hibakereső nincs aktiválva
+# LOCALIZATION NOTE (script.Script_panel_must_be_enabled): Adds a parenthetical note to a tooltip
+# about the Script panel having to be enabled.
+# %S = original message
+# example: "Profile JavaScript execution time (Script panel must be enabled)"
+script.Script_panel_must_be_enabled=%S (Be kell kapcsolni a Szkript panelt)
 # firebug.dtd
 firebug.Firebug=Firebug
 firebug.Close=Bezárás
@@ -1257,14 +1457,14 @@ firebug.Copy_the_script_as_a_bookmarklet=Szkript másolása könyvvjelzőbe
 firebug.Insert_a_previously_entered_command=Előzőleg beírt parancs beszúrása
 firebug.AlwaysOpenInWindow=Mindig új ablakban nyíljon meg
 firebug.OpenWith=Megnyitás szerkesztővel
-firebug.menu.tip.Open_With=Open the content in an external editor
-firebug.Permissions=Oldalak...
+firebug.menu.tip.Open_With=Tartalom szerkesztése külső szerkesztőben
+firebug.Permissions=Oldalak…
 firebug.Configure_Editors=Szerkesztők beállítása
-script.tip.Script_Type=Filter on script type
-script.tip.Script_Filter_Static=Just display scripts loaded together with the page
-script.tip.Script_Filter_Evals=Display scripts loaded together with the page and scripts created via eval()
-script.tip.Script_Filter_Events=Display scripts loaded together with the page, scripts created via eval() and event listeners
-script.tip.Script_Filter_All=Display all kinds of scripts
+script.tip.Script_Type=Szűrés szkript típusra
+script.tip.Script_Filter_Static=Csak az oldallal együtt betöltött szkriptek megjelenítése
+script.tip.Script_Filter_Evals=Az oldallal együtt betöltött és az eval() által létrehozott szkriptek megjelenítése
+script.tip.Script_Filter_Events=Az oldallal együtt betöltött, az eval() és az eseménykezelők által létrehozott szkriptek megjelenítése
+script.tip.Script_Filter_All=Az összes szkript típus megjelenítése
 # LOCALIZATION NOTE (firebug.labelWithShortcut):
 # Label for an item incl. assigned keyboard shortcut
 # example: Continue (F8)
@@ -1274,18 +1474,18 @@ firebug.labelWithShortcut=%S (%S)
 # firebug.StepOver, script.tip.Step_Over, firebug.StepInto, script.tip.Step_Into,
 # firebug.StepOut, script.tip.Step_Out, firebug.RunUntil, script.tip.Run_Until):
 # Labels used for debugger options available in the Script panel.
-script.Rerun=Rerun
-script.tip.Rerun=Rerun the current function call stack
-script.Continue=Continue
-script.tip.Continue=Continue the JavaScript execution
-script.Step_Over=Step Over
-script.tip.Step_Over=Execute the next command
-script.Step_Into=Step Into
-script.tip.Step_Into=Execute the next command and jump into functions
-script.Step_Out=Step Out
-script.tip.Step_Out=Execute the rest of the function's body and returns to its caller
+script.Rerun=Újrafuttatás
+script.tip.Rerun=Az aktuális függvényhívási verem újrafuttatás
+script.Continue=Folytatás
+script.tip.Continue=Folytatja a JavaScript futását
+script.Step_Over=Átlépés
+script.tip.Step_Over=A következő parancs futtatása
+script.Step_Into=Belépés
+script.tip.Step_Into=A következő parancs futtatása és belépés a függvényekbe
+script.Step_Out=Kilépés
+script.tip.Step_Out=A függvény futtatása a végéig és visszatérés a hívó sorhoz
 firebug.RunUntil=Futtatás eddig a sorig
-script.tip.Run_Until=Execute the JavaScript until the specified line
+script.tip.Run_Until=JavaScript futtatása az adott sorig
 # LOCALIZATION NOTE (firebug.Inspect, firebug.InspectElement, firebug.InspectElementWithFirebug)
 # Labels for Firebug Inspector. Used by a button (available in Firefox Customize Toolbar dialog)
 # and also page context menu. As soon as built-in inspector is having its own "Inspect Element"
@@ -1300,9 +1500,6 @@ firebug.Profile=Futásidő elemzés
 firebug.Clear=Ürítés
 firebug.ClearConsole=Konzol ürítése
 firebug.ClearTooltip=Konzol ürítése
-firebug.All=Mind
-firebug.Images=Képek
-firebug.Flash=Flash
 # editors.dtd
 editors.Configured_Firebug_Editors=Beállított Firebug szerkesztők
 editors.Editor=Szerkesztők
@@ -1341,7 +1538,7 @@ firebug.activation.privateBrowsingMode=Privát böngészés alatt a Firebug nem
 # Label used within Script panel's options menu. Represents an option, that can be used
 # to switch of the break notifications.
 firebug.breakpoint.showBreakNotifications=Töréspont értesítések megjelenítése
-firebug.breakpoint.tip.Show_Break_Notifications=Show a notification box, when a Break On ... feature or the debugger; keyword stopped the JavaScript execution
+firebug.breakpoint.tip.Show_Break_Notifications=Értesítő ablak megjelenítése, amikor egy töréspont vagy a hibakereső leállítja a JavaScript futását
 # LOCALIZATION NOTE (firebug.activation.privateBrowsingMode):
 # Message displayed in a break notification popup next to a checkbox.
 # Includes a link enclosed in <a> and </a> to open the panel's options menu.
@@ -1360,11 +1557,11 @@ firebug.bon.scriptPanelNeeded=(a Szkript panelnek engedélyezve kell lennie enne
 # and so nothing to display.
 firebug.dom.noChildren2=Nincsenek gyermekobjektumok
 # LOCALIZATION NOTE (firebug.reps.more): Label shown when the displayed array/list has
-# more elements then displayed on the screen. "..." is automatically appended.
+# more elements then displayed on the screen. "…" is automatically appended.
 firebug.reps.more=több
 # LOCALIZATION NOTE (firebug.reps.reference): Label shown when the displayed array/list has
 # a reference to itself (a cycle).
-firebug.reps.reference=Circular reference
+firebug.reps.reference=Körkörös hivatkozás
 # LOCALIZATION NOTE (firebug.storage.totalItems): Semicolon list of plural forms.
 # Label used in the DOM panel for local/session/global storage.
 # It's informing the user about the number of items in the storage.
@@ -1372,6 +1569,10 @@ firebug.reps.reference=Circular reference
 # example: 1 item in Storage
 # example: 2 items in Storage
 firebug.storage.totalItems=%1$S elem a tárolóban;%1$S elem a tárolóban
+# LOCALIZATION NOTE (firebug.reps.historyEntries): Semicolon list of plural forms.
+# Displayed when evaluating "history" - informs the user about the number of entries in history.
+# %1 = Number of history entries
+firebug.reps.historyEntries=%1$S előzmény bejegyzés;%1$S előzmény bejegyzés
 # LOCALIZATION NOTE (firebug.reps.table.ObjectProperties):
 # Label used in the header of the output of the console.table() method inside the Console panel,
 # if an object is passed into it.
@@ -1402,78 +1603,73 @@ firebug.Memory_Profiler_Results=Memória elemzés eredmények
 firebug.Entire_Session=Teljes munkamenet
 # LOCALIZATION NOTE (console.msg.nothing_to_output):
 # Used by the console panel if a Console API is used without any argument.
-console.msg.nothing_to_output=(nothing to output)
+console.msg.nothing_to_output=(nincs kimenet)
 # LOCALIZATION NOTE (console.msg.nothing_to_output):
 # Used by the console panel if an empty string is passed into a Console API.
-console.msg.an_empty_string=(an empty string)
+console.msg.an_empty_string=(üres sztring)
 # LOCALIZATION NOTE (cookies.legacy.firecookie_detected, cookies.legacy.uninstall, cookies.legacy.uninstall_and_restart):
 # A message and labels used when Firecookie is detected. This extension has been integrated with
 # Firebu and should not be installed together with Firebug 1.10+
-cookies.legacy.firecookie_detected=Firecookie add-on is detected. This add-on has been integrated with Firebug 1.10 by default. To avoid a collision you need to uninstall Firecookie. \n\nYou must restart to finish uninstalling the add-on.
-cookies.legacy.uninstall=Uninstall
-cookies.legacy.uninstall_and_restart=Uninstall && Restart
-# LOCALIZATION NOTE (firebug.cmd.help.values, console.cmd.help_title_desc):
-console.cmd.help_title=Command Line API
-console.cmd.help_title_desc=Press F1 to open online Firebug help
+cookies.legacy.firecookie_detected=Firecookie kiegészítő észlelve. Ez a kiegészítő integrálva lett a Firebug 1.10-es verziójától. A problémák elkerüléséhez távolítsa el a Firecookie-t.\n\nAz eltávolítás után újra kell indítania a böngészőt.
+cookies.legacy.uninstall=Eltávolítás
+cookies.legacy.uninstall_and_restart=Eltávolítás és újraindítás
+# LOCALIZATION NOTE (console.cmd.help_title, console.cmd.help_title_desc):
+console.cmd.help_title=Parancssor API
+console.cmd.help_title_desc=Nyomja meg az F1-et a Firebug súgó oldalak megnyitásához
+# LOCALIZATION NOTE (console.cmd.tip_title, console.cmd.tip_title_desc):
+console.cmd.tip_title=Parancssor tippek
+console.cmd.tip_title_desc=Parancssor tippek és trükkök
+# LOCALIZATION NOTE (console.cmd.tip.javascript, console.cmd.tip.closures):
+# Description for Command Line tips that is logged
+# in the the Console panel if the user types "help" into the command line.
+console.cmd.tip.javascript=Bármilyen érvényes JavaScript kifejezést lefuttathat a parancssorral. Például:
+console.cmd.tip.closures=A lezárásokban (closure) levő változókhoz való hozzáféréshez használja a '.%' szintaxist (<a>részletek</a>). Például:
 # LOCALIZATION NOTE (console.cmd.help.$): Description for Command Line API that is logged
 # in the the Console panel if the user types "help" into the command line.
-console.cmd.help.$=Returns a single element with the given id.
-console.cmd.help.$$=Returns an array of elements that match the given CSS selector.
-console.cmd.help.$x=Returns an array of elements that match the given XPath expression.
-console.cmd.help.dir=Prints an interactive listing of all properties of the object. This looks identical to the view inside the DOM panel.
-console.cmd.help.dirxml=Prints the XML source tree of an HTML or XML element. This looks identical to the view inside the HTML panel. You can click on any node to inspect it in the HTML panel.
-console.cmd.help.cd=By default, command line expressions are relative to the top-level window of the page. cd() allows you to use the window of a frame in the page instead.
-console.cmd.help.clear=Clears the console.
-console.cmd.help.copy=Copies the given parameter to the clipboard. This can be a return value of a function or an object.
-console.cmd.help.inspect=Inspects an object in the most suitable panel, or the panel identified by the optional second argument. The available panel names are "html", "stylesheet", "script", and "dom".
-console.cmd.help.keys=Returns an array containing the names of all properties of the object.
-console.cmd.help.values=Returns an array containing the values of all properties of the object.
-console.cmd.help.debug=Adds a breakpoint on the first line of a function.
-console.cmd.help.undebug=Removes the breakpoint on the first line of a function.
-console.cmd.help.monitor=Turns on logging for all calls to a function.
-console.cmd.help.unmonitor=Turns off logging for all calls to a function.
-console.cmd.help.monitorEvents=Turns on logging for all events dispatched to an object. The optional second argument may define specific events or event types to log. The available event types are "composition", "contextmenu", "drag", "focus", "form", "key", "load", "mouse", "mutation", "paint", "scroll", "text", "ui", "xul", and "clipboard".
-console.cmd.help.unmonitorEvents=Turns off logging for all events dispatched to an object. The optional second argument may define specific events or event families, for which to turn logging off.
-console.cmd.help.profile=Turns on the JavaScript profiler. The optional second argument contains the text to be printed in the header of the profile report.
-console.cmd.help.profileEnd=Turns off the JavaScript profiler and prints its report.
-console.cmd.help.table=Allows to log provided data using tabular layout. The method takes one required parameter that represents table-like data (array of arrays or list of objects). The optional second parameter can be used to specify columns and/or properties to be logged.
-console.cmd.help.$0=Represents the last element selected via the Inspector.
-console.cmd.help.$1=Represents the second last element selected via the Inspector.
-console.cmd.help.$n=Returns one of the 5 last elements selected via the Inspector. This method takes one required parameter, which represents the index of the element (starting at 0).
-console.cmd.help.help=Displays help for all available commands.
+console.cmd.help.$=Visszaad egyetlen elemet a megadott azonosító alapján.
+console.cmd.help.$$=Visszaad több elemet egy tömbben, ami egy adott CSS szelektort kielégít.
+console.cmd.help.$x=Visszaad több elemet egy tömbben, amely egy adott XPath kifejezést kielégít.
+console.cmd.help.dir=Megjelenít egy interaktív listát az objektum tulajdonságaival. A megjelenítés azonos a DOM panelen lévővel.
+console.cmd.help.dirxml=Megjeleníti egy HTML vagy XML csomópont forrás fastruktúráját. A megjelenítés azonos a HTML panelen lévővel. Rákattinthat bármely csomópontra a HTML panelra való átugráshoz.
+console.cmd.help.cd=Alapértelmezésképp a parancssoron végrehajtott kifejezések a legfelső szintű ablak környezetében futnak. A cd() függvénnyel lehet váltani egy keret környezetéhez.
+console.cmd.help.clear=Kiüríti a konzolt.
+console.cmd.help.copy=Az adott paraméter másolása a vágólapra. Ez lehet a visszatérési értéke egy függvénynek vagy objektumnak.
+console.cmd.help.inspect=Átugrik az objektumnak megfelelő panelra a további elemzéshez. A második paraméterben meg lehet határozni a kiválasztott panelt: "html", "stylesheet", "script", vagy "dom".
+console.cmd.help.keys=Visszaad egy tömböt az objektum összes tulajdonságának nevével.
+console.cmd.help.values=Visszaad egy tömböt az objektum összes tulajdonságának értékeivel.
+console.cmd.help.debug=Létrehoz egy töréspontot a függvény első sorában.
+console.cmd.help.undebug=Eltávolítja a töréspontot a függvény első sorából.
+console.cmd.help.monitor=Bekapcsolja egy függvényre az összes meghívásának naplózását.
+console.cmd.help.unmonitor=Bekapcsolja egy függvény összes meghívásának naplózását.
+console.cmd.help.monitorEvents=Bekapcsolja egy objektum összes eseményének naplózását. Az opcionális második paraméterrel konkrét eseményt vagy eseménytípust lehet meghatározni: "composition", "contextmenu", "drag", "focus", "form", "key", "load", "mouse", "mutation", "paint", "scroll", "text", "ui", "xul", and "clipboard".
+console.cmd.help.unmonitorEvents=Kikapcsolja egy objektum összes eseményének naplózását. Az opcionális második paraméterrel konkrét eseményt vagy eseménytípust lehet meghatározni.
+console.cmd.help.profile=Bekapcsolja a JavaScript futásidő elemzést. Az opcionális második paraméterben meg lehet adni a riport fejlécén megjelenő szöveget.
+console.cmd.help.profileEnd=Kikapcsolja a JavaScript futásidő elemzést és kiírja az elkészült riportot.
+console.cmd.help.table=A megadott adatok naplózása táblázatos formában. A metódusnak egyetlen kötelező paramétere valamilyen táblázatos adatot vár (tömbök tömbje vagy objektumok listája). Az opcionális második paraméterben megadható a naplózandó oszlopok és/vagy tulajdonságok listája.
+console.cmd.help.$0=Az elemzőben megtekintett utolsó elem.
+console.cmd.help.$1=Az elemzőben megtekintett utolsó előtti elem.
+console.cmd.help.$2=Az elemzőben megtekintett utolsó előtti előtti elem.
+console.cmd.help.$3=Az elemzőben megtekintett utolsó előtti előtti előtti elem.
+console.cmd.help.$4=Az elemzőben megtekintett utolsó előtti előtti előtti előtti elem.
+console.cmd.help.$n=Visszaadja az elemzőben utoljára megtekintett 5 elem közül az egyiket. Az egyetlen kötelező paraméterben meg kell adni az elem sorszámát (0-tól kezdődően).
+console.cmd.help.$_=A parancssorban utoljára kiértékelt kifejezés értéke.
+console.cmd.help.help=Megjeleníti a súgót az összes parancshoz.
+console.cmd.help.include=Távoli szkript importálása.
+console.cmd.help.$p=Egy JavaScript objektumra/értékre való kattintáskor a "Használa a parancssorban" menüponttal ezt a változót állíthatja be.
+console.cmd.help.getEventListeners=Visszaad egy objektumot, amely az adott elemhez (vagy esemény célhoz) rendelt összes eseménykezelőt tartalmazza.
 # LOCALIZATION NOTE (console.cmd.helpUrlNotAvailable): A message used displayed to the user
 # if registered command doesn't have help URL associated and the user clicks on the command name.
 # List of command names is displayed if you type "help" (without quotes) into the command line.
-console.cmd.helpUrlNotAvailable=Help page for this command is not available.
-# LOCALIZATION NOTE (css.selector.noSelection): A help description used in empty
-# Selection side panel.
-css.selector.noSelection=Type custom selector or right click CSS rule and pick <b>Get Matching Elements</b>.
-css.selector.noSelectionResults=No matching elements
-css.selector.selectorError=Selection failed:
-# LOCALIZATION NOTE (css.selector.Selection): Title for Selector side panel displayed
-# in the CSS panel.
-css.selector.Selection=Elements
-# LOCALIZATION NOTE (panel.tip.selector): Tooltip text for the Selection side panel
-# Shown when hovering the Selection panel tab
-panel.tip.selector=Displays elements matching a CSS selector
-css.selector.TryASelector=Try a selector...
-# LOCALIZATION NOTE (css.selector.cmd.getMatchingElements): A label for context menu item.
-# The menu-item is used in the CSS panel's context menu and allows to get matched elements
-# for the clicked rule selector. Elements are displayed in the side panel.
-css.selector.cmd.getMatchingElements=Get Matching Elements
-# LOCALIZATION NOTE (css.selector.unknownErrorMessage): An error message displayed
-# to the user if querySelectorAll (used by the Selector side panel) fails and there is no
-# explanantion coming from the platform.
-css.selector.unknownErrorMessage=Failed to execute specified selector string
+console.cmd.helpUrlNotAvailable=Ehhez a parancshoz nincs elérhető súgó.
 # LOCALIZATION NOTE (perftiming.bars.label, perftiming.events.label): A label used in a tooltip
 # for performance.timing graph.
 # The graph is displayed in the Console when the user executes "performance.timing" expression.
-perftiming.bars.label=Document phases start and elapsed time relative to the document load:
-perftiming.events.label=Event timing relative to the document load:
+perftiming.bars.label=A dokumentum fázisok kezdete és az eltelt idő a dokumentum betöltéséhez képest:
+perftiming.events.label=Esemény időzítése a dokumentum betöltéséhez képest:
 # LOCALIZATION NOTE (perftiming.details_title, perftiming.details_title_desc): A label used
 # for detailed performance timing info table.
-perftiming.details_title=Perfomance Timing
-perftiming.details_title_desc=Detailed timing
+perftiming.details_title=Teljesítmény időzítés
+perftiming.details_title_desc=Részletes időzítés
 # LOCALIZATION NOTE (perftiming.connectEnd, perftiming.connectStart,
 # perftiming.domContentLoadedEventEnd, perftiming.domContentLoadedEventStart,
 # perftiming.domInteractive, perftiming.domLoading, perftiming.domainLookupEnd,
@@ -1483,24 +1679,24 @@ perftiming.details_title_desc=Detailed timing
 # perftiming.responseEnd, perftiming.responseStart, perftiming.timing, perftiming.unloadEventEnd,
 # perftiming.unloadEventStart): Description for performance timing field. Displayed when
 # the user executes 'performance.timing' in the command line.
-perftiming.connectEnd=Time when server connection is finished.
-perftiming.connectStart=Time just before server connection begins.
-perftiming.domComplete=Time just before document readiness completes.
-perftiming.domContentLoadedEventEnd=Time after DOMContentLoaded event completes.
-perftiming.domContentLoadedEventStart=Time just before DOMContentLoaded starts.
-perftiming.domInteractive=Time just before readiness set to interactive.
-perftiming.domLoading=Time just before readiness set to loading.
-perftiming.domainLookupEnd=Time after domain name lookup.
-perftiming.domainLookupStart=Time just before domain name lookup.
-perftiming.fetchStart=Time when the resource starts being fetched.
-perftiming.loadEventEnd=Time when the load event is complete.
-perftiming.loadEventStart=Time just before the load event is fired.
-perftiming.navigationStart=Time after the previous document begins unload.
-perftiming.redirectCount=Number of redirects since the last non-redirect.
-perftiming.redirectEnd=Time after last redirect response ends.
-perftiming.redirectStart=Time of fetch that initiated a redirect.
-perftiming.requestStart=Time just before a server request.
-perftiming.responseEnd=Time after the end of a response or connection.
-perftiming.responseStart=Time just before the start of a response.
-perftiming.unloadEventEnd=Time after the previous document is unloaded.
-perftiming.unloadEventStart=Time just before the unload event is fired.
+perftiming.connectEnd=A kiszolgálóval való kapcsolat lezárásának időpontja.
+perftiming.connectStart=A kiszolgálóval való kapcsolat megnyitásának időpontja
+perftiming.domComplete=A dokumentum készenlét befejezése előtti idő.
+perftiming.domContentLoadedEventEnd=A DOMContentLoaded esemény befejezése utáni idő.
+perftiming.domContentLoadedEventStart=A DOMContentLoaded esemény előtti idő.
+perftiming.domInteractive=A készenlét interaktívvá válása előtti idő.
+perftiming.domLoading=A készenlét betöltés állapotúvá válása előtti idő.
+perftiming.domainLookupEnd=A DNS feloldás utáni idő.
+perftiming.domainLookupStart=A DNS feloldás előtti idő.
+perftiming.fetchStart=Idő az erőforrások lekérdezésének megkezdésekor.
+perftiming.loadEventEnd=A load esemény befejezése utáni idő.
+perftiming.loadEventStart=A load esemény előtti idő.
+perftiming.navigationStart=Az előző dokumentum bezárása előtti idő.
+perftiming.redirectCount=Átirányítások száma az utolsó nem-átirányítás óta.
+perftiming.redirectEnd=Az utolsó átirányító válasz utáni idő.
+perftiming.redirectStart=Az átirányítást indító lekérdezés időpontja.
+perftiming.requestStart=A kiszolgáló lekérdezése előtti idő.
+perftiming.responseEnd=A válasz vagy a kapcsolat befejezése utáni idő.
+perftiming.responseStart=A válasz elküldése előtti idő.
+perftiming.unloadEventEnd=Az előző dokumentum bezárása utáni idő.
+perftiming.unloadEventStart=Az unload esemény előtti idő.
diff --git a/locale/hu-HU/selectors.properties b/locale/hu-HU/selectors.properties
new file mode 100644
index 0000000..46f2315
--- /dev/null
+++ b/locale/hu-HU/selectors.properties
@@ -0,0 +1,10 @@
+Panel-selectors=Kiválasztók
+panel.tip.selectors=CSS kiválasztónak megfelelő elemek megjelenítése
+css.selector.noSelection=Írjon be egy tetszőleges CSS kiválasztót, vagy kattintson jobb gombbal egy CSS szabályra és válassza ki a <b>Kiválasztónak megfelelő elemek</b> menüpontot.
+css.selector.noSelectionResults=Nincsenek megfelelő elemek
+css.selector.readMore=<a>További információk</a> a panel használatáról.
+css.selector.invalidSelector=Érvénytelen kiválasztó
+css.selector.TryASelector=Kiválasztót kipróbálása…
+css.selector.cmd.getMatchingElements=Kiválasztónak megfelelő elemek
+aria.labels.Selectors=Kiválasztók oldalpanel
+a11y.labels.press_enter_to_add_new_selector=Nyomjon Entert új kiválasztó felvételéhez
diff --git a/locale/ru/cookies.properties b/locale/ru/cookies.properties
index 3619001..966f62f 100644
--- a/locale/ru/cookies.properties
+++ b/locale/ru/cookies.properties
@@ -1,59 +1,136 @@
+# LOCALIZATION NOTE (cookies.Panel): Title of the panel in Firebug's UI.
 cookies.Panel=Cookies
 panel.tip.cookies=Даёт возможность просматривать и изменять cookie
+# LOCALIZATION NOTE (cookies.Session): Label used to mark session cookies.
 cookies.Session=Сессия
+# LOCALIZATION NOTE (cookies.AllowGlobally, cookies.tip.AllowGlobally):
+# Label used for cookies permission.
 cookies.AllowGlobally=Принимать Cookie от сайтов
 cookies.tip.AllowGlobally=Принимать все cookie по-умолчанию или отвергать все cookie
+# LOCALIZATION NOTE (cookies.showCookieEvents, cookies.tip.showCookieEvents):
+# Label used in Cookies panel options menu (the small arrow next to the Cookies panel label).
+# If checked, various cookies events are displayed in Firebug's Console panel.
 cookies.showCookieEvents=Показывать события Cookie
 cookies.tip.showCookieEvents=Записывать в консоль события cookie (изменения, удаления)
+# LOCALIZATION NOTE (cookies.clearWhenDeny): Label used in Cookies panel options menu (the
+# small arrow next to the Cookies panel label). If checked, cookies are automatically removed
+# if the permission is changed to deny.
+# xxxHonza: currently not displayed in the UI
 cookies.clearWhenDeny=Очищать Cookie при запрете
+# LOCALIZATION NOTE (cookies.Cut, cookies.Copy, cookies.CopyAll, cookies.Paste,
+# cookies.Delete): Support for clipboard actions. Used in a cookie context menu
+# (right click on a cookie in the Cookies panel).
 cookies.Cut=Вырезать
 cookies.Copy=Копировать
 cookies.CopyAll=Скопировать все
 cookies.Paste=Вставить
 cookies.Delete=Удалить
+# LOCALIZATION NOTE (cookies.Clear Value): Label for an item in the cookie context menu.
+# Clears cookie value, but not removes the cookie itself.
 cookies.Clear_Value=Очистить значение
+# LOCALIZATION NOTE (cookies.Edit): Label for an item in the cookie context menu. Displays
+# a dialog for editing clicked cookie.
 cookies.Edit=Редактировать
 cookies.Accept=Принять
+# LOCALIZATION NOTE (cookies.header.Reset_Header): Used in cookie header context menu (right
+# click on a header in the Cookies panel). This action restores default state of the header
+# (visibility and size of all columns)
 cookies.header.Reset_Header=Сбросить заголовок
+# LOCALIZATION NOTE (cookies.Intro, cookies.ExceptionsTitle): Used for managing Cookie panel
+# enablement. Used only if Firebug 1.2 and 1.3 is installed
 cookies.Intro=Вы можете указать каким сайтам разрешено или запрещено использовать Cookie.\nНапишите точный адрес сайта и нажмите Блокировать,\nРазрешить на сессию или Разрешить.
 cookies.ExceptionsTitle=Исключения - Cookie
+# LOCALIZATION NOTE (cookies.modulemanager.description, cookies.HostEnable, cookies.HostDisable,
+# cookies.Permissions, cookies.PermissionsIntro): Various labels used for mangaing Cookies panel
+# enablement. Used only if Firebug 1.2 and 1.3 is installed.
+# examples: Enable Cookies panel for www.softwareishard.com
 cookies.modulemanager.description=Поддержка мониторинга Cookie
 cookies.HostEnable=Включить панель Cookie для %S
 cookies.HostDisable=Отключить панель Cookie для %S
 cookies.Permissions=Включить или отключить панель Cookie
 cookies.PermissionsIntro=Выберите сайты, на которых панель Cookie будет включена или отключена
+# LOCALIZATION NOTE (cookies.SystemPages, cookies.LocalFiles): Labels used in the Cookies
+# panel if it's disabled (only for Firebug 1.2 and 1.3).
 cookies.SystemPages=Системные страницы
 cookies.LocalFiles=Локальные файлы
+# LOCALIZATION NOTE (cookies.confirm.removeall): Used in a confirmation dialog when all cookies
+# of a website are going to be deleted (or permission is set do deny and cookies should be deleted).
 cookies.confirm.removeall=Вы желаете удалить все Cookie в списке?
+# LOCALIZATION NOTE (cookies.confirm.removeallsession): Used in a confirmation dialog when
+# all session cookies are going to be deleted
 cookies.confirm.removeallsession=Вы желаете удалить все Cookie сессии в списке?
+# LOCALIZATION NOTE (cookies.confirm.Remove_All_From_Host): Used in a confirmation dialog when cookies
+# from a specific host are going to be deleted (or permission is set do deny and cookies should be deleted).
 cookies.confirm.Remove_All_From_Host=Вы уверены, что хотите удалить все Cookie для %S?
+# LOCALIZATION NOTE (cookies.Confirm_cookie_removal): A label used for option (mini tab menu)
+# that says whether a confirmation dialog is displayed when removing cookies. 
 cookies.Confirm_cookie_removal=Подтверждать удаление Cookie
 cookies.tip.Confirm_cookie_removal=Если установлено - при попытке удалить cookie будет выводится диалог с подтверждением.
+# LOCALIZATION NOTE (cookies.removeall.tooltip): A tooltip for Cookies->Remove Cookies menu
 cookies.removeall.tooltip=Удалить все Cookie в списке.
+# LOCALIZATION NOTE (cookies.Remove_Session_Cookies): A label used for
+# Cookies->Remove Session Cookies menu
 cookies.Remove_Session_Cookies=Удалить Cookie сессии
+# LOCALIZATION NOTE (cookies.removeall.tooltip): A tooltip for Cookies->Remove Session Cookies menu
 cookies.removeallsession.tooltip=Удалить все Cookie сессии в списке
+# LOCALIZATION NOTE (cookies.createcookie.tooltip): A tooltip for Cookies->Create Cookie menu
+# examples: Create new cookie for www.softwareishard.com
 cookies.createcookie.tooltip=Создать Cookie для %S
+# LOCALIZATION NOTE (cookies.createcookie.defaultvalue): Default value for newly created cookie.
 cookies.createcookie.defaultvalue=Значение
+# LOCALIZATION NOTE (cookies.perm.manage.tooltip): A tooltip for permissions button that
+# is located on a Cookis panel toolbar.
+# examples: Manage cookie permissions for www.softwareishard.com
 cookies.perm.manage.tooltip=Управление разрешениями Cookie для %S
+# LOCALIZATION NOTE (cookies.console.cookiescleared): A label for a cookie event that is
+# displayed in Firebug's Console panel when all cookie in Firefox are removed
+# To remove all cookies use menu on Cookis panel toolbar: Tools->Show All Cookies and click
+# Remove All Cookies in the dialog.
 cookies.console.cookiescleared=Все Cookie были удалены
+# LOCALIZATION NOTE (cookies.console.cookiescleared): A label for a cookie event that is
+# displayed in Firebug's Console panel when all cookie in Firefox are removed
+# To remove all cookies use menu on Cookis panel toolbar: Tools->Show All Cookies and click
+# Remove All Cookies in the dialog.
 cookies.console.sessioncookiescleared=Все Cookie сессии были удалены
+# LOCALIZATION NOTE (cookies.console.cookiesrejected, cookies.console.nocookiesreceived):
+# A label for a cookie event that is displayed in Firebug's Console panel when cookies are
+# rejected by the current site.
 cookies.console.cookiesrejected=Отвергнутые Cookie:
 cookies.console.nocookiesreceived=Нет полученных Cookie
+# LOCALIZATION NOTE (cookies.console.cookie, cookies.console.deleted, cookies.console.added,
+# cookies.console.changed, cookies.console.cleared): Various labels that are used for cookie
+# events displayed in Firebug's Console panel.
 cookies.console.cookie=Cookie
 cookies.console.deleted=удалена
 cookies.console.added=добавлена
 cookies.console.changed=изменена
 cookies.console.cleared=очищена
+# LOCALIZATION NOTE (cookies.domain.label): Label used for marking domain cookie.
+# Displayed in the Cookies panel for domain cookies.
+# xxxHonza: not used in the UI now.
 cookies.domain.label=Домен
+# LOCALIZATION NOTE (cookies.secure.label): Label used for marking secure cookie.
+# Displayed in the Cookies panel for secure cookies.
 cookies.secure.label=Безопасная
+# LOCALIZATION NOTE (cookies.status.accepted, cookies.status.downgraded,
+# cookies.status.flagged, cookies.status.rejected): Various statuses of a cookie
+# displayed in Status column.
 cookies.status.accepted=Принята
 cookies.status.downgraded=Понижена
 cookies.status.flagged=Помечена
 cookies.status.rejected=Отвергнута
+# LOCALIZATION NOTE (cookies.info.valuetab.label, cookies.info.rawdatatab.Raw_Data,
+# cookies.info.jsontab.JSON, cookies.info.xmltab.XML): A label for tabs displayed
+# if a cookie entry is expanded. Tab are only available in the UI, if necessary.
 cookies.info.valuetab.label=Значение
 cookies.info.rawdatatab.Raw_Data=Сырые данные
 cookies.info.jsontab.JSON=JSON
 cookies.info.xmltab.XML=XML
+# LOCALIZATION NOTE (cookies.default.session, cookies.default.thirdPartySession,
+# cookies.default.thirdParty, cookies.default.allow, cookies.default.deny,
+# cookies.default.warn, cookies.host.session, cookies.host.accept,
+# cookies.host.reject): Various labels for cookie permissions.
+# examples: Accept cookies from www.softwareishard.com
 cookies.default.session=По умолчанию (Принимать Cookie сессии)
 cookies.default.thirdPartySession=По умолчанию (Принимать Cookie сессии)
 cookies.default.thirdParty=По умолчанию (Принимать Cookie)
@@ -65,9 +142,17 @@ cookies.host.session=Принимать Cookie сессии от %S
 cookies.host.accept=Принимать Cookie от %S
 cookies.host.reject=Отвергать Cookie от %S
 cookies.host.limitThirdParty=Ограничивать приём сторонних Cookie от %S
+# LOCALIZATION NOTE (cookies.edit.invalidname, cookies.edit.invalidhost,
+# cookies.edit.invalidpath): Various error messages used when a new cookie is created
+# using a cookie dialog. Use Cookies->Create Cookie menu to show the dialog.
 cookies.edit.invalidname=Ошибочное имя Cookie.
 cookies.edit.invalidhost=Ошибочный хост Cookie.
 cookies.edit.invalidpath=Ошибочный путь Cookie.
+# LOCALIZATION NOTE (cookies.header.name, cookies.header.value, cookies.header.rawValue,
+# cookies.header.domain, cookies.header.size, cookies.header.path, cookies.header.expires,
+# cookies.header.security, cookies.header.status, cookies.header.httponly,
+# cookies.header.maxAge):
+# Column labels used in the cookie header.
 cookies.header.name=Имя
 cookies.header.value=Значение
 cookies.header.rawValue=Исходное значение
@@ -79,6 +164,11 @@ cookies.header.expires=Истекает
 cookies.header.security=Безопасность
 cookies.header.httponly=Только HTTP
 cookies.header.maxAge=Макс. возраст
+# LOCALIZATION NOTE (cookies.header.name.tooltip, cookies.header.value.tooltip,
+# cookies.header.rawValue.tooltip, cookies.header.domain.tooltip, cookies.header.size.tooltip,
+# cookies.header.path.tooltip, cookies.header.expires.tooltip, cookies.header.security.tooltip,
+# cookies.header.httponly.tooltip, cookies.header.maxAge.tooltip):
+# Column tooltips used in the cookie header.
 cookies.header.name.tooltip=Имя Cookie
 cookies.header.value.tooltip=Сохранённое значение Cookie
 cookies.header.rawValue.tooltip=Исходное значение сохраненное в cookie
@@ -90,37 +180,81 @@ cookies.header.expires.tooltip=Дата истечения Cookie
 cookies.header.security.tooltip=Показывает безопасна Cookie или нет
 cookies.header.httponly.tooltip=Показывает если это только HTTP Cookie
 cookies.header.maxAge.tooltip=Максимальное время хранения Cookie
+# LOCALIZATION NOTE (cookies.netinfo.Received_Cookies, cookies.netinfo.Sent_Cookies,
+# cookies.netinfo.deleted.tooltip):
+# Labels used in the Firebug's net panel. If there are any cookies associated with a network
+# request, there is an additional Cookies tab displayed when the user expands the request.
+# These labels are used within this tab.
 cookies.netinfo.Received_Cookies=Принятые Cookie
 cookies.netinfo.Sent_Cookies=Отправленные Cookie
 cookies.netinfo.deleted.tooltip=Запрос удалил Cookie
+# LOCALIZATION NOTE (cookies.Path_Filter): Label for a Filter->Path Filter
+# xxxHonza: Not implemented yet.
 cookies.Path_Filter=Фильтр пути
+# LOCALIZATION NOTE (cookies.menu.Cookies): Label for menu Cookies, dislayed on the toolbar.
 cookies.menu.Cookies=Cookies
+# LOCALIZATION NOTE (cookies.export.Export_All_Cookies, cookies.export.Export_All_Cookies_Tooltip,
+# cookies.export.Export_For_Site, cookies.export.Export_For_Site_Tooltip): Labels and 
+# tooltips for exporting menus available under Cookies menus.
 cookies.export.Export_All_Cookies=Экспортировать все Cookie...
 cookies.export.Export_All_Cookies_Tooltip=Экспортировать все Cookie браузера в файл cookies.txt
 cookies.export.Export_For_Site=Экспортировать Cookie этого сайта...
 cookies.export.Export_For_Site_Tooltip=Экспортировать Cookie для %S в файл cookies.txt
+# LOCALIZATION NOTE (cookies.message.There_is_no_active_page): An error message displayed
+# when the user is trying to create a cookie and there is no active page (site). This should
+# never happen.
 cookies.message.There_is_no_active_page=Активная страница отсутствует.
+# LOCALIZATION NOTE (cookies.Break_On_Cookie, cookies.Disable_Break_On_Cookie):
+# Tooltips for resume button that are used when the Cookies panel is currently selected.
+# The button allows stopping JS execution when a cookie on the current page is modified
+# added or removed.
 cookies.Break_On_Cookie=Останавливать при изменении Cookie
 cookies.Disable_Break_On_Cookie=Отключить остановку при изменении Cookie
+# LOCALIZATION NOTE (cookies.Cookie_Breakpoints): Name of Cookie breakpoint group
+# displayed in Breakpoints panel (in the Script panel)
 cookies.Cookie_Breakpoints=Точки останова Cookie
+# LOCALIZATION NOTE (cookies.Break_On_Cookie, cookies.menu.tooltip.Break_On_Cookie):
+# Label and tooltip for a context menu item used when the user right clicks on a cookie. 
+# examples: Break on 'MyCookie' cookie
+# examples: Break on 'MyCookie' when removed or changed.
 cookies.menu.Break_On_Cookie=Останавливать на Cookie '%S'
 cookies.menu.tooltip.Break_On_Cookie=Останавливать на Cookie '%S' при удалении или изменении
+# LOCALIZATION NOTE (cookies.menu.Edit_Breakpoint_Condition): Label for context menu item
+# used when user right clicks on a cookie with existing breakpoint.
 cookies.menu.Edit_Breakpoint_Condition=Править условие точки останова
+# LOCALIZATION NOTE (cookies.Breakpoint_condition_evaluation_fails): Message displayed
+# within the Firebug Console panel if a cookie breakpoint condition fails when evaluated. 
 cookies.Breakpoint_condition_evaluation_fails=Ошибка валидации условия точки останова
+# DTD strings converted (main Firecokie UI, see cookiePanel.xul)
 cookies.RemoveAll=Удалить все Cookie
 cookies.Create=Создать Cookie
+# LOCALIZATION NOTE (cookies.Tools, cookies.ToolsTooltip) Label and tooltip for Tools
+# menu on Cookies toolbar.
 cookies.Tools=Инструменты
 cookies.ToolsTooltip=Инструменты
+# LOCALIZATION NOTE (cookies.ViewAll, cookies.ViewAllTooltip) Label and tooltip for
+# view all cookies menu item (Tools menu). This action opens Firefox built-in cookie manager window.
 cookies.ViewAll=Показать все Cookie...
 cookies.ViewAllTooltip=Открыть встроенный менеджер Cookie
+# LOCALIZATION NOTE (cookies.ViewExceptions, cookies.ViewExceptionsTooltip) Label and
+# tooltip for Site Permissions menu item (Tools menu). This action opens Firefox built-in
+# dialog for setting web site cookie permissions.
 cookies.ViewExceptions=Разрешения веб-сайтов
 cookies.ViewExceptionsTooltip=Показать список разрешённых или запрещённых веб-сайтов
+# LOCALIZATION NOTE (cookies.Filter, cookies.FilterTooltip, cookies.filter.byPath,
+# cookies.filter.byPathTooltip, cookies.filter.showRejectedCookies,
+# cookies.filter.showRejectedCookiesTooltip): Labels and tooltips for cookie Filter menu
+# presented on the Cookie toolbar.
 cookies.Filter=Фильтр
 cookies.FilterTooltip=Использовать данные опции для фильтрации списка Cookie
 cookies.filter.byPath=Фильтровать Cookie по текущему пути
 cookies.filter.byPathTooltip=Показывать только те Cookie, которые совпадают с текущим путём
 cookies.filter.showRejectedCookies=Показывать отвергнутые Cookie
 cookies.filter.showRejectedCookiesTooltip=Показывать даже отвергнутые Cookie в списке
+# LOCALIZATION NOTE (cookies.edit.title, cookies.edit.name.label,
+# cookies.edit.domain.label, cookies.edit.path.label, cookies.edit.expire.label,
+# cookies.edit.value.label, cookies.edit.secure.label, cookies.edit.httponly.label,
+# cookies.edit.session.label, cookies.edit.urlEncode.label): Edit Cookie dialog UI
 cookies.edit.title=Редактировать Cookie
 cookies.edit.name.label=Имя:
 cookies.edit.domain.label=Хост:
@@ -131,8 +265,12 @@ cookies.edit.secure.label=Безопасная Cookie
 cookies.edit.httponly.label=Только HTTP
 cookies.edit.session.label=Сессия
 cookies.edit.urlEncode.label=URL encode значение
+# LOCALIZATION NOTE (cookies.console.Cookies, cookies.console.Filter_By_Cookies)
+# Label and tooltip for a toolbar button displayed on the Console panel. Used for filtering.
 cookies.console.Cookies=Cookies
 cookies.console.Filter_By_Cookies=Фильтровать по Cookie
+# LOCALIZATION NOTE (firebug.shortcut.removeAllCookies.label) Label used by the
+# Customize Shortcuts dialog (Firebug menu)
 firebug.shortcut.removeAllCookies.label=Удалить все Cookies
 cookie.sizeinfo.Size=Размер
 cookie.sizeinfo.Raw_Size=Исходный размер
diff --git a/locale/ru/firebug-amo.properties b/locale/ru/firebug-amo.properties
index 20f9825..877fa80 100644
--- a/locale/ru/firebug-amo.properties
+++ b/locale/ru/firebug-amo.properties
@@ -1,3 +1,7 @@
-firebug.amo.summary1.6=Firebug интегрируется в Firefox для того, чтобы принести изобилие средств разработки на кончики Ваших пальцев. Вы можете редактировать и просматривать CSS, HTML и JavaScript в реальном времени...\\n\\nДля работы Firebug 1.6 нужен Firefox 3.6 или выше.
-firebug.amo.description=Firebug интегрируется в Firefox для того, чтобы принести изобилие средств разработки на кончики Ваших пальцев, в то время как Вы путешествуете по сети. Вы можете редактировать, выполнять отладку и просматривать CSS, HTML и JavaScript в режиме реального времени на любой странице в сети...\\n\\nПосетите сайт Firebug - там Вы найдёте документацию, снимки экрана и форумы для обсуждения: http://getfirebug.com
-firebug.amo.developer.comments=Если у Вас возникли вопросы, пожалуйста прочитайте FAQ Firebug.\\n\\nhttp://getfirebug.com/faq.html
+# LOCALIZATION NOTE (firebug.amo.summary, firebug.amo.description, firebug.amo.developer.comments):
+# These texts are used on Mozilla Add-on site: https://addons.mozilla.org/en-US/firefox/addon/1843
+# They are not direct part of Firebug extension and so, you can't see them in Firebug's UI.
+# Note that firebug.amo.summary must not exceed 250 characters (limitation by AMO site)
+firebug.amo.summary1.6=Firebug интегрируется в Firefox для того, чтобы принести изобилие средств разработки на кончики Ваших пальцев. Вы можете редактировать и просматривать CSS, HTML и JavaScript в реальном времени...\n\nДля работы Firebug 1.6 нужен Firefox 3.6 или выше.
+firebug.amo.description=Firebug интегрируется в Firefox для того, чтобы принести изобилие средств разработки на кончики Ваших пальцев, в то время как Вы путешествуете по сети. Вы можете редактировать, выполнять отладку и просматривать CSS, HTML и JavaScript в режиме реального времени на любой странице в сети...\n\nПосетите сайт Firebug - там Вы найдёте документацию, снимки экрана и форумы для обсуждения: http://getfirebug.com
+firebug.amo.developer.comments=Если у Вас возникли вопросы, пожалуйста прочитайте FAQ Firebug.\n\nhttp://getfirebug.com/faq.html
diff --git a/locale/ru/firebug-tracing.properties b/locale/ru/firebug-tracing.properties
index e852099..96e08f6 100644
--- a/locale/ru/firebug-tracing.properties
+++ b/locale/ru/firebug-tracing.properties
@@ -1,5 +1,8 @@
+# LOCALIZATION NOTE (Open_Firebug_Tracing, Always_Open_Firebug_Tracing):
+# Firebug tracing console menu items (located in Firebug's menu).
 Open_Firebug_Tracing=Открыть слежение Firebug
 Always_Open_Firebug_Tracing=Всегда открывать слежение Firebug
+# LOCALIZATION NOTE (title.Tracing): Title for Firebug tracing console window (verb).
 title.Tracing=Слежение
 tracing.Show_Scope_Variables=Показывать переменные охвата
 tracing.Show_Time=Показать время
diff --git a/locale/ru/firebug.properties b/locale/ru/firebug.properties
index b7d094c..2f0e5bf 100644
--- a/locale/ru/firebug.properties
+++ b/locale/ru/firebug.properties
@@ -1,5 +1,9 @@
 Firebug=Firebug
+# LOCALIZATION NOTE (WindowTitle): Title of detached Firebug window.
+# %S = Title of the associated web page.
+# examples: Firebug - Google
 WindowTitle=Firebug - %S
+# Panel titles
 Panel-console=Консоль
 panel.tip.console=Даёт возможность просматривать сообщения консоли и выполнять команды JavaScript
 Panel-net=Сеть
@@ -29,9 +33,27 @@ panel.tip.callstack=Даёт возможность просматривать 
 Panel-scopes=Охваты
 firebug.DetachFirebug=Открыть в отдельном окне
 firebug.AttachFirebug=Прикрепить Firebug к окну браузера
+# LOCALIZATION NOTE (pluralRuleFirebugs): Custom plural rule for this locale.
+# If there is no Firebug translation for the current browser locale, this value
+# will be used instead of the one in chrome://global/locale/intl.properties
+# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
 pluralRule=1
-plural.Total_Firebugs2=%1$S Firebug;Всего %1$S Firebug\'ов
+# LOCALIZATION NOTE (plural.Total_Firebugs2): Semicolon list of plural forms.
+# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
+# Used in a tooltip that is displayed for the Firebug icon located within Firefox toolbar.
+# Displays the number of pages with Firebug activated.
+# %1 = number of Firebug instances activated
+# example: 2 Total Firebugs
+plural.Total_Firebugs2=%1$S Firebug;Всего %1$S Firebug'ов
+# LOCALIZATION NOTE (startbutton.tip.deactivated):
+# Used in a tooltip that is displayed for the Firebug icon located within Firefox toolbar.
+# Displays the deactivated status of Firebug
 startbutton.tip.deactivated=Отключен
+# LOCALIZATION NOTE (panel.status): Label showing the status of an activable panel
+# inside a tooltip when hovering the Start Button. Will be shown for each panel.
+# first %S = panel name
+# second %S = panel activation status
+# example: Console: On
 panel.status=%S: %S
 inBrowser=В браузере
 minimized=Свёрнуто
@@ -60,11 +82,18 @@ firebug.menu.Right=Справа
 firebug.menu.tip.Right=Расположить Firebug в правой части родительского окна
 firebug.uiLocation=Положение окна Firebug
 firebug.menu.tip.UI_Location=Расположение пользовательского интерфейса Firebug
+# LOCALIZATION NOTE (annotations.confirm.clear):
+# Used in a confirmation dialog when all Firebug annotations are going to be deleted
 annotations.confirm.clear=Вы желаете очистить список аннотаций Firebug для всех сайтов?
+# LOCALIZATION NOTE (firebug_options): Tooltip text used for Firebug icon menu (them left
+# most button on Firebug main toolbar)
 firebug_options=Опции Firebug
+# LOCALIZATION NOTE (firebug.Show_All_Panels): Menu item label used in 'list of all panels'
+# menu (available on Firebug's tab bar).
 firebug.Show_All_Panels=Показать все панели
 console.option.Show_Command_Line=Показать командную строку
 console.option.tip.Show_Command_Line=Перевести фокус на командную строку / Показать всплывающую командную строку
+# Console panel options (located in tab's option menu)
 ShowJavaScriptErrors=Показывать ошибки JavaScript
 console.option.tip.Show_JavaScript_Errors=Записывать ошибки JavaScript в консоль
 ShowJavaScriptWarnings=Показывать предупреждения JavaScript
@@ -91,35 +120,74 @@ console.option.tip.Show_Command_Editor=Переключится на редак
 commandLineShowCompleterPopup=Показывать автодополнение
 console.option.tip.Show_Completion_List_Popup=Показывать автодополнения для команд
 Assertion=Ошибка в утверждении
+# LOCALIZATION NOTE (Line, LineAndCol): Used at many places in the UI. Displays the location
+# of an error, message, etc. within a source of a web page.
+# first %S = File name, second %S = Line number
+# examples: somePage.htm (line 64)
+# examples: somePage.htm (line 64, column 53)
 Line=%S (строка %S)
 LineAndCol=%S (строка %S, столбец %S)
 InstanceLine=%S #%S (строка %S)
 StackItem=%S (%S в строке %S)
 SystemItem=<Система>
+# LOCALIZATION NOTE (InspectInPanel): Menu item label used in a various context menus.
+# For example, right clicking on an element in the HTML panel offers an action to inspect
+# clicked element in the DOM panel.
+# %S = Target panel title
+# examples: Inspect in DOM Panel
 panel.Inspect_In_Panel=Инспектировать в панели %S
 panel.tip.Inspect_In_Panel=Переключиться на панель %S, для изучения объекта там
 NoName=(без имени)
+# LOCALIZATION NOTE (jsdIScript): an internal Firefox object used for debugging Firebug
+# do not translate.
+# %S = jsdIScript.tag
 jsdIScript=jsdIScript %S
+# LOCALIZATION NOTE (html.option.Show_Full_Text, html.option.tip.Show_Full_Text):
+# HTML panel option (located in tab's option menu). If set to true, contents
+# of an element will not be cropped
 ShowFullText=Показывать полный текст
 html.option.tip.Show_Full_Text=Не обрезать содержимое элемента
+# LOCALIZATION NOTE (html.option.Show_Whitespace, html.option.tip.Show_Whitespace):
+# HTML panel option (located in tab's option menu). If set to true, whitepace inside of
+# nodes will be shown
 ShowWhitespace=Показывать пустые пробелы
 html.option.tip.Show_Whitespace=Показывать непечатаемые символы в нодах
+# LOCALIZATION NOTE (html.option.Show_Comments, html.option.tip.Show_Comments):
+# HTML panel option (located in tab's option menu). If set to true, comment nodes are displayed
 ShowComments=Показывать комментарии
 html.option.tip.Show_Comments=Показывать ноды-комментарии
+# LOCALIZATION NOTE (html.option.Show_Text_Nodes_With_Entities, html.option.tip.Show_Text_Nodes_With_Entities):
+# HTML panel option (located in tab's option menu). If set to true, special characters will be
+# shown in their entity representation, e.g. " => ", & => &
 html.option.Show_Entities_As_Symbols=Показывать сущности в виде символов
 html.option.tip.Show_Entities_As_Symbols=Показывать все XML-сущности в виде символического представления
 html.option.Show_Entities_As_Names=Показывать сущности в виде имён
 html.option.tip.Show_Entities_As_Names=Показывать все XML-сущности в виде имён
 html.option.Show_Entities_As_Unicode=Показывать сущности в виде Юникода
 html.option.tip.Show_Entities_As_Unicode=Показывать все XML-сущности в виде Юникода
+# LOCALIZATION NOTE (html.option.Highlight_Mutations, html.option.tip.Highlight_Mutations):
+# HTML panel option (located in tab's option menu). If set to true, changes to the nodes
+# will be highlighted
 HighlightMutations=Подсвечивать изменения
 html.option.tip.Highlight_Mutations=Подсвечивать изменения внутри нод
+# LOCALIZATION NOTE (html.option.Expand_Mutations, html.option.tip.Expand_Mutations):
+# HTML panel option (located in tab's option menu). If set to true, the tree view
+# will be expanded to display changed nodes
 ExpandMutations=Разворачивать изменения
 html.option.tip.Expand_Mutations=Разворачивать дерево для отображения изменённых нод
+# LOCALIZATION NOTE (html.option.Scroll_To_Mutations, html.option.tip.Scroll_To_Mutations):
+# HTML panel option (located in tab's option menu). If set to true, the tree view
+# will be scrolled to display changed nodes
 ScrollToMutations=Прокручивать к изменениям
 html.option.tip.Scroll_To_Mutations=Прокручивать дерево для указания на изменённые ноды
+# LOCALIZATION NOTE (html.option.Scroll_To_Mutations, html.option.tip.Scroll_To_Mutations):
+# Inspector option (located in HTML tab's option menu and Firebug menu). If set to true,
+# a panel will be shown including information about the currently inspected element
 ShowQuickInfoBox=Показывать окно быстрой информации
 inspect.option.tip.Show_Quick_Info_Box=Показывать информацию об инспектируемом элементе внутри окна быстрой информации
+# LOCALIZATION NOTE (html.option.Scroll_To_Mutations, html.option.tip.Scroll_To_Mutations):
+# Inspector option (located in HTML tab's option menu and Firebug menu). If set to true, the tree view
+# will be scrolled to display changed nodes
 ShadeBoxModel=Модель Shade Box
 inspect.option.tip.Shade_Box_Model=Затенять разные части блочной модели
 ScrollIntoView=Прокрутить к элементу
@@ -133,8 +201,12 @@ DeleteElement=Удалить элемент
 html.Delete_Element=Удалить элемент из дерева
 DeleteNode=Удалить узел
 html.Delete_Node=Удалить ноду из дерева
+# Quick Info Box
 quickInfo=Быстрая информация
 computedStyle=Скомпилированный стиль
+# LOCALIZATION NOTE (html.Break_On_Mutate, html.Disable_Break_On_Mutate): Tooltips for resume
+# button that are used when the HTML panel is currently selected. The button allows stopping
+# JS execution when DOM of the current page is modified.
 html.Break_On_Mutate=Останавливаться при изменении
 html.Disable_Break_On_Mutate=Отключить остановку при изменении
 html.label.Break_On_Text_Change=Останавливать при изменении текста
@@ -145,30 +217,74 @@ html.label.Break_On_Child_Addition_or_Removal=Останавливаться п
 html.tip.Break_On_Child_Addition_or_Removal=Остановить исполнение JavaScript когда дочерняя нода добавлена или удалена из элемента
 html.label.Break_On_Element_Removal=Останавливать при удалении элемента
 html.tip.Break_On_Element_Removal=Остановить исполнение JavaScript когда элемент удалён
+# LOCALIZATION NOTE (html.label.Expand/Contract_All, html.tip.Expand/Contract_All):
+# Used within the HTML for a context menu item. The user can expand/contract
+# the element and all its children to quickly see the entire hierarchical structure
+# or collapse it.
 html.label.Expand/Contract_All=Развернуть/Свернуть всё
 html.tip.Expand/Contract_All=Развернуть/свернуть всех потомков рекурсивно
+# LOCALIZATION NOTE (dom.scopeName): Used within the DOM panel to name the fake property that
+# contains the innermost closure scope of a function.
 dom.scopeName=(замыкание)
+# LOCALIZATION NOTE (dom.scopeParentName): Used within the DOM panel to name the fake property
+# that contains the parent of a closure scope.
 dom.scopeParentName=(охват родителя)
+# LOCALIZATION NOTE (dom.tip.scopeName): Used within the DOM panel as a tooltip when hovering
+# "(closure)".
 dom.tip.scopeName=Используйте <func>.%closureVariable для доступа в командной строке
+# LOCALIZATION NOTE (dom.tip.scopeMemberName): Used within the DOM panel as a tooltip when
+# hovering a variable in a closure.
+# %S: the variable name - starts with "%"
 dom.tip.scopeMemberName=Используйте <func>.%S для доступа в командной строке
+# LOCALIZATION NOTE (firebug.reps.declarativeScope, firebug.reps.objectScope, firebug.reps.withScope):
+# Labels shown to describe different types of closure scopes.
 firebug.reps.declarativeScope=[декларативный охват]
 firebug.reps.objectScope=[объектный охват]
 firebug.reps.withScope=[с охватом]
+# LOCALIZATION NOTE (firebug.reps.optimizedAway): Label shown to denote a closure variable that has
+# been optimized away.
 firebug.reps.optimizedAway=(оптимизированы)
+# LOCALIZATION NOTE (firebug.reps.element.attribute_value, firebug.reps.element.property_value):
+# Used in the Console panel for elements. If an input element has two different values, one set
+# as "value" attribute and one set as 'value' property, these labels are used to distinguish it.
 firebug.reps.element.attribute_value=значение атрибута
 firebug.reps.element.property_value=значение свойства
+# LOCALIZATION NOTE (dom.label.breakOnPropertyChange, dom.tip.Break_On_Property_Change):
+# Used within the DOM panel to create a 'property breakpoint'. Right-click on an property of an object.
+# The label is also used for the 'Break On Property Change' button (available on the toolbar).
 dom.label.breakOnPropertyChange=Останавливаться при изменении свойства
 dom.tip.Break_On_Property_Change=Остановить исполнение JavaScript когда это свойство изменится
+# LOCALIZATION NOTE (dom.disableBreakOnPropertyChange): Used within the DOM panel for the
+# 'break on next button' in the case the option is activated
 dom.disableBreakOnPropertyChange=Отключить остановку при изменении свойста
 dom.label.DOM_Breakpoints=Точки останова DOM
-EditAttribute=Редактировать атрибут \"%S\"...
+# LOCALIZATION NOTE (EditAttribute, html.tip.Edit_Attribute): Menu item label used in HTML panel context menu. Allows
+# editing an existing HTML element attribute.
+# %S = Name of the clicked attribute
+# examples: Edit Attribute "onclick"...
+EditAttribute=Редактировать атрибут "%S"...
 html.tip.Edit_Attribute=Редактировать значение атрибута "%S" данного элемента
-DeleteAttribute=Удалить атрибут \"%S\"
+# LOCALIZATION NOTE (DeleteAttribute, html.tip.Delete_Attribute): Menu item label used in HTML panel context menu. Allows
+# deleting an existing HTML element attribute.
+# %S = Name of the clicked attribute
+# examples: Delete Attribute "onclick"...
+DeleteAttribute=Удалить атрибут "%S"
 html.tip.Delete_Attribute=Удалить атрибут "%S" данного элемента
+# LOCALIZATION NOTE (InheritedFrom): Displaying an HTML element name + an applied CSS rule,
+# that has been inherited. Used in the Style side panel (under HTML panel).
+# examples: Inherited from table.tabView
 InheritedFrom=Унаследовано от
-SothinkWarning=Расширение Sothink SWF Catcher мешает корректно работать Firebug.<br><br>Пожалуйста прочтите <a href=\"http://www.getfirebug.com/faq.html#Sothink\" target=\"_new\">этот пункт из FAQ Firebug</a> для получения дополнительной информации.
+SothinkWarning=Расширение Sothink SWF Catcher мешает корректно работать Firebug.<br><br>Пожалуйста прочтите <a href="http://www.getfirebug.com/faq.html#Sothink" target="_new">этот пункт из FAQ Firebug</a> для получения дополнительной информации.
+# LOCALIZATION NOTE (css.fontFamilyPreview): Part of a tooltip in the CSS panel
+# and Style side panel (within HTML panel) when the mouse hovers a font name
 css.fontFamilyPreview=Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства. 0123456789
+# LOCALIZATION NOTE (css.EmptyStyleSheet): Displayed in the CSS panel
+# in case there are no stylesheets attached to the current page.
+# The text between <a> and </a> is displayed as a link.
 css.EmptyStyleSheet=Правила отсутствуют. Вы можете <a>создать правило</a>.
+# LOCALIZATION NOTE (css.EmptyElementCSS2): Displayed in the Style side panel
+# (available within the HTML panel) in case there are no CSS rules for the selected element.
+# The text between <a> and </a> is displayed as a link.
 css.EmptyElementCSS=Для данного элемента правила отсутствуют. Вы можете <a>создать правило</a> для него.
 EditStyle=Редактировать стиль элемента...
 style.tip.Edit_Style=Редактировать inline-стиль элемента
@@ -176,26 +292,50 @@ AddRule=Добавить правило…
 css.tip.AddRule=Добавить правило к данному элементу
 NewRule=Новое правило...
 css.tip.New_Rule=Добавить новое правило
+# LOCALIZATION NOTE (css.Delete_Rule, css.tip.Delete_Rule): Menu item label used in the CSS panel context menu.
+# Allows to delete an existing CSS rule
+# %S = Selector of the clicked rule
+# examples: Delete "div > p"
 css.Delete_Rule=Удалить "%S"
 css.tip.Delete_Rule=Удалить правило "%S" и все его свойства
+# LOCALIZATION NOTE (css.menu.Edit_Media_Query, css.menu.tip.Edit_Media_Query):
+# Menu item label used in the CSS panel context menu.
+# Allows to add or edit the CSS media query of an import rule
 css.menu.Edit_Media_Query=Редактировать Media Query…
 css.menu.tip.Edit_Media_Query=Редактировать media query назначенную этому правилу
 NewProp=Новое свойство...
 css.tip.New_Prop=Добавить новое свойство текущему правилу
-EditProp=Редактировать \"%S\"...
+# LOCALIZATION NOTE (EditProp, css.tip.Edit_Prop): Menu item label used in the CSS panel context menu.
+# Allows to edit an existing CSS rule property.
+# %S = Name of the clicked property
+# examples: Edit "background-color"...
+EditProp=Редактировать "%S"...
 css.tip.Edit_Prop=Редактировать значение свойства "%S"
-DisableProp=Выключить \"%S\"
+# LOCALIZATION NOTE (DisableProp): Menu item label used in the CSS panel context menu.
+# Allows to disable an existing CSS rule property.
+# %S = Name of the clicked property
+# examples: Disable "background-color"
+DisableProp=Выключить "%S"
 css.tip.Disable_Prop=Отключить свойство "%S"
-DeleteProp=Удалить \"%S\"
+# LOCALIZATION NOTE (DeleteProp, css.tip.Delete_Prop): Menu item label used in the CSS panel context menu.
+# Allows to delete an existing CSS rule property.
+# %S = Name of the clicked property
+# examples: Delete "background-color"
+DeleteProp=Удалить "%S"
 css.tip.Delete_Prop=Удалить свойство "%S"
+# Console context menu labels.
 BreakOnThisError=Остановиться на текущей ошибке
 console.menu.tip.Break_On_This_Error=Остановить исполнение JavaScript как только возникнет эта ошибка
 BreakOnAllErrors=Останавливаться на всех ошибках
 console.menu.tip.Break_On_All_Errors=Остановить исполнение JavaScript как только возникнет ошибка
+# LOCALIZATION NOTE (script.option.Track_Throw_Catch):
+# Script panel option (located in tab's option menu). If set to true, tracking of
+# throw/catch blocks is enabled.
 TrackThrowCatch=Отслеживать стек вызовов
 script.option.tip.Track_Throw_Catch=Отслеживать исключения, даже когда они пойманы блоками try/catch
 UseLastLineForEvalName=Использовать последнюю линию исходного кода в качестве имени eval
 UseMD5ForEvalName=Использовать MD5 в качестве имени eval
+# Breakpoints side panel
 Breakpoints=Точки останова
 ErrorBreakpoints=Ошибочные точки останова
 LoggedFunctions=Функции в журнале
@@ -206,12 +346,20 @@ breakpoints.option.tip.Disable_All_Breakpoints=Отключить все пер
 ClearAllBreakpoints=Удалить все точки останова
 breakpoints.option.tip.Clear_All_Breakpoints=Удалить все перечисленные точки останова
 ConditionInput=Остановится только в случае если выражение истинно:
+# LOCALIZATION NOTE (breakpoints.Remove_Breakpoint, breakpoints.tip.Remove_Breakpoint, breakpoints.Disable_Breakpoint,
+# breakpoints.tip.Disable_Breakpoint, breakpoints.Enable_Breakpoint, breakpoints.tip.Enable_Breakpoint):
+# Context menu items in the Script panel and Breakpoints side panel.
 breakpoints.Remove_Breakpoint=Удалить точку останова
 breakpoints.tip.Remove_Breakpoint=Удалить точку останова
 breakpoints.Disable_Breakpoint=Отключить точку останова
 breakpoints.tip.Disable_Breakpoint=Отключить точку останова
 breakpoints.Enable_Breakpoint=Включить точку останова
 breakpoints.tip.Enable_Breakpoint=Включить точку останова
+# LOCALIZATION NOTE (script.balloon.Continue, script.balloon.Disable): Labels used for buttons
+# within balloon popup dialog. This dialog appears when the debugger halts at a breakpoint or at
+# a 'debugger;' keyword.
+# Continue: allows to resume the debugger
+# Disable: allows to disable the current 'debugger;' keyword used in the Javascript source
 script.balloon.Continue=Продолжить
 script.balloon.Disable=Отключить
 ScriptsFilterStatic=Показывать статичные скрипты
@@ -219,14 +367,24 @@ ScriptsFilterEval=Показывать статичные и eval-скрипты
 ScriptsFilterEvent=Показывать статичные и event-скрипты
 ScriptsFilterAll=Показывать статичные, eval и event-скрипты
 ScriptsFilterStaticShort=статичные
-ScriptsFilterEvalShort=eval\'ы
-ScriptsFilterEventShort=event\'ы
+ScriptsFilterEvalShort=eval'ы
+ScriptsFilterEventShort=event'ы
 ScriptsFilterAllShort=все
+# LOCALIZATION NOTE (callstack.Expand_All, callstack.tip.Expand_All,
+# callstack.Collapse_All, callstack.tip.Collapse_All):
+# Context menu item labels used in Stack side panel (within Script panel)
+# Firebug needs to be halted at a breakpoint to see these items.
 callstack.Expand_All=Развернуть все
 callstack.tip.Expand_All=Развернуть все функции фрейма стека
 callstack.Collapse_All=Свернуть все
 callstack.tip.Collapse_All=Свернуть все функции фрейма стека
+# LOCALIZATION NOTE (callstack.Execution_not_stopped):
+# Message displayed in the Stack side panel if the script execution is not stopped.
 callstack.Execution_not_stopped=Фреймы стека отображаются когда исполнение скрипта остановлено.
+# LOCALIZATION NOTE (ShowUserProps, ShowUserFuncs, ShowDOMProps, ShowDOMFuncs, ShowDOMConstants,
+# ShowOwnProperties, ShowOwnPropertiesTooltip, ShowEnumerableProperties, ShowEnumerablePropertiesTooltip,
+# ShowInlineEventHandlers):
+# Labels for DOM panel options (located in tab's option menu)
 ShowUserProps=Показывать пользовательские свойства
 dom.option.tip.Show_User_Props=Показать свойства объекта, установленные пользователем
 ShowUserFuncs=Показывать пользовательские функции
@@ -247,8 +405,12 @@ ShowEnumerableProperties=Показывать только перечислим
 ShowEnumerablePropertiesTooltip=Не показывать не перечислимые свойства
 NoMembersWarning=У этого объекта нет свойств.
 NewWatch=Новое наблюдение...
+# LOCALIZATION NOTE (AddWatch, watch.tip.Add_Watch): Context menu item in the DOM panel, Script panel and Watch side panel.
+# Adds the selection or object to the Watch side panel to observe it
 AddWatch=Добавить наблюдение
 watch.tip.Add_Watch=Добавить выделение/объект в панель Слежения для просмотра
+# LOCALIZATION NOTE (CopySourceCode, script.tip.Copy_Source_Code): Context menu item of the Script panel.
+# Copies the selected source code to the clipboard.
 CopySourceCode=Копировать исходный код
 script.tip.Copy_Source_Code=Скопировать выделенный исходный код в буфер обмена
 Use_hash_plus_number_to_go_to_line=Используйте #<номер> для перехода к нужной строке
@@ -271,52 +433,120 @@ DeleteWatch=Удалить наблюдение
 DeleteAllWatches=Удалить все наблюдения
 watch.tip.Delete_Watch=Удалить выражение слежения
 watch.tip.Delete_All_Watches=Удалить все выражения наблюдения
+# LOCALIZATION NOTE (SetBreakpoint, script.tip.Set_Breakpoint): Context menu item of the Script panel.
+# Toggles setting of a breakpoint at the current line of a script inside the Script panel.
 SetBreakpoint=Установить точку останова
 script.tip.Set_Breakpoint=Переключает точку останова на текущей строке
+# LOCALIZATION NOTE (EditBreakpointCondition, breakpoints.tip.Edit_Breakpoint_Condition):
+# Context menu item of the Script panel.
+# Allows to edit the condition, under which a breakpoint stops the JavaScript execution
 EditBreakpointCondition=Редактировать условие точки останова...
 breakpoints.tip.Edit_Breakpoint_Condition=Редактировать условие, при котором данная точка останова прекращает выполнение JavaScript
 NoBreakpointsWarning=На этой странице нет точек останова.
+# LOCALIZATION NOTE (style.option.Only_Show_Applied_Styles, style.option.tip.Only_Show_Applied_Styles):
+# Style side panel option (located in tab's option menu). If set to true,
+# just styles applied to an element will be displayed and overwritten ones will be hidden.
 Only_Show_Applied_Styles=Показывать только применённые стили
 style.option.tip.Only_Show_Applied_Styles=Показывать только те стили, которые применены к элементу
+# LOCALIZATION NOTE (style.option.Show_User_Agent_CSS, style.option.tip.Show_User_Agent_CSS):
+# Style side panel option (located in tab's option menu). If set to true, the Style side panel will
+# also display styles defined by the user agent.
 Show_User_Agent_CSS=Показывать CSS браузера
 style.option.tip.Show_User_Agent_CSS=Так же показывать CSS определённый браузером
+# LOCALIZATION NOTE (computed.option.label.Colors_As_Hex, computed.option.tip.Colors_As_Hex,
+#   computed.option.label.Colors_As_RGB, computed.option.tip.Colors_As_RGB,
+#   computed.option.label.Colors_As_HSL, computed.option.tip.Colors_As_HSL):
+# CSS panel, Style side panel and Computed side panel option (located in tab's option menu).
+# Allows switching the display of CSS colors between hex, rgb(a) and hsl(a) format
 computed.option.label.Colors_As_Hex=Цвета в виде HEX
 computed.option.tip.Colors_As_Hex=Показывать цвета в виде шестнадцатеричных кодов
 computed.option.label.Colors_As_RGB=Цвета в виде RGB
 computed.option.tip.Colors_As_RGB=Показывать цвета в виде RGB формата
 computed.option.label.Colors_As_HSL=Цвета в виде HSL
 computed.option.tip.Colors_As_HSL=Показывать цвета в виде HSL формата
+# LOCALIZATION NOTE (style.option.label.active, style.option.tip.active):
+# Style side panel option tooltip (located in tab's option menu). If the option is set to true,
+# the Style side panel will simulate the element being activated and therefore display
+# :active pseudo-class styles
 style.option.label.active=:active
 style.option.tip.active=Показывать стили псевдо-класса :active
+# LOCALIZATION NOTE (style.option.label.hover, style.option.tip.hover):
+# Style side panel option tooltip (located in tab's option menu). If the option is set to true,
+# the Style side panel will simulate the element being hovered and therefore display
+# :hover pseudo-class styles
 style.option.label.hover=:hover
 style.option.tip.hover=Показывать стили псевдо-класса :hover
+# LOCALIZATION NOTE (style.option.label.focus, style.option.tip.focus):
+# Style side panel option tooltip (located in tab's option menu). If the option is set to true,
+# the Style side panel will simulate the element being focused and therefore display
+# :focus pseudo-class styles
 style.option.label.focus=:focus
 style.option.tip.focus=Показывать стили псевдо-класса :focus
+# LOCALIZATION NOTE (css.label.Inspect_Declaration, css.tip.Inspect_Declaration):
+# CSS panel/Style side panel context menu option. Allows inspecting a font face of a web font
+# declaration inside the CSS panel
 css.label.Inspect_Declaration=Инспектировать объявление
 css.tip.Inspect_Declaration=Инспектировать объявление данного шрифта
+# LOCALIZATION NOTE (css.option.Expand_Shorthand_Properties, css.option.tip.Expand_Shorthand_Properties):
+# CSS panel/Style side panel option (located in tab's option menu). If set to true,
+# CSS shorthand properties like 'margin' will be split into their components, e.g. 'margin-top',
+# 'margin-left', 'margin-bottom', 'margin-right'
 Expand_Shorthand_Properties=Развернуть краткие свойства
 css.option.tip.Expand_Shorthand_Properties=Развернуть сокращённые свойства CSS в составляющие компоненты
+# LOCALIZATION NOTE (computed.option.Sort_Alphabetically, computed.option.tip.Sort_Alphabetically):
+# Computed side panel option (located in tab's option menu). If set to 'alphabetical',
+# the computed styles will be listed alphabetically by their name, otherwise they will be grouped
+# into categories
 Sort_alphabetically=Сортировать по алфавиту
 computed.option.tip.Sort_Alphabetically=Сортировать стили по имени/группе в категории
+# LOCALIZATION NOTE (computed.option.Show_Mozilla_Specific_Styles, computed.option.tip.Show_Mozilla_Specific_Styles):
+# Computed side panel option (located in tab's option menu). If set to true,
+# also styles prefixed with -moz will be displayed
 Show_Mozilla_specific_styles=Показывать стили, специфические для Mozilla
 computed.option.tip.Show_Mozilla_Specific_Styles=Всегда показывать стили с префиксом -moz
+# LOCALIZATION NOTE (computed.No_User-Defined_Styles):
+# Displayed in the Computed side panel (available within the HTML panel) in case there are no
+# user-defined CSS rules applying to the selected element.
 computed.No_User-Defined_Styles=У данного элемента отсутствуют правила, определённые пользователем.
 script.Type_any_key_to_filter_list=Нажмителю любую клавишу для фильтрации
+# LOCALIZATION NOTE (location.inline):
+# Label used within the Location Menu for inline styles or scripts
 location.inline=Внутренние
+# LOCALIZATION NOTE (location.no_domain):
+# Label used within the Location Menu for the group of scripts,
+# which don't have a domain specified like e.g. eval()'ed scripts
 location.no_domain=Без домена
+# LOCALIZATION NOTE (LayoutPadding, LayoutBorder, LayoutMargin, LayoutPosition, LayoutAdjacent):
+# Labels used to describe layout properties a the selected HTML element.
+# Used in the Layout side panel (within HTML panel).
 LayoutPadding=padding
 LayoutBorder=border
 LayoutMargin=margin
 LayoutPosition=позиция
 LayoutAdjacent=смежный
 position=позиция
+# LOCALIZATION NOTE (layout.option.Show_Rulers, layout.option.tip.Show_Rulers):
+# Layout side panel option (located in tab's option menu). If set to true,
+# rulers and guides will be displayed for the element on the page
+# when hovering parts of the layout box
 ShowRulers=Показывать линейки и направляющие
 layout.option.tip.Show_Rulers=Показывать линейки и направляющие на странице, при наведении на элементы блока макета
+# Net panel
 Loading=Загружается...
 Headers=Заголовки
+# LOCALIZATION NOTE (net.tip.Clear)
+# Tooltip for the button inside the Net panel to clear the request list
 net.tip.Clear=Очистить список запросов
+# LOCALIZATION NOTE (net.header.Reset_Header, net.header.tip.Reset_Header)
+# Label for header context menu within the Net panel
 net.header.Reset_Header=Сбросить заголовок
 net.header.tip.Reset_Header=Сбросить экран заголовков
+# LOCALIZATION NOTE (net.header.URL, net.header.URL_Tooltip, net.header.Status,
+# net.header.Status_Tooltip, net.header.Domain, net.header.Domain_Tooltip,
+# net.header.Size, net.header.Size_Tooltip, net.header.Timeline, net.header.Timeline_Tooltip,
+# net.header.Local_IP, net.header.Local_IP_Tooltip, net.header.Remote_IP,
+# net.header.Remote_IP_Tooltip, net.header.Protocol, net.header.Protocol_Tooltip):
+# Labels and tooltips for headers displayed on top of the Net panel.
 net.header.URL=URL
 net.header.URL_Tooltip=Запрошенный URL и использованный метод HTTP.
 net.header.Status=Статус
@@ -333,11 +563,23 @@ net.header.Remote_IP=Удалённый IP
 net.header.Remote_IP_Tooltip=Удалённый IP адрес и порт, к которому привязывается запрос.
 net.header.Protocol=Протокол
 net.header.Protocol_Tooltip=Протокол, используемый для поиска ресурса в сети.
+# LOCALIZATION NOTE (net.label.Network_Breakpoints): Label for network breakpoints group.
 net.label.XHR_Breakpoints=Точки останова XHR
+# LOCALIZATION NOTE (net.label.Break_On_XHR, net.tip.Break_On_XHR):
+# Net panel context menu item for stopping the JavaScript execution on an XHR
 net.label.Break_On_XHR=Останавливать при XHR
 net.tip.Break_On_XHR=Остановить исполнение JavaScript как только сделан XMLHttpRequest
+# LOCALIZATION NOTE (net.headers.view_source, net.headers.pretty_print): Labels used in the
+# Net panel's Headers tab (displayed if you expand a network request). The label is used
+# for a link, that switches the view between raw source code and formated header values.
 net.headers.view_source=показать исходный код
 net.headers.pretty_print=симпатичный print
+# LOCALIZATION NOTE (net.filter.label.All, net.filter.tooltip.All, net.filter.label.HTML,
+# net.filter.tooltip.HTML, net.filter.label.CSS, net.filter.tooltip.CSS, net.filter.label.JS,
+# net.filter.tooltip.JS, net.filter.label.XHR, net.filter.tooltip.XHR, net.filter.label.Images,
+# net.filter.tooltip.Images, net.filter.label.Plugins, net.filter.tooltip.Plugins,
+# net.filter.label.Media, net.filter.tooltip.Media):
+# Labels and tooltips for Net panel filter (used on the Net panel toolbar)
 net.filter.label.All=Все
 net.filter.tooltip.All=Показывать все MIME-типы
 net.filter.label.HTML=HTML
@@ -356,8 +598,14 @@ net.filter.label.Media=Медиа
 net.filter.tooltip.Media=Показывать только аудио и видео
 net.filter.label.Fonts=Шрифты
 net.filter.tooltip.Fonts=Показывать только шрифты
+# LOCALIZATION NOTE (Post, Put): Label (verb) used in the Net panel for detailed info about
+# a network request (displayed when a Net panel entry is expanded). The content of
+# this tab displays sent data (related to an HTTP send method).
 Post=Post
 Put=Put
+# LOCALIZATION NOTE (Response, URLParameters, Cache, HTML, jsonviewer.tab.JSON, xmlviewer.tab.XML):
+# Labels used in the Net panel for detailed info about a network request (displayed
+# when a Net panel entry is expanded)
 Response=Ответ
 URLParameters=Параметры
 Cache=Кэш
@@ -382,26 +630,55 @@ fontviewer.trademark=Торговая марка
 fontviewer.licensee=Лицензия
 fontviewer.extension=Расширение
 fontviewer.pangram=Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства.
+# LOCALIZATION NOTE (jsonviewer.sort, jsonviewer.do_not_sort): Label (verb) used in the
+# Net panel for JSON responses. Allows to sort alphabetically.
 jsonviewer.sort=Сортировать по ключу
 jsonviewer.do_not_sort=Не сортировать
-net.jsonviewer.Copy_JSON=Копировать \\\"%S\\\" как JSON
+# LOCALIZATION NOTE (net.jsonviewer.Copy_JSON): Label (verb) displayed in the JSON tab of a network request
+# in the Net & Console panel when copying JSON replies.
+# %S = Part of the JSON, that was clicked
+# example: Copy "person" as JSON
+net.jsonviewer.Copy_JSON=Копировать "%S" как JSON
+# LOCALIZATION NOTE (RequestHeaders, ResponseHeaders, CachedResponseHeaders, PostRequestHeaders):
+# Label (noun) used in the Net panel (displayed inside the Headers tab of a request).
 RequestHeaders=Заголовки запроса
 ResponseHeaders=Заголовки ответа
 CachedResponseHeaders=Заголовки ответа из кэша
 PostRequestHeaders=Запрос заголовков из потока загрузки
+# LOCALIZATION NOTE (net.label.ResponseHeadersFromBFCache):
+# Label (noun) used in the Net panel and displayed instead of Response Headers
+# if the response comes directly from the cache (BFCache).
 net.label.ResponseHeadersFromBFCache=Данные запроса были получены из кэша, мы не получили ответа от сервера. Ниже отображён кэшированный ответ.
+# LOCALIZATION NOTE (plural.Limit_Exceeded2): Semicolon list of plural forms.
+# A message displayed in the Net panel when some entries must be removed in the case the maximum number
+# of entries has been reached.
+# %1 = the number of entries removed
+# example: Firebug's log limit has been reached. 150 entries not shown.
 plural.Limit_Exceeded2=Был достигнут лимит журнала сообщений Firebug. %1$S вхождение не отображается.;Был достигнут лимит журнала сообщений Firebug. Не отображается %1$S вхождений.
 LimitPrefs=Настройки лимита
+# LOCALIZATION NOTE (LimitPrefsTitle): A message displayed in the Net panel when log limit
+# has been reached. Informing the user what preference should be changed to modify the limit.
+# %S = Name of a preference
+# examples: In order to change the limit modify 'firebug.extensions.console.logLimit'
 LimitPrefsTitle=Для изменения лимита отредактируйте: %S
 Refresh=Обновить
 panel.tip.Refresh=Обновить экран панели
+# LOCALIZATION NOTE (OpenInTab, firebug.tip.Open_In_Tab): Context menu option of source links,
+# stylesheets and net requests to open the underlying URL in a new browser tab
 OpenInTab=Открыть в новой вкладке
 firebug.tip.Open_In_Tab=Открыть URL в новой вкладке
 Open_Response_In_New_Tab=Открыть ответ в новой вкладке
 net.tip.Open_Response_In_New_Tab=Открыть ответ в новой вкладке
+# LOCALIZATION NOTE (Profile): Caption (verb) for reported profile info.
+# (result of JavaScript profiler tool).
 Profile=Профилирование
-ProfilerStarted=Профайлер запущен. Нажмите \'Профилирование\' ешё раз для просмотра отчета.
+ProfilerStarted=Профайлер запущен. Нажмите 'Профилирование' ешё раз для просмотра отчета.
 ProfilerRequiresTheScriptPanel=Панель Сценарий должна быть включена, чтобы заработал профайлер.
+# LOCALIZATION NOTE (plural.Profile_Time2): Semicolon list of plural forms.
+# Caption for reported profile info (result of JavaScript profiler tool).
+# %1 = Number of milliseconds
+# %2 = Number of calls (plural)
+# example: (56ms, 15 calls)
 plural.Profile_Time2=(%1$Sms, %2$S вызов);(%1$Sms, %2$S вызовов)
 NothingToProfile=Нечего профилировать.
 PercentTooltip=Процентное соотношение времени проведенного в этой функции.
@@ -414,6 +691,10 @@ MaxHeaderTooltip=Максимальное время, включая вызов
 ProfileButton.Tooltip=Профилировать время исполнения JavaScript
 Function=Функция
 Percent=Процент
+# LOCALIZATION NOTE (Calls, OwnTime, Time, Avg, Min, Max, File): Used in profiler report header
+# (name of a report column). In order to see this, select the Console panel, start profiling
+# by clicking the Profile button and stop it by clicking it again. The report is logged into the
+# Console panel. Make sure Script panel is enabled.
 Calls=Вызовы
 OwnTime=Собственное время
 Time=Время
@@ -421,6 +702,7 @@ Avg=Средн.
 Min=Мин.
 Max=Макс.
 File=Файл
+# Support for standard actions.
 Copy=Копировать
 Cut=Вырезать
 Remove=Удалить
@@ -435,8 +717,13 @@ CopyXPath=Копировать XPath
 html.tip.Copy_XPath=Копировать XPath элемента в буфер обмена
 Copy_CSS_Path=Скопировать CSS-путь
 html.tip.Copy_CSS_Path=Копировать CSS путь элемента в буфер обмена
+# LOCALIZATION NOTE (html.menu.Paste, html.tip.Paste): Context menu item (with subitems).
+# Used in the HTML Panel to paste HTML/SVG/XML/XUL/MathML contents
+# %S = the type of the content to paste (HTML, SVG, XML, XUL or MathML)
 html.menu.Paste=Вставить %S
 html.tip.Paste=Вставить %S как содержимое
+# LOCALIZATION NODE (html.menu.Paste_*, html.tip.Paste_*): Context menu items.
+# These items are paste options, and appears as subitems of html.menu.Paste in the context menu.
 html.menu.Paste_Replace_Content=Заменить содержимое
 html.tip.Paste_Replace_Content=Заменить содержимое ноды
 html.menu.Paste_Replace_Node=Заменить ноду
@@ -449,8 +736,12 @@ html.menu.Paste_Before=Перед
 html.tip.Paste_Before=Вставить перед нодой
 html.menu.Paste_After=После
 html.tip.Paste_After=Вставить после ноды
+# LOCALIZATION NOTE (html.menu.Reload_Frame, html.menu.tip.Reload_Frame):
+# Context menu item of HTML frames
 html.menu.Reload_Frame=Перезагрузить фрейм
 html.menu.tip.Reload_Frame=Перезагрузить содержимое фрейма
+# LOCALIZATION NOTE (CopyError, console.menu.tip.Copy_Error): Context menu item. Used in the Console
+# panel when clicking an error object.
 CopyLocation=Копировать адрес
 clipboard.tip.Copy_Location=Копировать URL расположения объекта в буфер обмена
 CopyURLParameters=Скопировать параметры URL
@@ -465,45 +756,138 @@ CopyResponseHeaders=Копировать заголовки ответа
 net.tip.Copy_Response_Headers=Копировать заголовки ответа в буфер обмена
 CopyResponse=Копировать тело ответа
 net.tip.Copy_Response=Копировать тело ответа в буфер обмена
+# LOCALIZATION NOTE (CopyError, console.menu.tip.Copy_Error): Context menu item. Used in the Console
+# panel when clicking an error object.
 CopyError=Копировать ошибку
 console.menu.tip.Copy_Error=Копировать информацию об ошибке в буфер обмена
+# LOCALIZATION NOTE (CopySource, dom.tip.Copy_Source): Context menu item of. Used in the Console
+# panel when clicking an error object.
 CopySource=Копировать функцию
 dom.tip.Copy_Source=Копировать исходный код функции в буфер обмена
-ShowCallsInConsole=Записывать вызовы к \"%S\"
+# LOCALIZATION NOTE (ShowCallsInConsole): Context menu item of a function object inside the
+# DOM panel and Watch side panel.
+# %S = Name of the function
+# example: Log Calls to "getData"
+# example: Log calls to the function "getData" inside the Console panel
+ShowCallsInConsole=Записывать вызовы к "%S"
 dom.tip.Log_Calls_To_Function=Записывать в консоль вызовы функции "%S"
+# LOCALIZATION NOTE (ShowEventsInConsole, html.tip.Show_Events_In_Console):
+# Menu item label used in HTML elements context menu. Allows logging of event information
+# to the console.
 ShowEventsInConsole=Записывать события
 html.tip.Show_Events_In_Console=Записывать в консоль информацию о событии
+# LOCALIZATION NOTE (panel.Enabled, panel.tip.Enabled):
+# Option inside the options menu of activatable panels. Enables/Disables the panel.
 panel.Enabled=Панель включена
 panel.tip.Enabled=Переключить активацию панели
+# LOCALIZATION NOTE (panel.tooltip.Show_Command_Line_Popup): Tooltip used for a button on main
+# Firebug toolbar. This button allows to open the Command Line within other panels
+# than the Console panel.
 panel.tooltip.Show_Command_Line_Popup=Показать всплывающую командную строку
-console.MethodNotSupported=Консоль Firebug не поддерживает \'%S\'
+# LOCALIZATION NOTE (console.MethodNotSupported): Message displayed in the Console panel,
+# if a specific method is not supported.
+# %S = Name of the unsupported method
+# example: Firebug console does not support 'bind'
+console.MethodNotSupported=Консоль Firebug не поддерживает '%S'
+# LOCALIZATION NOTE (commandline.errorSourceHeader): Message displayed in the header of the
+# source code where an exception has occured.
 commandline.errorSourceHeader=ВЫРАЖЕНИЕ ВЫПОЛНЕНО С ИСПОЛЬЗОВАНИЕМ КОМАНДНОЙ СТРОКИ FIREBUG:
+# LOCALIZATION NOTE (commandline.MethodDisabled): Message displayed in the Console panel,
+# if a disabled method is entered via the Command Line.
 commandline.MethodDisabled=Этот метод командной строки временно отключен.
-commandline.MethodNotSupported=Командная строка Firebug не поддерживает \'%S\'
+# LOCALIZATION NOTE (commandline.MethodNotSupported): Message displayed in the Console panel,
+# if an unsupported method is entered via the Command Line.
+# %S = Name of the unsupported method
+commandline.MethodNotSupported=Командная строка Firebug не поддерживает '%S'
+# LOCALIZATION NOTE (commandline.CurrentWindow): Message displayed in the Console panel when
+# cd(someWindow) is run. A space and a representation of the window object is appended
+# internally by Firebug.
 commandline.CurrentWindow=Текущее окно:
+# LOCALIZATION NOTE (console.Disable_Break_On_All_Errors, console.Break_On_All_Errors):
+# Tooltip for the "Break on... " button used when the Console panel is selected.
 console.Disable_Break_On_All_Errors=Отключить остановку при ошибках
 console.Break_On_All_Errors=Останавливать на всех ошибках
+# LOCALIZATION NOTE (console.Break_On_This_Error): Tooltip for the breakpoint besides an error message
+# in the Console panel
 console.Break_On_This_Error=Прерывать на этой ошибке
+# LOCALIZATION NOTE (console.Use_Arrow_keys,_Tab_or_Enter): Hint at the top of the Completion List Popup
+# in the Command Line
 console.Use_Arrow_keys,_Tab_or_Enter=Используйте клавиши со стрелками, Tab или Enter
-console.JSDisabledInFirefoxPrefs=JavaScript отключен в настройках Firefox. Если Вы желаете использовать консоль, пожалуйста подключите Javascript - \'Инструменты\' -> \'Настройки\' -> \'Содержимое\' -> \'Использовать JavaScript\'
+# LOCALIZATION NOTE (console.JSDisabledInFirefoxPrefs): Hint shown inside the Console panel in the case
+# JavaScript is not available
+console.JSDisabledInFirefoxPrefs=JavaScript отключен в настройках Firefox. Если Вы желаете использовать консоль, пожалуйста подключите Javascript - 'Инструменты' -> 'Настройки' -> 'Содержимое' -> 'Использовать JavaScript'
+# LOCALIZATION NOTE (console.tip.ScriptPanelMustBeEnabledForTraces): Message shown inside the Console
+# panel instead of a stack trace when it is missing because the script panel is disabled. The text
+# enclosed in <a></a> is a link which enables the Script panel.
 console.ScriptPanelMustBeEnabledForTraces=Панель Сценарий должна быть включена, чтобы получить ошибки в стэке. <a>Включить панель Сценарий.</a>
+# LOCALIZATION NOTE (tooltip.multipleFiltersHint):
+# Hint used for Console and Net panel filter button tooltips describing the shortcut for selecting
+# multiple filters
 tooltip.multipleFiltersHint=Используйте Ctrl+мышь для выбора нескольких фильтров
-console.multiHighlightLimitExceeded=В массиве слишком много элементов для подсвечивания на странице (текущий лимит - %S).\\\\nСмотрите настройку \\\'extensions.firebug.multiHighlightLimit\\\'.
+# LOCALIZATION NOTE (console.multiHighlightLimitExceeded):
+# Used by the Console panel for arrays. If the user moves the mouse over an array bracket,
+# all elements in the array are highlighted on the page. If there are too many elements
+# in the array, this tooltip is displayed instead.
+# %S = Maximal number of elements to highlight
+# example: There are too many elements in the array to highlight on the page (current limit is 100).
+#          See 'extensions.firebug.multiHighlightLimit' preference.
+console.multiHighlightLimitExceeded=В массиве слишком много элементов для подсвечивания на странице (текущий лимит - %S).\nСмотрите настройку 'extensions.firebug.multiHighlightLimit'.
+# LOCALIZATION NOTE (commandline.disabledForXMLDocs): This message is displayed in the Console panel
+# in cases when the current page is an XML document. The text between <a> and </a> is a link,
+# that causes to switch to HTML rendering of the document.
 commandline.disabledForXMLDocs=Командная строка Firebug отключена для XML-страниц. Вы можете <a>переключиться на HTML</a> для работы с ней.
+# LOCALIZATION NOTE (commandline.Use_in_Command_Line): Right-click option for copying a JS value into the variable
+# $p and opening the Command Line.
 commandline.Use_in_Command_Line=Использовать в командной строке
 commandline.tip.Use_in_Command_Line=Перевести фокус на командную строку и сделать это значение доступным как "$p"
+# LOCALIZATION NOTE (commandline.include.includeSuccess): For the include() function. This message is displayed
+# in the Console panel when a remote script evaluation succeeded
+# %S = the filename
 commandline.include.includeSuccess=%S успешно подключен.
+# LOCALIZATION NOTE (commandline.include.aliasNotFound): For the include() function. This message is displayed
+# in the Console panel when a requested alias is not found
+# %S = the alias name
 commandline.include.aliasNotFound=Псевдоним "%S" не найден.
+# LOCALIZATION NOTE (commandline.include.loadFail): For the include() function. This message is displayed
+# in the Console panel when the remote script download failed
+# %S = the filename
 commandline.include.loadFail=Скрипт не может быть загружен: %S
+# LOCALIZATION NOTE (commandline.include.invalidRequestProtocol): For the include() function. This message is displayed
+# in the Console panel when the user tries to download a script with another scheme than HTTP(S)
+# %S = the filename
 commandline.include.invalidRequestProtocol=Поддерживаются только HTTP/HTTPS протоколы.
+# LOCALIZATION NOTE (commandline.include.invalidSyntax): For the include() function. This message is displayed
+# in the Console panel when the user tries to execute a non-Javascript file
+# or when the script contains syntax errors
 commandline.include.invalidSyntax=Не удалось подключить по причине ошибок синтаксиса. Файл на самом деле содержит JavaScript?
+# LOCALIZATION NOTE (commandline.include.aliasCreated): For the include() function. This message is displayed
+# in the Console panel when a new alias is created successfully
+# %S = the alias name
 commandline.include.aliasCreated=Псевдоним "%S" создан.
+# LOCALIZATION NOTE (commandline.include.aliasRemoved): For the include() function. This message is displayed
+# in the Console panel when a new alias is removed successfully
+# %S = the alias name
 commandline.include.aliasRemoved=Псевдоним "%S" удалён.
+# LOCALIZATION NOTE (commandline.include.invalidAliasName): For the include() function. This message is displayed
+# in the Console panel if an invalid alias name (which contains "/" or ".") is provided.
+# %S = the invalid alias name
 commandline.include.invalidAliasName=Имена псевдонимов не должны содержать "." или "/"; неправильное имя псевдонима: "%S".
+# LOCALIZATION NOTE (commandline.include.tooLongAliasName): For the include() function. This message is displayed
+# in the Console panel if the provided alias name is too long (i.e. more than 30 characters)
+# %S = the invalid alias name
 commandline.include.tooLongAliasName=Имена псевдонимов должны содержать не более 30 символов; неправильное имя псевдонима: "%S".
+# LOCALIZATION NOTE (commandline.include.wrongAliasArgument): For the include() function. This message is displayed
+# in the Console panel if the type of the alias name is invalid (a string is expected)
 commandline.include.invalidAliasArgumentType=Неправильный второй аргумент; ожидалось имя псевдонима.
+# LOCALIZATION NOTE (commandline.include.wrongUrlArgument): For the include() function. This message is displayed
+# in the Console panel if the type of the url arguement is invalid (a string or null are expected)
 commandline.include.invalidUrlArgumentType=Неправильный аргумент адреса url.
+# LOCALIZATION NOTE (commandline.include.confirmDelete): For the include() function. This message is displayed
+# in a confirmation dialog when the user wants to delete an alias
+# %S = the name of the alias to delete
 commandline.include.confirmDelete=Вы правда хотите удалить псевдоним: "%S"?
+# LOCALIZATION NOTE (commandline.include.noDefinedAlias): For the include() function. This message is displayed
+# when the user wants to display the aliases table but there no alias is defined.
 commandline.include.noDefinedAlias=(псевдонимы пока не заданы)
 commandline.tip.Delete_Alias=Удалить псевдоним
 commandline.tip.Edit_Alias_Name=Редактировать имя псевдонима
@@ -515,9 +899,23 @@ commandline.label.EditAliasName=Редактировать имя псевдон
 commandline.label.EditAliasURL=Редактировать URL псевдонима
 commandline.label.OpenInScratchpad=Открыть в блокноте
 commandline.label.IncludeScript=Подключить "%S"
+# LOCALIZATION NOTE (Do_not_show_this_message_again):
+# Message within a confirmation dialog that is displayed when deleting things.
+# This message is displayed next to a check-box that can be used to disabled this
+# confirmation.
+#
+# NOTE to translators: this message was originally taken from cookies.msg.Do_not_show_this_message_again
 Do_not_show_this_message_again=Не показывать это сообщение
+# LOCALIZATION NOTE (scratchpad.loading, scratchpad.failLoading)
+# Used when Firebug downloads a remote script and wants to display it in Scratchpad
+# The messages appears as Javascript Comments in Scratchpad
 scratchpad.loading=Загрузка, пожалуйста подождите…
 scratchpad.failLoading=Во время загрузки скрипта произошла ошибка.
+# LOCALIZATION NOTE (net.sizeinfo.Response_Body, net.sizeinfo.Post_Body, net.sizeinfo.Total_Sent,
+# net.sizeinfo.Total_Received, net.sizeinfo.Including_Headers):
+# Labels used for a detailed size info tooltip. The tooltip is displayed, if the mouse hovers over
+# a request size displayed within the Net panel. 'Total Sent' and 'Total Received' info includes
+# sent and received headers size.
 net.sizeinfo.Response_Body=Тело ответа
 net.sizeinfo.Post_Body=Тело запроса
 net.sizeinfo.Total_Sent=Всего отправлено
@@ -525,24 +923,50 @@ net.sizeinfo.Total_Received=Всего получено
 net.sizeinfo.Including_HTTP_Headers=Включая заголовки HTTP
 net.ActivationMessage=Сетевая панель активирована. Любые запросы, пока сетевая панель неактивна, не будут показаны.
 net.responseSizeLimitMessage=Достигнут лимит ответа Firebug. Нажмите <a>здесь</a>, чтобы открыть полный ответ в новой вкладке Firefox.
-net.postDataSizeLimitMessage=Лимит на размер Post был достигнут. Удалено Firebug\'ом.
+# LOCALIZATION NOTE (net.postDataSizeLimitMessage): A warning message displayed within the Net
+# panel (inside the Post tab of an expanded request entry). The message informs the user that
+# posted data reached Firebug's size limit and only part of it is displayed in the UI.
+net.postDataSizeLimitMessage=Лимит на размер Post был достигнут. Удалено Firebug'ом.
 net.Break_On_XHR=Останавливать на XHR
 net.label.Parameters=Параметры
 net.label.Parts=Части
 net.label.Source=Исходный код
+# LOCALIZATION NOTE (net.label.Resend): Label for context menu item. Used when clicking
+# on a HTTP request (in the Console or Net panel) to re-send it with the same arguments.
 net.label.Resend=Отослать ещё раз
 net.tip.Resend=Отправить запрос ещё раз
+# LOCALIZATION NOTE (net.option.Disable_Browser_Cache, net.option.tip.Disable_Browser_Cache):
+# Net panel option (located in tab's option menu). If set to true, the browser's HTTP cache is disabled
 net.option.Disable_Browser_Cache=Отключить кэш браузера
 net.option.tip.Disable_Browser_Cache=Отключить HTTP кэш браузера
+# LOCALIZATION NOTE (net.option.Show_Paint_Events, net.option.tip.Show_Paint_Events):
+# Net panel option (located in tab's option menu). If set to true, the Net panel displays
+# MozAfterPaint events.
+# See also: http://www.softwareishard.com/blog/firebug/watching-mozafterpaint-in-firebug/
 net.option.Show_Paint_Events=Показывать события отрисовки
 net.option.tip.Show_Paint_Events=Показывать события MozAfterPaint в виде зелёных линий внутри линии времени
+# LOCALIZATION NOTE (net.option.Show_BFCache_Responses, net.option.tip.Show_BFCache_Responses):
+# Net panel option (located in tab's option menu). If set to true, the Net panel also displays responses coming from
+# BFCache (back-forward cache). See also: https://developer.mozilla.org/En/Working_with_BFCache
 net.option.Show_BFCache_Responses=Показывать ответы BFCache
 net.option.tip.Show_BFCache_Responses=Также будут показаны ответы Back-Forward Cache
+# LOCALIZATION NOTE (script.Break_On_Next, script.Disable_Break_On_Next):
+# Tooltip used for the Break On Next button inside panel toolbar of the Script panel.
+# (breaking on next executed JavaScript statement)
 script.Break_On_Next=Останавливать на следующей ошибке
 script.Disable_Break_On_Next=Отключить остановку на следующем
 ShowHttpHeaders=Показать HTTP заголовки
+# LOCALIZATION NOTE (plural.Request_Count2): Semicolon list of plural forms.
+# A label used in the Net panel. Displays the number of HTTP requests executed by the current page.
+# %1 = Number of requests
+# example: 21 requests
 plural.Request_Count2=%1$S запрос;%1$S запросов
+# LOCALIZATION NOTE (net.summary.from_cache):
+# Label used in the Net panel's request summary. Displays the summarized response size coming from cache for all HTTP requests.
 net.summary.from_cache=%S из кэша
+# LOCALIZATION NOTE (net.summary.tip.request_count, net.summary.tip.total_size,
+# net.summary.tip.total_cached_size, net.summary.tip.total_request_time):
+# Labels used for the tooltips in the Net panel's request summary
 net.summary.tip.request_count=Количество запросов
 net.summary.tip.total_size=Размер всех запросов
 net.summary.tip.total_cached_size=Размер всех кэшированных запросов
@@ -557,28 +981,56 @@ StyleGroup-box=Блочная модель
 StyleGroup-layout=Макет
 StyleGroup-other=Другая
 Dimensions=%S х %S
+# LOCALIZATION NOTE (CopyColor, css.tip.Copy_Color):
+# Context menu item for color values inside the CSS panel.
+# Copies the color value to the clipboard.
 CopyColor=Копировать цвет
 css.tip.Copy_Color=Копировать цвет в буфер обмена
+# LOCALIZATION NOTE (CopyImageLocation, css.tip.Copy_Image_Location,
+# OpenImageInNewTab, css.tip.Open_Image_In_New_Tab):
+# Context menu items for images inside the CSS panel.
+# Allow copying the URL of an image to the clipboard and opening it in a new browser tab
 CopyImageLocation=Копировать адрес картинки
 css.tip.Copy_Image_Location=Копировать URL изображения в буфер обмена
 OpenImageInNewTab=Открыть изображение в новой вкладке
 css.tip.Open_Image_In_New_Tab=Открывает изображение в новой вкладке
+# LOCALIZATION NOTE (OmitObjectPathStack, callstack.option.tip.Omit_Object_Path_Stack):
+# Stack side panel option (located in tab's option menu). If set to true,
+# the object path stack won't be displayed.
 OmitObjectPathStack=Пропускать стек панели инструментов
 callstack.option.tip.Omit_Object_Path_Stack=Не отображать стек пути объекта
 Load_Original_Source=Загрузить оригинальный источник
 css.tip.Load_Original_Source=Отбросить изменения и загрузить оригинальный CSS
+# LOCALIZATION NOTE (callstack.option.Show_Arguments, callstack.option.tip.Show_Arguments):
+# Stack side panel option (located in tab's option menu). If set to true,
+# function arguments are displayed
 callstack.option.Show_Arguments=Показать аргументы
 callstack.option.tip.Show_Arguments=Так же показывать аргументы функций
+# LOCALIZATION NOTE (Copy_Rule_Declaration, css.tip.Copy_Rule_Declaration):
+# Menu item label and tooltip used in CSS panel/Style side panel context menu.
+# Allows copying the current CSS rule including all its properties to the clipboard.
 Copy_Rule_Declaration=Скопировать объявление правила
 css.tip.Copy_Rule_Declaration=Копировать правило, включая все свойства в буфер обмена
+# LOCALIZATION NOTE (Copy_Style_Declaration, css.tip.Copy_Style_Declaration):
+# Menu item label and tooltip used in CSS panel/Style side panel context menu.
+# Allows copying the current CSS rule's properties to the clipboard.
 Copy_Style_Declaration=Копировать определение стиля
 css.tip.Copy_Style_Declaration=Копировать свойства правила в буфер обмена
+# LOCALIZATION NOTE (css.label.Copy_Property_Declaration, css.tip.Copy_Property_Declaration,
+# css.label.Copy_Property_Name, css.tip.Copy_Property_Name, css.label.Copy_Property_Value,
+# css.tip.Copy_Property_Value):
+# Menu item labels and tooltips used in CSS panel/Style side panel context menu.
+# Allow copying the current CSS property's declaration/name/value to the clipboard.
 css.label.Copy_Property_Declaration=Скопировать объявление свойства
 css.tip.Copy_Property_Declaration=Скопировать объявление свойства в буфер обмена
 css.label.Copy_Property_Name=Скопировать имя свойства
 css.tip.Copy_Property_Name=Скопировать имя свойства в буфер обмена
 css.label.Copy_Property_Value=Скопировать значение свойства
 css.tip.Copy_Property_Value=Скопировать значение свойства в буфер обмена
+# LOCALIZATION NOTE (plural.Error_Count2): Semicolon list of plural forms.
+# A label used in for Firebug Start Button. Displays the number of JavaScript errors found by Firebug.
+# %1 = Number of errors
+# example: 111 Errors
 plural.Error_Count2=%1$S ошибка;%1$S ошибок
 moduleManager.title=%S панель отключена
 moduleManager.desc3=Используйте иконку статусной строки для включения или отключения панелей. Используйте меню панели для точного управления:
@@ -589,21 +1041,36 @@ Reset_Panels_To_Disabled=Сбросить панели и отключить
 Open_Console=Открыть консоль
 Open_Console_Tooltip=Открыть панель слежения для Firebug.
 Scope_Chain=Цепь охвата
+# LOCALIZATION NOTE (With_Scope, Call_Scope, Window_Scope):
+# Names of kinds of scopes. Probably best left in English.
+# With: the scope inside of the with(obj) {} statement
 With_Scope=С
+# Call: the scope inside of a function eg function foo() { XXX here XXX var f = function() {} };
 Call_Scope=Вызов
+# Window: the scope inside of a Javascript window object.
 Window_Scope=Окно
+# LOCALIZATION NOTE (requestinfo.Blocking, requestinfo.Resolving, requestinfo.Connecting,
+# requestinfo.Sending, requestinfo.Waiting, requestinfo.Receiving, requestinfo.ContentLoad,
+# requestinfo.WindowLoad):
+# Net panel timing info labels. Displayed in a tooltip (aka time-info-tip) when hovering the
+# waterfall graph in the Net panel.
 requestinfo.Blocking=Блокирование
 requestinfo.Resolving=DNS-запрос
 requestinfo.Connecting=Подключение
 requestinfo.Sending=Отправка
 requestinfo.Waiting=Ожидание
 requestinfo.Receiving=Получение
-requestinfo.ContentLoad=\'Содержимое DOM загружено\' (событие)
-requestinfo.WindowLoad=\'загрузка\' (событие)
+requestinfo.ContentLoad='Содержимое DOM загружено' (событие)
+requestinfo.WindowLoad='загрузка' (событие)
+# LOCALIZATION NOTE (requestinfo.started.label, requestinfo.phases.label, requestinfo.timings.label):
+# Labels used within a tooltip (aka time-info-tip) for waterfall graph in the Net panel.
 requestinfo.started.label=Запросить время начала с запуска
 requestinfo.phases.label=Запросить фазы начала и затраченного времени относительно времени запуска:
 requestinfo.timings.label=Время события относительно к началу запроса:
 search.Firebug_Search=Поиск Firebug
+# LOCALIZATION NOTE (search.Next, search.Previous, search.Case_Sensitive, search.Case_Insensitive,
+# search.Multiple_Files, search.Use_Regular_Expression):
+# Labels used within an options menu for the search box. This menu is displayed if the search box is focused.
 search.Next=След.
 search.tip.Next=Искать следующее совпадение
 search.Previous=Предыдущее
@@ -616,6 +1083,10 @@ search.Multiple_Files=Множественные файлы
 search.tip.Multiple_Files=Искать во всех файлах, которые относятся к данной панели
 search.Use_Regular_Expression=Использовать регулярное выражение
 search.tip.Use_Regular_Expression=Интерпретировать поисковой запрос как регулярное выражение при поиске
+# LOCALIZATION NOTE (search.html.CSS_Selector, search.net.Headers, search.net.Parameters, search.net.Response_Bodies,
+# search.script.Multiple_Files):
+# Labels used within an options menu for the search box. This menu is displayed if the search box is focused.
+# These labels are specific to a certain panel.
 search.html.CSS_Selector=Селектор CSS
 search.net.Headers=Заголовки
 search.net.Parameters=Параметры
@@ -634,6 +1105,9 @@ firebug.console.Debug_Info=Отладочная информация
 firebug.console.Filter_by_Debug_Info=Фильтровать по отладочной информации
 firebug.Deactivate_Firebug=Отключить Firebug
 firebug.tip.Deactivate_Firebug=Отключить Firebug для данного сайта
+# LOCALIZATION NOTE (firebug.tip.Toggle_Side_Panels): A tooltip used for side panels visibility
+# toggle button. The button is available on the right side of panel's toolbar (only for panels
+# that have a side panel).
 firebug.tip.Toggle_Side_Panels=Переключить отображение боковых панелей
 firebug.ShowFirebug=Открыть Firebug
 firebug.menu.tip.Open_Firebug=Показать Firebug UI
@@ -653,7 +1127,7 @@ firebug.menu.Enable_Accessibility_Enhancements=Включить улучшени
 firebug.menu.tip.Enable_Accessibility_Enhancements=Включить полное управление с клавиатуры и другие специальные возможности
 firebug.menu.Activate_Same_Origin_URLs2=Активировать для всех подобных URL'ов
 firebug.menu.tip.Activate_Same_Origin_URLs=Активировать Firebug для всех URL'ов, совпадающих с политикой происхождения
-firebug.menu.Reset_All_Firebug_Options=Сбросить все настройки Firebug\'а
+firebug.menu.Reset_All_Firebug_Options=Сбросить все настройки Firebug'а
 firebug.menu.tip.Reset_All_Firebug_Options=Сбросить все настройки Firebug в значения по-умолчанию
 firebug.menu.Firebug_Online=Firebug Online
 firebug.menu.tip.Firebug_Online=Сайты, относящиеся к Firebug
@@ -693,6 +1167,7 @@ ProfileJavaScript=Профилировать JavaScript
 firebug.menu.tip.Profile_JavaScript=Профилировать время исполнения JavaScript
 firebug.Search=Искать
 firebug.menu.tip.Search=Установить фокус на поле поиска
+# Firebug shortcuts
 firebug.shortcut.reenterCommand.label=Ввести команду
 firebug.shortcut.tip.reenterCommand=Ввести ещё раз последнюю команду в командную строку
 firebug.shortcut.toggleInspecting.label=Переключить анализ
@@ -747,6 +1222,7 @@ firebug.shortcut.toggleBreakOn.label=Переключить остановку 
 firebug.shortcut.tip.toggleBreakOn=Включить/отключить остановку выполнения скрипта при возникновении специфичных событий внутри панели
 firebug.panel_selector=Выбор панели
 customizeShortcuts=Назначение горячих клавиш Firebug
+# A11y Chrome Labels (not visible, spoken by screen readers)
 a11y.labels.panel_tools=инструменты панели
 a11y.labels.firebug_panels=Панели Firebug
 a11y.labels.firebug_side_panels=Боковые панели Firebug
@@ -755,6 +1231,7 @@ a11y.labels.firebug_status=статус firebug
 a11y.labels.reset=сбросить
 a11y.labels.reset_shortcut=сбросить %S ярлык
 aria.labels.inactive_panel=неактивная панель
+# A11y panelNode labels (not visible, spoken by screen readers)
 a11y.labels.log_rows=строки лога
 a11y.labels.call_stack=стэк вызовов
 a11y.labels.document_structure=структура документа
@@ -762,6 +1239,7 @@ a11y.labels.title_panel=%S панель
 a11y.labels.title_side_panel=%S боковая панель
 a11y.labels.cached=кэш
 aria.labels.stack_trace=ошибки в стэке
+# A11y Domplate labels (not visible, spoken by screen readers)
 a11y.layout.padding=padding
 a11y.layout.border=border
 a11y.layout.margin=margin
@@ -797,62 +1275,175 @@ a11y.labels.style_rules=правила стиля
 aria.labels.inherited_style_rules=унаследованные правила стиля
 a11y.labels.computed_styles=скомпилированные стили
 a11y.labels.dom_properties=свойства DOM
+# LOCALIZATION NOTE:
+# Used by a11y. Not directly visible in the UI, intended for screen readers.
+# Describe contents of inline editor fields
 a11y.labels.inline_editor=встроенный редактор
 a11y.labels.value_for_attribute_in_element=значение атрибута %S элемента %S
 a11y.labels.attribute_for_element=атрибут для элемента %S
 a11y.labels.text_contents_for_element=текстовое содержимое элемента %S
 a11y.labels.defined_in_file=определёно в %S
-a11y.labels.declarations_for_selector=определения стиля для селектора \"%S\"
+a11y.labels.declarations_for_selector=определения стиля для селектора "%S"
 a11y.labels.property_for_selector=свойства CSS для селектора: %S
 a11y.labels.value_property_in_selector=%S значение свойства в селекторе %S
 a11y.labels.css_selector=селектор CSS
 a11y.labels.source_code_for_file=исходный код файла %S
 a11y.labels.press_enter_to_add_new_watch_expression=нажмите Enter для добавления нового слежения
+# LOCALIZATION NOTE (a11y.labels.overridden):
+# Used by a11y. Not directly visible in the UI, intended for screen readers.
+# Indicates, that a style property is overridden by selector with higher specificity
 a11y.labels.overridden=переопределённый
+# LOCALIZATION NOTE (a11y.hasConditionalBreakpoint, a11y.hasDisabledBreakpoint):
+# Used by a11y. Not directly visible in the UI, intended for screen readers.
+# Existence and state of a breakpoint
 a11y.updates.has_conditional_break_point=имеет условную точку останова
 a11y.updates.has_disabled_break_point=отменил точку останова
+# LOCALIZATION NOTE (a11y.updates.script_suspended_on_line_in_file): Used by a11y. Not directly
+# visible in the UI, intended for screen readers.
+# first %S = Line number, second %S = Function name, third %S = File name
 a11y.updates.script_suspended_on_line_in_file=Сценарий остановлен на линии %S в %S, файл %S
+# LOCALIZATION NOTE (a11y.updates.match_found_in_logrows): Used by a11y. Not directly
+# visible in the UI, intended for screen readers.
+# Describes the match found when performing a console panel search
+# first %S = String key the user is looking for, second %S = Number of rows that contain the matched text
+# examples: Match found for "test" in 17 log rows
 a11y.updates.match_found_in_logrows=соответствие для %S найдено в строках лога %S
+# LOCALIZATION NOTE (a11y.updates.match_found_for_on_line): Used by a11y. Not directly
+# visible in the UI, intended for screen readers.
+# Describes the match found when performing a script panel search
+# first %S = String key the user is looking for, second $S = Line number the match was found on, third %S = File name the match was found in
+# examples: Match found for "window.alert" on line 322 in utilities.js
 a11y.updates.match_found_for_on_line=соответствие для %S найдено на линии %S в %S
+# LOCALIZATION NOTE (a11y.updates.match_found_in_element): Used by a11y. Not directly
+# visible in the UI, intended for screen readers.
+# Describes the match found when performing an HTML panel search (if it is found in an element node)
+# first %S = Matched search string, second %S = HTML element name containing the matched string, third %S = XPATH string specifying the matched element
+# example: Match found for "obj" in object element at /html/body/object[2]
 a11y.updates.match_found_in_element=соответствие для %S найдено в элементе %S по пути %S
+# LOCALIZATION NOTE (a11y.updates.match_found_in_attribute): Used by a11y. Not directly
+# visible in the UI, intended for screen readers.
+# Describes the match found when performing an HTML  panel search (if it is found in an attribute node)
+# first %S = Search string that was matched, second %S = Attribute name, third %S = Attribute value,
+# fourth %S = HTML element name containing, fifth %S = XPATH string specifying  the matched element
+# example: Match found for "abindex" in tabindex="0" in span element at /html/body/span[2]
 a11y.updates.match_found_in_attribute=соответствие для %S найдено в атрибуте %S=%S элемента %S по пути %S
+# LOCALIZATION NOTE (a11y.updates.match_found_in_text_content): Used by a11y. Not directly
+# visible in the UI, intended for screen readers.
+# Describes the match found when performing an HTML panel search (if it is found in a text element's contents)
+# first %S = Matched search string, second %S = Element's text content,
+# third %S = HTML element name containing, fourth %S = XPATH string specifying  the matched element
+# example: Match found for "Firebug Rocks!" in h2 element at /html/body/h2[2]
 a11y.updates.match_found_in_text_content=соответствие для %S найдено в текстовом содержимом: %S элемента %S по пути %S
+# LOCALIZATION NOTE (a11y.updates.match_found_in_selector): Used by a11y. Not directly
+# visible in the UI, intended for screen readers.
+# Describes the match found when performing a CSS panel search (if it is found in a selector)
+# first %S = Matched search string, second %S = Selector, in which the match was found
+# example: Match found for "main" in #mainContent h2 {
 a11y.updates.match_found_in_selector=соответствие для %S найдено в селекторе %S
-a11y.updates.match_found_in_style_declaration=соответствие для \"%S\" найдено в определении стиля %S селектора %S
+# LOCALIZATION NOTE (a11y.updates.match_found_in_style_property): Used by a11y. Not directly
+# visible in the UI, intended for screen readers.
+# Describes the match found when performing a CSS panel search (if it is found in a style declaration)
+# first %S = Matched search string, second %S = Style property, in which the match was found
+# third %S = Selector the style declaration applies to
+# example: Match found for background in style declaration background-repeat: "repeat-x"; in selector #mainContent {
+a11y.updates.match_found_in_style_declaration=соответствие для "%S" найдено в определении стиля %S селектора %S
+# LOCALIZATION NOTE (a11y.updates.match_found_in_dom_property): Used by a11y. Not directly
+# visible in the UI, intended for screen readers.
+# Describes the match found when performing a DOM panel search
+# first %S = Matched search string, second %S = DOM property, in which the match was found
+# examples: Match found for "time" in DOM property _starttime
 a11y.updates.match_found_in_dom_property=соответствие для %S найдено в свойстве DOM %S
-a11y.updates.match_found_in_net_row=соответствие для \"%S\" найдено в %S, %S : %S;
+# LOCALIZATION NOTE (a11y.updates.match_found_in_net_row): Used by a11y. Not directly
+# visible in the UI, intended for screen readers.
+# Describes the match found when performing a Net panel search
+# first %S = Matched search string, second %S = File name associated to the row, in which the match was found,
+# third %S = Column, in which the match was found, fourth %S = Column value
+# examples: Match found for "792" in GET loading_animation.gif, timeline: 792 ms
+a11y.updates.match_found_in_net_row=соответствие для "%S" найдено в %S, %S : %S;
+# LOCALIZATION NOTE (a11y.updates.match_found_in_net_summary_row): Used by a11y. Not directly
+# visible in the UI, intended for screen readers.
+# Describes the match found when performing a Net panel search (if it is found in the Net summary row)
+# first %S = Matched search string, second %S = Column value, in which the match was found
+# examples: Match found for "05" in net summary row: 4.05s
 a11y.updates.match_found_in_net_summary_row=соответствие для %S найдено в суммарной строке сети: %S
-a11y.updates.no_matches_found=не найдено соответствий для \"%S\"
+# LOCALIZATION NOTE (a11y.updates.no_matches_found): Used by a11y. Not directly
+# visible in the UI, intended for screen readers.
+# Indicates that the searched string was not matched
+# %S = Search string
+# examples: No matched found for "wefkhwefkgwekhjgjh"
+a11y.updates.no_matches_found=не найдено соответствий для "%S"
+# LOCALIZATION NOTE (confirmation.Reset_All_Firebug_Options):
+# Text in the confirmation dialog shown when the options should be reset
 confirmation.Reset_All_Firebug_Options=Вы уверены, что хотите сбросить все настройки Firebug?
-confirmation.Edit_CSS_Source=Ваши текущие правки CSS будут утеряны.\\\\nВы уверены, что желаете отредактировать источник?
+# LOCALIZATION NOTE (confirmation.Edit_CSS_Source):
+# If the user has changed the CSS and clicks on the Source Edit button, a confirmation dialog is
+# displayed containing the following message
+confirmation.Edit_CSS_Source=Ваши текущие правки CSS будут утеряны.\nВы уверены, что желаете отредактировать источник?
+# Console messages
 warning.Console_must_be_enabled=Консоль должна быть активирована
 warning.Command_line_blocked?=Командная строка заблокирована?
 warning.dollar_change=Функция $() командной строки консоли изменилась с $=getElementById(id) на $=querySelector(selector). Вы можете попробовать писать так $("#%S")
 message.Reload_to_activate_window_console=Перезагрузите страницу для активации консоли
+# LOCALIZATION NOTE (message.sourceNotAvailableFor, message.The_resource_from_this_URL_is_not_text):
+# An error message displayed in the Script panel when a source can't be displayed
+# for specific URL.
+# examples: Reload the page to get source for: http://www.example.com/script.js
+# examples: The resource from this URL is not text: http://www.example.com/script.js
 message.sourceNotAvailableFor=Перезагрузите страницу, чтобы получить источник для
 message.The_resource_from_this_URL_is_not_text=Содержимое, находящееся по указанному URL не является текстом
+# LOCALIZATION NOTE (firebug.history.Go_back_to_this_script, firebug.history.Go_forward_to_this_script,
+# firebug.history.Stay_on_this_page): Tooltips for menu items in the history popup menu.
 firebug.history.Go_back_to_this_panel=Обратно на эту панель
 firebug.history.Stay_on_this_panel=Остаться на этой панели
 firebug.history.Go_forward_to_this_panel=Вперёд на эту панель
+# LOCALIZATION NOTE (firebug.history.Go_back_one_script, firebug.history.Go_forward_one_script):
+# Tooltips for back/forward buttons on the Script panel toolbar.
 firebug.history.Go_back=Назад
 firebug.history.Go_forward=Вперёд
+# LOCALIZATION NOTE (script.warning.inactive_during_page_load, script.suggestion.inactive_during_page_load):
+# Message displayed in the Script panel, if the debugger is inactive during page load.
+# The suggestion message represents an advice how to solve the problem. It contains a link enclosed in <a> and </a>
+# to reload the sources
 script.warning.inactive_during_page_load=Панель Сценарий была выключена во время загрузки страницы
 script.suggestion.inactive_during_page_load2=<a>Перезагрузите</a>, чтобы увидеть весь исходный код
+# LOCALIZATION NOTE (script.warning.javascript_not_enabled, script.suggestion.javascript_not_enabled):
+# This message is displayed within the Script panel if javascript is not enabled.
+# The suggestion message represents an advice how to solve the problem.
 script.warning.javascript_not_enabled=JavaScript отключен
 script.suggestion.javascript_not_enabled=Перейдите Firefox > Инструменты > Настройки > Содержимое > Использовать JavaScript
+# LOCALIZATION NOTE (script.button.enable_javascript): Title for a link, that is displayed on
+# the Script panel, if Javascript is disabled. This link allows to enable it.
 script.button.enable_javascript=Включите JavaScript и обновите страницу
+# LOCALIZATION NOTE (script.warning.all_scripts_filtered, script.suggestion.all_scripts_filtered):
+# Message displayed in the Script panel, if no JavaScripts are available for the current page.
+# The suggestion message represents an advice how to solve the problem.
 script.warning.all_scripts_filtered=Все скрипты были отфильтрованы
-script.suggestion.all_scripts_filtered=Обратитесь к настройкам фильтрации скриптов на панели инструментов или к опции \"Показывать исходные коды Chrome\"
+script.suggestion.all_scripts_filtered=Обратитесь к настройкам фильтрации скриптов на панели инструментов или к опции "Показывать исходные коды Chrome"
+# LOCALIZATION NOTE (script.warning.no_system_source_debugging, script.suggestion.no_system_source_debugging):
+# Message displayed in the Script panel, if the page opened is accessed via a chrome URL.
+# The suggestion message represents an advice how to solve the problem.
 script.warning.no_system_source_debugging=Невозможно отладить системные ресурсы
 script.suggestion.no_system_source_debugging=На данный момент невозможно использовать Firebug для отладки системных ресурсов. Обратитесь к <a>проблеме 5110</a> для объяснений.
+# LOCALIZATION NOTE (script.warning.debugger_active, script.suggestion.debugger_active):
+# Message displayed in the Script panel, if the page doesn't include any JavaScript.
+# The suggestion message represents an advice how to solve the problem.
 script.warning.no_javascript=На этой странице JavaScript отсутствует
 script.suggestion.no_javascript2=Если тэги <script> имеют аттрибут "type", он должен быть "text/javascript" или "application/javascript". Так же скрипты должны быть читаемы (с корректным синтаксисом).
+# LOCALIZATION NOTE (script.warning.debugger_active, script.suggestion.debugger_active):
+# Message displayed in the Script panel, if the page is opened in different tabs/windows and
+# the debugger is already halted at a breakpoint inside another tab/window.
+# The suggestion message represents an advice how to solve the problem.
 script.warning.debugger_active=Дебаггер уже активен
 script.suggestion.debugger_active=На данный момент дебаггер остановлен на точке останова на другой странице.
 script.button.Go_to_that_page=Перейти на страницу
 script.warning.debugger_not_activated=Дебаггер отключен
 script.suggestion.debugger_not_activated=Дебаггер отключен
+# LOCALIZATION NOTE (script.Script_panel_must_be_enabled): Adds a parenthetical note to a tooltip
+# about the Script panel having to be enabled.
+# %S = original message
+# example: "Profile JavaScript execution time (Script panel must be enabled)"
 script.Script_panel_must_be_enabled=%S (панель Сценарий должна быть включена)
+# firebug.dtd
 firebug.Firebug=Firebug
 firebug.Close=Закрыть
 firebug.View=Просмотреть
@@ -874,7 +1465,15 @@ script.tip.Script_Filter_Static=Показывать только те скри
 script.tip.Script_Filter_Evals=Показывать скрипты, которые загрузились со страницей и скрипты созданные через eval()
 script.tip.Script_Filter_Events=Показывать скрипты, которые загрузились со страницей, скрипты созданные через eval() и обработчики событий
 script.tip.Script_Filter_All=Показывать все скрипты
+# LOCALIZATION NOTE (firebug.labelWithShortcut):
+# Label for an item incl. assigned keyboard shortcut
+# example: Continue (F8)
+# example: Step Out (Shift+F11)
 firebug.labelWithShortcut=%S (%S)
+# LOCALIZATION NOTE (firebug.Rerun, script.tip.Rerun, firebug.Continue, script.tip.Continue,
+# firebug.StepOver, script.tip.Step_Over, firebug.StepInto, script.tip.Step_Into,
+# firebug.StepOut, script.tip.Step_Out, firebug.RunUntil, script.tip.Run_Until):
+# Labels used for debugger options available in the Script panel.
 script.Rerun=Перезапустить
 script.tip.Rerun=Перезапустить стек вызовов текущей функции
 script.Continue=Продолжить
@@ -887,6 +1486,10 @@ script.Step_Out=Шаг с выходом
 script.tip.Step_Out=Выполнить оставшуюся часть функции и вернуться к её вызову
 firebug.RunUntil=Выполнить до этой строки
 script.tip.Run_Until=Выполнять JavaScript до указанного времени
+# LOCALIZATION NOTE (firebug.Inspect, firebug.InspectElement, firebug.InspectElementWithFirebug)
+# Labels for Firebug Inspector. Used by a button (available in Firefox Customize Toolbar dialog)
+# and also page context menu. As soon as built-in inspector is having its own "Inspect Element"
+# Firebug should start using "Inspect Element with Firebug" to distinguish itself.
 firebug.Inspect=Анализировать
 firebug.InspectElement=Анализировать элемент
 firebug.InspectElementWithFirebug=Инспектировать элемент с помощью Firebug
@@ -897,6 +1500,7 @@ firebug.Profile=Профилировать
 firebug.Clear=Очистить
 firebug.ClearConsole=Очистить консоль
 firebug.ClearTooltip=Очистить консоль
+# editors.dtd
 editors.Configured_Firebug_Editors=Сконфигурированные редакторы Firebug
 editors.Editor=Редактор
 editors.Executable=Исполнимый файл
@@ -912,48 +1516,116 @@ changeEditor.Name=Имя
 changeEditor.Executable=Файл
 changeEditor.CmdLine=Аргументы
 changeEditor.Supplied_arguments=Аргументы предоставленные Firebug:
-changeEditor.URL_of_file=<label class=\'text-link\'>%url</label> URL файла (если %url отсутствует, %file будет добавлен по-умолчанию)
-changeEditor.Path_to_local_file=<label class=\'text-link\'>%file</label> Путь к локальному файлу (или временной копии)
-changeEditor.Line_number=<label class=\'text-link\'>%line</label> Номер строки (если доступно)
+changeEditor.URL_of_file=<label class='text-link'>%url</label> URL файла (если %url отсутствует, %file будет добавлен по-умолчанию)
+changeEditor.Path_to_local_file=<label class='text-link'>%file</label> Путь к локальному файлу (или временной копии)
+changeEditor.Line_number=<label class='text-link'>%line</label> Номер строки (если доступно)
 changeEditor.Invalid_Application_Path=Неправильный путь к приложению
 changeEditor.Application_does_not_exist=Указанное приложение не существует
+# LOCALIZATION NOTE (firebug.Edit, firebug.css.sourceEdit, firebug.css.liveEdit,
+# firebug.EditCSSTooltip, firebug.css.sourceEdit.tooltip, firebug.css.liveEdit.tooltip)
+# Used in the CSS panel for the Edit button.
 firebug.Edit=Редактировать
 firebug.css.sourceEdit=Правка кода
 firebug.css.sourceEdit.tooltip=Правка исходного кода CSS в том виде, в котором он загружен браузером
 firebug.css.liveEdit=Живая правка
 firebug.css.liveEdit.tooltip=Правка исходного кода CSS в том виде, в котором он извлечён из браузера
 firebug.EditCSSTooltip=Редактировать таблицу стилей
+# LOCALIZATION NOTE (firebug.activation.privateBrowsingMode):
+# Message displayed in the Console panel when the private browsing mode is on.
+# (in Firefox 4+ it's 'Start Private Browsing')
 firebug.activation.privateBrowsingMode=Сайты не запоминаются в режиме Приватного просмотра
+# LOCALIZATION NOTE (firebug.breakpoint.showBreakNotifications):
+# Label used within Script panel's options menu. Represents an option, that can be used
+# to switch of the break notifications.
 firebug.breakpoint.showBreakNotifications=Показывать уведомления об остановках
 firebug.breakpoint.tip.Show_Break_Notifications=Показать окно уведомления, когда Прерывать на ... или дебагер; ключевое слово, остановившее выполнение JavaScript
+# LOCALIZATION NOTE (firebug.activation.privateBrowsingMode):
+# Message displayed in a break notification popup next to a checkbox.
+# Includes a link enclosed in <a> and </a> to open the panel's options menu.
 firebug.breakpoint.doNotShowBreakNotification2=Вы можете включить/отключить уведомления об остановах в <a>меню панели вкладки</a>.
-firebug.bon.cause.disableDebuggerKeyword2=Нажатие на кнопку \'Отключить\' переопределяет дебаггер с неактивной точкой останова.
+# LOCALIZATION NOTE (firebug.bon.cause.disableDebuggerKeyword2, firebug.bon.tooltip.disableDebuggerKeyword2):
+# Message displayed in a break notification popup when break on debugger; keyword happens.
+# The keyword can be disabled by creating a disabled breakpoint on the same line.
+# The other label is used for a tooltip on the action button.
+firebug.bon.cause.disableDebuggerKeyword2=Нажатие на кнопку 'Отключить' переопределяет дебаггер с неактивной точкой останова.
 firebug.bon.tooltip.disableDebuggerKeyword2=Создаёт неактивную точку останова
+# LOCALIZATION NOTE (firebug.bon.scriptPanelNeeded): A label used by 'Break On Next' button
+# This feature needs the Script panel enabled in order to work.
 firebug.bon.scriptPanelNeeded=(панель Сценарий должна быть активирована для использования данной возможности)
+# LOCALIZATION NOTE (firebug.dom.noChildren):
+# Message displayed in the DOM panel in cases, in which there are no children objects
+# and so nothing to display.
 firebug.dom.noChildren2=Дочерние объекты отсутствуют
+# LOCALIZATION NOTE (firebug.reps.more): Label shown when the displayed array/list has
+# more elements then displayed on the screen. "..." is automatically appended.
 firebug.reps.more=ещё
+# LOCALIZATION NOTE (firebug.reps.reference): Label shown when the displayed array/list has
+# a reference to itself (a cycle).
 firebug.reps.reference=Обнаружено цикличное указание
+# LOCALIZATION NOTE (firebug.storage.totalItems): Semicolon list of plural forms.
+# Label used in the DOM panel for local/session/global storage.
+# It's informing the user about the number of items in the storage.
+# %1 = Number of storage items
+# example: 1 item in Storage
+# example: 2 items in Storage
 firebug.storage.totalItems=%1$S элемент в Хранилище;%1$S элементов в Хранилище
+# LOCALIZATION NOTE (firebug.reps.historyEntries): Semicolon list of plural forms.
+# Displayed when evaluating "history" - informs the user about the number of entries in history.
+# %1 = Number of history entries
 firebug.reps.historyEntries=%1$S запись в истории;%1$S записей в истории
+# LOCALIZATION NOTE (firebug.reps.table.ObjectProperties):
+# Label used in the header of the output of the console.table() method inside the Console panel,
+# if an object is passed into it.
 firebug.reps.table.ObjectProperties=Свойста объекта
+# LOCALIZATION NOTE (firebug.completion.empty):
+# Label used in the command line by the auto-complete function.
+# Displayed, if there are no possible completions.
 firebug.completion.empty=(завершения отсутствуют)
+# LOCALIZATION NOTE (firebug.failedToPreviewObjectURL, firebug.failedToPreviewImageURL):
+# Label used in an image preview infotip in the HTML panel when hovering over an <img> element
+# when loading of the given URL fails. The firebug.failedToPreviewObjectURL is specifically used
+# for moz-filedata (HTML5),
+# see: https://developer.mozilla.org/en/Using_files_from_web_applications#Example.3a_Using_object_URLs_to_display_images
 firebug.failedToPreviewObjectURL=Вероятно объект URL был отменён используя метод revokeObjectURL.
 firebug.failedToPreviewImageURL=Невозможно загрузить указанный URL.
+# LOCALIZATION NOTE (firebug.Memory_Profiler_Started):
+# Message logged into the Console panel when memory profiler session starts.
 firebug.Memory_Profiler_Started=Профайлер памяти запущен
+# LOCALIZATION NOTE (firebug.Objects_Added_While_Profiling):
+# Title for a group (logged into the Console panel), that contains a list of new objects
+# allocated within memory profiler session.
 firebug.Objects_Added_While_Profiling=Во время профилирования были добавлены объекты
+# LOCALIZATION NOTE (firebug.Memory_Profiler_Results):
+# Message used within the Console panel when the memory profiler session is finished.
 firebug.Memory_Profiler_Results=Результаты работы профайлера памяти
+# LOCALIZATION NOTE (firebug.Entire_Session):
+# Label used within memory profiler results to mark summary information for entire session.
 firebug.Entire_Session=Вся сессия
+# LOCALIZATION NOTE (console.msg.nothing_to_output):
+# Used by the console panel if a Console API is used without any argument.
 console.msg.nothing_to_output=(выводить нечего)
+# LOCALIZATION NOTE (console.msg.nothing_to_output):
+# Used by the console panel if an empty string is passed into a Console API.
 console.msg.an_empty_string=(пустая строка)
+# LOCALIZATION NOTE (cookies.legacy.firecookie_detected, cookies.legacy.uninstall, cookies.legacy.uninstall_and_restart):
+# A message and labels used when Firecookie is detected. This extension has been integrated with
+# Firebu and should not be installed together with Firebug 1.10+
 cookies.legacy.firecookie_detected=Обнаружен аддон Firecookie. Данный аддон был интегрирован в Firebug 1.10 по-умолчанию. Для того, чтобы избежать возможных осложнений - вам надо удалить Firecookie. \n\nДля завершения удаления - необходимо перезапустить браузер.
 cookies.legacy.uninstall=Удалить
 cookies.legacy.uninstall_and_restart=Удалить и перезапустить
+# LOCALIZATION NOTE (console.cmd.help_title, console.cmd.help_title_desc):
 console.cmd.help_title=API коммандной строки
 console.cmd.help_title_desc=Нажмите F!, чтобы открыть онлайн справку Firebug
+# LOCALIZATION NOTE (console.cmd.tip_title, console.cmd.tip_title_desc):
 console.cmd.tip_title=Подсказки командной строки
 console.cmd.tip_title_desc=Изучить подсказки командной строки
+# LOCALIZATION NOTE (console.cmd.tip.javascript, console.cmd.tip.closures):
+# Description for Command Line tips that is logged
+# in the the Console panel if the user types "help" into the command line.
 console.cmd.tip.javascript=Любое допустимое выражение JavaScript может быть выполнено в командной строке. Пример:
 console.cmd.tip.closures=Для доступа к переменным в замыканиях используйте синтакс '.%' (<a>подробнее</a>). Пример:
+# LOCALIZATION NOTE (console.cmd.help.$): Description for Command Line API that is logged
+# in the the Console panel if the user types "help" into the command line.
 console.cmd.help.$=Возвращает одиночный элемент с указанным id.
 console.cmd.help.$$=Возвращает массив элементов, которые совпадают с указанным селектором CSS.
 console.cmd.help.$x=Возвращает массив элементов, которые совпадают с указанным выражением XPath.
@@ -985,11 +1657,28 @@ console.cmd.help.help=Выводит справку для всех доступ
 console.cmd.help.include=Включает удалённый скрипт.
 console.cmd.help.$p=После ПКМ на объекте/значении JavaScript, и нажатии "Использовать в командной строке", переменная в командной строке будет установлена в это значение.
 console.cmd.help.getEventListeners=Возвращает объект со всеми наблюдателями события, зарегистрированными на элементе (или иной цели события).
+# LOCALIZATION NOTE (console.cmd.helpUrlNotAvailable): A message used displayed to the user
+# if registered command doesn't have help URL associated and the user clicks on the command name.
+# List of command names is displayed if you type "help" (without quotes) into the command line.
 console.cmd.helpUrlNotAvailable=Страница справки для этой команды недоступна.
+# LOCALIZATION NOTE (perftiming.bars.label, perftiming.events.label): A label used in a tooltip
+# for performance.timing graph.
+# The graph is displayed in the Console when the user executes "performance.timing" expression.
 perftiming.bars.label=Фазы документа - начало и затраченное время, по отношению к загрузке документа:
 perftiming.events.label=Тайминг событий по отношению к загрузке документа:
+# LOCALIZATION NOTE (perftiming.details_title, perftiming.details_title_desc): A label used
+# for detailed performance timing info table.
 perftiming.details_title=Тайминг производительности
 perftiming.details_title_desc=Детализированный тайминг
+# LOCALIZATION NOTE (perftiming.connectEnd, perftiming.connectStart,
+# perftiming.domContentLoadedEventEnd, perftiming.domContentLoadedEventStart,
+# perftiming.domInteractive, perftiming.domLoading, perftiming.domainLookupEnd,
+# perftiming.domainLookupStart, perftiming.fetchStart, perftiming.loadEventEnd,
+# perftiming.loadEventStart, perftiming.avigationStart, perftiming.redirectCount,
+# perftiming.redirectEnd, perftiming.redirectStart, perftiming.requestStart,
+# perftiming.responseEnd, perftiming.responseStart, perftiming.timing, perftiming.unloadEventEnd,
+# perftiming.unloadEventStart): Description for performance timing field. Displayed when
+# the user executes 'performance.timing' in the command line.
 perftiming.connectEnd=Момент окончания соединения с сервером.
 perftiming.connectStart=Момент перед началом соединения с сервером.
 perftiming.domComplete=Момент перед окончанием чтения документа.
diff --git a/modules/firebug-service.js b/modules/firebug-service.js
index 8ec3ca8..e55ce6d 100644
--- a/modules/firebug-service.js
+++ b/modules/firebug-service.js
@@ -97,7 +97,6 @@ const reDBG = /DBG_(.*)/;
 const reXUL = /\.xul$|\.xml$/;
 
 Cu.import("resource://firebug/prefLoader.js");
-Cu.import("resource://gre/modules/Timer.jsm");
 
 var getPref = PrefLoader.getPref;
 
@@ -123,10 +122,6 @@ var debuggers = [];
 var netDebuggers = [];
 var scriptListeners = [];
 
-// Issue 6942
-var panels = [];
-var disableJSDTimeout;
-
 var hookFrameCount = 0;
 
 var haltObject = null;  // For reason unknown, fbs.haltDebugger will not work.
@@ -912,75 +907,6 @@ var fbs =
         }
     },
 
-    registerPanel: function(panel)
-    {
-        if (disableJSDTimeout)
-        {
-            clearTimeout(disableJSDTimeout);
-            disableJSDTimeout = null;
-        }
-
-        panels.push(panel);
-
-        if (FBTrace.DBG_ACTIVATION)
-        {
-            FBTrace.sysout("-- registerPanel; JSD enabled: " + enabledDebugger +
-                ", panels: " + panels.length);
-        }
-
-        if (!enabledDebugger)
-            this.enableDebugger();
-    },
-
-    unregisterPanel: function(panel)
-    {
-        for (var i = 0; i < panels.length; i++)
-        {
-            if (panels[i] == panel)
-            {
-                panels.splice(i, 1);
-                break;
-            }
-        }
-
-        if (FBTrace.DBG_ACTIVATION)
-        {
-            FBTrace.sysout("-- unregisterPanel; panels: " + panels.length +
-                ", enabledDebugger: " + enabledDebugger);
-        }
-
-        if (panels.length > 0)
-            return;
-
-        if (!enabledDebugger)
-            return;
-
-        if (disableJSDTimeout)
-            clearTimeout(disableJSDTimeout);
-
-        // Try to disable JSD after a timeout. If there is just one context
-        // active and the associated page is refreshed the context is
-        // destroyed and immediately created. We don't want to disable and
-        // enable in such case.
-        disableJSDTimeout = setTimeout(this.onDisableJSD.bind(this), 1000);
-    },
-
-    onDisableJSD: function()
-    {
-        disableJSDTimeout = null;
-
-        var rejections = [];
-        dispatch(clients, "onDisableJSDRequested", [rejections]);
-
-        if (FBTrace.DBG_ACTIVATION)
-            FBTrace.sysout("-- onDisableJSD; rejections: " + rejections.length);
-
-        // If the last panel has been destroyed and there is no other active debugger
-        // in all existing browser windows let's disabled JSD.
-        if (rejections.length == 0)
-            this.disableDebugger();
-    },
-
     // first one in will be last one called. Returns state enabledDebugger
     registerDebugger: function(debuggrWrapper)
     {
@@ -1659,9 +1585,6 @@ var fbs =
 
     enableDebugger: function()
     {
-        if (FBTrace.DBG_ACTIVATION)
-            FBTrace.sysout("FBS.enableDebugger()");
-
         if (waitingForTimer)
         {
             timer.cancel();
@@ -1738,9 +1661,6 @@ var fbs =
 
     onDebuggerActivated: function()
     {
-        if (FBTrace.DBG_ACTIVATION)
-            FBTrace.sysout("FBS.onDebuggerActivated()");
-
         jsd.flags |= DISABLE_OBJECT_TRACE;
 
         if (FBTrace.DBG_ACTIVATION)
@@ -1825,9 +1745,6 @@ var fbs =
 
     disableDebugger: function()
     {
-        if (FBTrace.DBG_ACTIVATION)
-            FBTrace.sysout("FBS.disableDebugger()");
-
         if (!enabledDebugger)
             return;
 
@@ -1860,9 +1777,6 @@ var fbs =
     // must support multiple calls
     pause: function(debuggerName)
     {
-        if (FBTrace.DBG_ACTIVATION)
-            FBTrace.sysout("FBS.pause()");
-
         if (!enabledDebugger || !jsd || !jsd.isOn)
             return "not enabled";
 
@@ -1902,9 +1816,6 @@ var fbs =
 
     unPause: function(force)
     {
-        if (FBTrace.DBG_ACTIVATION)
-            FBTrace.sysout("FBS.unPause()");
-
         if (!jsd)
             return;
 
diff --git a/modules/loader.js b/modules/loader.js
index b4aa3d4..e5b37b3 100644
--- a/modules/loader.js
+++ b/modules/loader.js
@@ -126,7 +126,7 @@ var FirebugLoader =
             }
         });
 
-        win.Firebug.browserOverlay.shutdown();
+        win.Firebug.browserOverlay.unloadContextMenuOverlay(win);
 
         delete win.Firebug;
         delete win.FBTrace;
diff --git a/modules/locale.js b/modules/locale.js
index ac345ff..0c2f7fa 100644
--- a/modules/locale.js
+++ b/modules/locale.js
@@ -61,6 +61,10 @@ var Locale = {};
  */
 Locale.$STR = function(name, bundle)
 {
+    // The empty string localizes to the empty string.
+    if (!name)
+        return "";
+
     var strKey = name.replace(" ", "_", "g");
 
     if (!PrefLoader.getPref("useDefaultLocale"))
@@ -252,6 +256,65 @@ Locale.getPluralRule = function()
     }
 };
 
+Locale.getFormattedKey = function(win, modifiers, key, keyConstant)
+{
+    platformKeys = {};
+    platformKeys.shift = Locale.$STR("VK_SHIFT");
+    platformKeys.meta = Locale.$STR("VK_META");
+    platformKeys.alt = Locale.$STR("VK_ALT");
+    platformKeys.ctrl = Locale.$STR("VK_CONTROL");
+    platformKeys.sep = Locale.$STR("MODIFIER_SEPARATOR");
+
+    switch (Services.prefs.getIntPref("ui.key.accelKey"))
+    {
+        case win.KeyEvent.DOM_VK_CONTROL:
+            platformKeys.accel = platformKeys.ctrl;
+            break;
+        case win.KeyEvent.DOM_VK_ALT:
+            platformKeys.accel = platformKeys.alt;
+            break;
+        case win.KeyEvent.DOM_VK_META:
+            platformKeys.accel = platformKeys.meta;
+            break;
+
+        default:
+            platformKeys.accel = (win.navigator.platform.search("Mac") != -1 ? platformKeys.meta :
+                platformKeys.ctrl);
+    }
+
+    if ((modifiers == "shift,alt,control,accel" && keyConstant == "VK_SCROLL_LOCK") ||
+        (key == "" || (!key && keyConstant == "")))
+    {
+        return "";
+    }
+
+    var val = "";
+    if (modifiers)
+    {
+        val = modifiers.replace(/^[\s,]+|[\s,]+$/g, "").split(/[\s,]+/g).join(platformKeys.sep).
+            replace("alt", platformKeys.alt).replace("shift", platformKeys.shift).
+            replace("control", platformKeys.ctrl).replace("meta", platformKeys.meta).
+            replace("accel", platformKeys.accel) +
+            platformKeys.sep;
+    }
+
+    if (key)
+        return val += key;
+
+    if (keyConstant)
+    {
+        var localizedKey = Locale.$STR(keyConstant);
+
+        // Create human friendly alternative ourself, if there is no translation
+        // for the key constant
+        if (localizedKey.lastIndexOf("VK ", 0) === 0)
+            localizedKey = capitalize(localizedKey.replace("VK ", ""), true);
+
+        val += localizedKey;
+    }
+    return val;
+}
+
 // ********************************************************************************************* //
 // Helpers
 
@@ -261,6 +324,19 @@ function validate(str)
     return String(str).replace(/"/g, '\'');
 }
 
+// This module needs to be independent of any other modules, so this is mainly a copy of
+// Str.capitalize().
+function capitalize(string)
+{
+    function capitalizeFirstLetter(string)
+    {
+        var rest = string.slice(1).toLowerCase();
+        return string.charAt(0).toUpperCase() + rest;
+    }
+
+    return string.split(" ").map(capitalizeFirstLetter).join(" ");
+}
+
 function getDefaultStringBundleURI(bundleURI)
 {
     var chromeRegistry = Cc["@mozilla.org/chrome/chrome-registry;1"].
diff --git a/skin/classic/console.css b/skin/classic/console.css
index 1609ec9..0ef0e12 100644
--- a/skin/classic/console.css
+++ b/skin/classic/console.css
@@ -30,6 +30,8 @@
 .logGroupBody {
     display: none;
     margin-left: 16px;
+    margin-top: 2px;
+    margin-bottom: 2px;
     border-left: 1px solid #D7D7D7;
     border-top: 1px solid #D7D7D7;
     background: #FFFFFF;
@@ -392,6 +394,11 @@
     padding: 0;
 }
 
+/* Tables should get the entire space of log content area */
+.logRow-table .logContent {
+    padding: 0;
+}
+
 .profileSizer {
     width: 100%;
     padding-bottom: 5px;
@@ -577,7 +584,7 @@
 .objectLink-regexp > .regexpSource {
     padding-right: 4px;
     font-weight: normal;
-    font-family: Monaco, monospace;
+    font-family: monospace;
 }
 
 
@@ -685,6 +692,7 @@
 .objectRightBrace,
 .arrayLeftBracket,
 .arrayRightBracket {
+    cursor: pointer;
     font-weight: bold;
 }
 
@@ -738,7 +746,7 @@
     white-space: pre-wrap;
 }
 
-/*****************************************************************************************/
+/*************************************************************************************************/
 
 .logRow-log .objectBox-array.hasTwisty {
     padding-left: 18px;
@@ -753,7 +761,7 @@
     color: DarkGreen;
 }
 
-/*****************************************************************************************/
+/*************************************************************************************************/
 
 .logRow-spy,
 .logRow-spy .objectLink-sourceLink {
@@ -923,11 +931,35 @@
     height: 100%;
 }
 
+.tableCommandLineInclude .aliasName {
+    font-family: monospace;
+}
+
 .tableCommandLineInclude td:last-child {
     width: 75%;
     padding-right: 0 !important; 
 }
 
+/************************************************************************************************/
+/* getEventListeners() command */
+
+.logRow-eventListenersDetails .logGroup {
+    background: none;
+    background-color: rgb(244, 244, 244) !important;
+}
+
+.logRow-eventListenersDetails .logRow-table .logContent {
+    padding: 0;
+}
+
+.logRow-eventListenersDetails .logRow {
+    text-decoration: none !important;
+}
+
+.logRow-eventListenersDetails .eventListenersCaption:hover {
+    text-decoration: underline;
+}
+
 /*************************************************************************************************/
 /* Description Box */
 
diff --git a/skin/classic/debugger.css b/skin/classic/debugger.css
index e181eeb..fcf0af5 100644
--- a/skin/classic/debugger.css
+++ b/skin/classic/debugger.css
@@ -1,7 +1,5 @@
 /* See license.txt for terms of usage */
 
- at import "chrome://firebug-os/skin/debugger.css";
-
 .panelNode-script {
     overflow: hidden;
     font-family: monospace;
@@ -26,8 +24,8 @@
     position: absolute;
     left: 0;
     top: 0;
-    width: 100%;
-    height: 100%;
+    right: 0;
+    bottom: 0;
 }
 
 .sourceRow {
@@ -179,23 +177,46 @@
 /************************************************************************************************/
 /* Breakpoint condition */
 
+/* xxxsz: Use PNG images for condition editor, because using SVGs as border images is broken
+   up to Firefox 22.0. Use SVGs as soon as Firefox 23.0 is the min. supported version.
+   (see issue 6607) */
 .conditionEditor {
     z-index: 2147483647;
     position: absolute;
     margin-top: 0;
     left: 5px;
     width: 90%;
+    border-style: solid;
+    border-width: 19px 25px 33px 33px;
+    border-image: url(chrome://firebug/skin/win/breakpointConditionEditor.png) 19 25 33 33 fill stretch;
+}
+
+.conditionCaption {
+    margin-bottom: 2px;
+    font-family: Lucida Grande, sans-serif;
+    font-weight: bold;
+    font-size: 11px;
+    color: #226679;
 }
 
 .conditionInput {
     width: 100%;
     font-size: inherit;
+    border: 1px solid #0096C0;
+    font-family: monospace;
 }
 
 .conditionInput.completionInput {
     position: relative;
 }
 
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+.upsideDown {
+    border-width: 28px 25px 19px 33px;
+    border-image: url(chrome://firebug/skin/win/breakpointConditionEditorDown.png) 28 25 19 33 fill stretch;
+}
+
 /*************************************************************************************************/
 /* Notification */
 
@@ -213,7 +234,7 @@
     border: 1px solid lightgray;
     border-top: none;
     background: rgb(255, 255, 225);
-    font-family: Segoe UI;
+    font-family: Lucida Grande,Tahoma,sans-serif;
     font-size: 12px;
     color: #000000;
     width: 100%;
diff --git a/skin/classic/dom.css b/skin/classic/dom.css
index 984cef1..da14ae4 100644
--- a/skin/classic/dom.css
+++ b/skin/classic/dom.css
@@ -60,7 +60,7 @@
     display: block;
 }
 
-/* Display brekpoint disc */
+/* Display breakpoint disc */
 .memberRow .memberRowHeader {
     background-position: 5px 4px;
 }
diff --git a/skin/classic/find-arrows.png b/skin/classic/find-arrows.png
new file mode 100644
index 0000000..1a3a9da
Binary files /dev/null and b/skin/classic/find-arrows.png differ
diff --git a/skin/classic/firebug.css b/skin/classic/firebug.css
index 62284d6..15c057a 100644
--- a/skin/classic/firebug.css
+++ b/skin/classic/firebug.css
@@ -19,6 +19,7 @@
 /* end overrides */
 
 /*************************************************************************************************/
+/* Toolbar buttons */
 
 #fbInspectButton {
     margin-bottom: 1px;
@@ -101,11 +102,14 @@
     background: none repeat scroll 0% 0% transparent;
 }
 
-#fbCommandLineCompletion {
+#fbCommandLineCompletionHolder {
     position: absolute;
+    width: 100%;
     z-index: 1;
+}
+
+#fbCommandLineCompletion {
     color: #A0A0A0;
-    bottom: 0;
     pointer-events: none;
 }
 
@@ -151,21 +155,20 @@
 
 .fbsearch-textbox {
     -moz-appearance: none;
-    margin: 0 0px 1px 2px;
-    border: 1px solid;
-    border-radius: 5px;  /* Matched to the a11y outline impl */
-    -moz-border-top-colors: #96969D;
-    -moz-border-right-colors: #96969D;
-    -moz-border-bottom-colors: #96969D;
-    -moz-border-left-colors: #96969D;
+    -moz-box-align: center;
+    margin: 0;
+    border: 1px solid #96969D;
+    border-radius: 3px 0 0 3px;
     font: message-box;
     font-size: 11px;
     font-size-adjust: inherit;
     direction: ltr;
+    height: 21px;
+    padding: 0 2px 0 4px;
 }
 
 .fbsearch-icon {
-    cursor: default!important;
+    cursor: default !important;
     background: url(chrome://firebug/skin/search.png) no-repeat 0 0;
     width: 16px;
     height: 16px;
@@ -173,23 +176,19 @@
 
 /* Need to use images instead of filters due to https://bugzil.la/891777 */ 
 .fbsearch-icon:hover {
-    background-image: url(chrome://firebug/skin/searchHovered.png);
-}
-
-.fbsearch-textbox[active-search="true"] > .fbsearch-icon {
-    background-image: url(chrome://firebug/skin/searchClose.png);
-}
-
-.fbsearch-textbox[active-search="true"] > .fbsearch-icon:hover {
     background-position: 0 -16px;
 }
 
-.fbsearch-textbox[active-search="true"] > .fbsearch-icon:active {
+.fbsearch-icon:active {
     background-position: 0 -32px;
 }
 
-#fbSearchOptionsPanel {
+.fbsearch-textbox[active-search="true"] > .fbsearch-icon {
+    background-image: url(chrome://firebug/skin/searchClose.png);
+}
 
+#fbSearchOptionsPanel {
+    font-size: 11px;
 }
 
 .fbsearch-options-label {
@@ -197,7 +196,32 @@
 }
 
 .fbsearch-options-buttons {
+    -moz-margin-start: 0;
+    -moz-appearance: none;
+    background: -moz-linear-gradient(rgba(255,255,255,.9), rgba(255,255,255,.2));
+    border: 1px solid ThreeDShadow;
+    box-shadow: 0 1px #fff inset;
+    list-style-image: url("chrome://firebug/skin/find-arrows.png");
+    padding: 1px 5px;
+    line-height: 1em;
+    width: 22px;
+    height: 21px;
+    border-left: none;
+}
+
+.fbsearch-options-buttons.prev {
+    -moz-image-region: rect(0, 12px, 9px, 0);
+}
+
+.fbsearch-options-buttons.next {
+    -moz-image-region: rect(0, 24px, 9px, 12px);
+    border-radius: 0 3px 3px 0;
+}
 
+.fbsearch-options-buttons:not([disabled]):active,
+.fbsearch-options-buttons:not([disabled]):active {
+  background: rgba(23,50,76,.2);
+  box-shadow: 0 1px 2px rgba(10,31,51,.2) inset;
 }
 
 textbox[type="fbSearchBox"] > panel {
@@ -220,6 +244,11 @@ textbox[type="fbSearchBox"] > panel {
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 /* Case sensitive/insensitive search */
 
+#fbSearchBoxIsSensitive,
+#fbSearchBoxIsNotSensitive {
+    padding-bottom: 8px;
+}
+
 #fbSearchBoxIsSensitive {
     display: none;
 }
@@ -518,6 +547,22 @@ textbox[type="fbSearchBox"] > panel {
 }
 
 /*************************************************************************************************/
+/* Panel Tabs */
+
+panelTab[selected="true"] > panelTabMenu .menuTarget,
+panelTab:focus > panelTabMenu .menuTarget {
+    background: url(chrome://firebug/skin/win/optionsMenuTarget.png) no-repeat center;
+    width: 11px;
+    height: 10px;
+    vertical-align: middle;
+    visibility: visible;
+}
+
+panelTab[selected="true"]:hover > panelTabMenu .menuTarget {
+    background-image: url(chrome://firebug/skin/win/optionsMenuTargetHover.png);
+}
+
+/*************************************************************************************************/
 /* Toggle Side Panels */
 
 #fbToggleSidePanels {
diff --git a/skin/classic/firebug16EnabledInBackground.png b/skin/classic/firebug16EnabledInBackground.png
deleted file mode 100644
index 896a94b..0000000
Binary files a/skin/classic/firebug16EnabledInBackground.png and /dev/null differ
diff --git a/skin/classic/html.css b/skin/classic/html.css
index 003d2e7..42e1978 100644
--- a/skin/classic/html.css
+++ b/skin/classic/html.css
@@ -66,6 +66,10 @@
     color: #333333;
 }
 
+.panelNode-html .nodeBracket {
+    cursor: pointer;
+}
+
 .documentNodeBox {
     padding-left: 0;
 }
diff --git a/skin/classic/mac/debugger.css b/skin/classic/mac/debugger.css
index 283a826..53dab8e 100644
--- a/skin/classic/mac/debugger.css
+++ b/skin/classic/mac/debugger.css
@@ -2,8 +2,6 @@
 
 .panelNode-script {
     overflow: hidden;
-
-    /* Do not use Monaco, otherwise the Script panel's viewport doesn't work*/
     font-family: monospace;
     font-size: 12px;  /* Issue 5060 */
 }
@@ -16,7 +14,7 @@
     padding: 2px 3px;
     border: 1px solid #CBE087;
     background: LightYellow;
-    font-family: Monaco, monospace;
+    font-family: monospace;
     color: #000000;
 }
 
@@ -27,8 +25,8 @@
     position: absolute;
     left: 0;
     top: 0;
-    width: 100%;
-    height: 100%;
+    right: 0;
+    bottom: 0;
 }
 
 .sourceRow {
@@ -104,15 +102,6 @@
     color: #000000;
 }
 
-.sourceRow[breakpoint="true"] > .sourceLine {
-    background-image: url(chrome://firebug/skin/breakpoint.png);
-}
-
-.sourceRow[breakpoint="true"][condition="true"] > .sourceLine {
-    background-image: url(chrome://firebug/skin/breakpointCondition.png);
-    background-position: 9px 3px, 5px 1px;
-}
-
 .sourceRow[breakpoint="true"][disabledbreakpoint="true"] > .sourceLine {
     background-image: none;
 }
@@ -198,7 +187,7 @@
     border-radius: 10px !important;
     box-shadow: 0 2px 2px -2px #000000 inset;
     padding: 2px 12px;
-    font-family: Monaco, monospace;
+    font-family: monospace;
     -moz-box-sizing: border-box;
 }
 
@@ -249,7 +238,7 @@
     padding-left: 24px;
     padding-bottom: 2px;
     border-bottom: 1px solid #D7D7D7;
-    font-family: Monaco, monospace;
+    font-family: monospace;
     color: DarkGreen;
 }
 
@@ -295,95 +284,3 @@
 .objectLink-stackFrame[selected="true"] {
     font-weight: bold;
 }
-
-/*************************************************************************************************/
-/* Notification */
-
-.notificationBox {
-    position: fixed;
-    z-index: 2147483647;
-    padding: 0 50px;
-    left: 0;
-    right: 0;
-    top: 0;
-    pointer-events: none;
-}
-
-.notificationTable {
-    border: 1px solid lightgray;
-    border-top: none;
-    background: rgb(255, 255, 225);
-    font-family: Segoe UI;
-    font-size: 12px;
-    color: #000000;
-    width: 100%;
-    box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.4);
-    border-radius: 0 0 3px 3px;
-    padding: 2px 0;
-    pointer-events: auto;
-}
-
-.notificationBox TD {
-    vertical-align: middle;
-}
-
-.notificationImage {
-    vertical-align: middle;
-    margin: 0 5px;
-}
-
-.notificationDesc {
-    padding-left: 1px;
-}
-
-.noNotificationDesc {
-    color: gray;
-}
-
-.noNotificationDesc a {
-    font-weight: bold;
-    color: gray;
-}
-
-.noNotificationDesc a:hover {
-    text-decoration: underline;
-}
-
-.notificationBox .descCol {
-    width: 100%;
-    line-height: 17px;
-}
-
-.notificationBox .buttonsCol {
-    white-space: nowrap;
-}
-
-.notificationBox .hideCol {
-    color: gray;
-    padding-top: 7px;
-}
-
-.notificationBox .hideNotification {
-    vertical-align: middle;
-}
-
-.notificationButton {
-    margin-right: 4px;
-}
-
-.notificationClose {
-    background: url(chrome://firebug/skin/notificationClose.png) no-repeat scroll 0 0 transparent;
-    width: 16px;
-    height: 16px;
-    border: none;
-    margin-right: 6px;
-    cursor: pointer;
-}
-
-.notificationClose:hover {
-    background: url(chrome://firebug/skin/notificationClose.png) no-repeat scroll -32px 0 transparent;
-}
-
-.notificationClose:hover:active {
-    background: url(chrome://firebug/skin/notificationClose.png) no-repeat scroll -16px 0 transparent;
-}
diff --git a/skin/classic/mac/find-arrows.png b/skin/classic/mac/find-arrows.png
new file mode 100644
index 0000000..c399ed4
Binary files /dev/null and b/skin/classic/mac/find-arrows.png differ
diff --git a/skin/classic/mac/firebug.css b/skin/classic/mac/firebug.css
index be3a9f0..2adadd7 100644
--- a/skin/classic/mac/firebug.css
+++ b/skin/classic/mac/firebug.css
@@ -19,7 +19,7 @@
 #fbCommandLineCompletion,
 #fbCommandLineMeasurer,
 .fbCommandLineCompletions {
-    font-family: Monaco, monospace;
+    font-family: monospace;
 }
 
 /* Add some more padding to the completion popup */
@@ -70,8 +70,11 @@
     padding: 7px 0 7px 0;   /* Set proper height of window buttons (close, min, detach) */
 }
 
+/*************************************************************************************************/
+/* Search Box */
+
 .fbsearch-textbox {
-    border-radius: 10px !important;
+    border-radius: 10000px 0 0 10000px !important;
     margin-top: 1px;
 }
 
@@ -84,71 +87,52 @@
     background-position: 5px 50%;
 }
 
-/* xxxsz: Use PNG images for condition editor, because using SVGs as border images is broken
-   up to Firefox 22.0. Use SVGs as soon as Firefox 23.0 is the min. supported version.
-   (see issue 6607) */
-#fbSearchOptionsPanel {
-    -moz-appearance: none;
-    -moz-window-shadow: none;
-    background-color: transparent;
-    margin-bottom: 2px;
-    margin-right: -12px;
-    border-image: url(chrome://firebug/skin/mac/searchPanel.png) 16 50 24 12 stretch;
-    border-image-slice: 16 50 24 12 fill;
-    border-width: 16px 50px 24px 12px;
-    border-style: solid;
-    color: #ffffff;
+.fbsearch-options-label {
+    color: black;
 }
 
-#fbSearchOptionsPanel[position="after_end"] {
-    border-image: url(chrome://firebug/skin/mac/searchPanelDown.png) 25 50 18 12 stretch;
-    border-image-slice: 25 50 18 12 fill;
-    border-width: 25px 50px 18px 12px;
+.fbsearch-options-buttons {
+    -moz-appearance: none;
+    border-radius: 10000px;
+    border: 1px solid rgba(0,0,0,.35);
+    background: linear-gradient(#f6f6f6, #e9e9e9);
+    box-shadow: 0 1px rgba(255,255,255,.5), inset 0 1px 1px rgba(255,255,255,.5);
+    color: buttontext;
+    margin: 0;
+    margin-top: 1px;
 }
 
-#fbSearchOptionsPanel > vbox {
-    margin-right: -38px;
+.fbsearch-options-buttons {
+    -moz-margin-start: 0;
+    list-style-image: url(chrome://firebug/skin/mac/find-arrows.png);
+    padding: 2px 6px;
 }
 
-#fbSearchOptionsPanel > description {
-    margin: 0;
+.fbsearch-options-buttons > .toolbarbutton-text {
+    margin: 0 !important;
+    padding: 0;
+    width: 0;
 }
 
-.fbsearch-options-label {
-    color: #ffffff;
+.fbsearch-options-buttons > .toolbarbutton-icon {
+    margin: 0;
 }
 
-.fbsearch-options-buttons {
-    -moz-appearance: none;
-    background: #464646 linear-gradient(
-        to top,
-        rgba(255, 255, 255, 0.3),
-        rgba(255, 255, 255, 0) 55%,
-        rgba(255, 255, 255, 0.1) 55%,
-        rgba(255, 255, 255, 0.2)) repeat-x center center;
-    border: 3px solid;
-    -moz-border-top-colors: rgba(0,0,0,0.35) rgba(26,26,26,0.5) rgba(255,255,255,0.4);
-    -moz-border-right-colors: rgba(53,53,53,1) rgba(53,53,53,1) rgba(162,162,162,1);
-    -moz-border-bottom-colors: rgba(128,128,128,0.35) rgba(0,0,0,0.5) rgba(255,255,255,0.15);
-    -moz-border-left-colors: rgba(0,0,0,0.35) rgba(26,26,26,0.5) rgba(255,255,255,0.4);
-    border-radius: 20px;
-    padding: 1px 9px;
-    margin: 10px 0 0;
-    min-height: 0px;
-    color:  #ffffff;
-}
-
-.fbsearch-options-buttons > .button-box > .button-text {
-    margin: 0 !important;
+.fbsearch-options-buttons.prev {
+    border-left: none;
+    border-right: none;
+    -moz-margin-end: 0;
+    -moz-image-region: rect(0, 10px, 9px, 0);
+    border-radius: 0;
 }
 
-.fbsearch-options-buttons:hover {
-    background-color: #666666 !important;
+.fbsearch-options-buttons.next {
+    -moz-image-region: rect(0, 20px, 9px, 10px);
+    -moz-padding-end: 7px;
+    border-radius: 0 10000px 10000px 0;
 }
 
-.fbsearch-options-buttons:active {
-    background-color: #86888B !important;
-}
+/*************************************************************************************************/
 
 /* Don't display label and remove padding for all the following toolbar buttons */
 #fbFirebugMenu,
@@ -266,14 +250,14 @@
 /* Quick Info Box */
 
 #fbQuickInfoPanel {
-    font-family: Monaco, monospace;
+    font-family: monospace;
 }
 
 /************************************************************************************************/
 /* Command History panel */
 
 #fbCommandHistory {
-    font-family: Monaco, monospace;
+    font-family: monospace;
 }
 
 /********************************************************************************************/
@@ -550,8 +534,24 @@ panelTab[selected="true"] > panelTabMenu {
     -moz-border-right-colors: rgba(0,0,0,0.25) rgba(255,255,255,0.15) !important;
 }
 
+/*************************************************************************************************/
+/* Panel Tabs */
+
+panelTab[selected="true"] > panelTabMenu .menuTarget,
+panelTab:focus > panelTabMenu .menuTarget {
+    background: url(chrome://firebug/skin/mac/optionsMenuTarget.png) no-repeat center;
+    width: 11px;
+    height: 10px;
+    vertical-align: middle;
+    visibility: visible;
+}
+
+panelTab[selected="true"]:hover > panelTabMenu .menuTarget {
+    background-image: url(chrome://firebug/skin/mac/optionsMenuTargetHover.png);
+}
+
 /************************************************************************************************/
 
 #fbMigrationOk {
-    font-family: Monaco, monospace;
+    font-family: monospace;
 }
diff --git a/skin/classic/mac/panel.css b/skin/classic/mac/panel.css
index 63b3b4d..6de33eb 100644
--- a/skin/classic/mac/panel.css
+++ b/skin/classic/mac/panel.css
@@ -41,6 +41,7 @@ body {
 .nodeBox.open > .nodeLabel > .twisty,
 .netRow.opened > .netCol > .netHrefLabel,
 .netPageRow.opened > .netCol > .netPageTitle,
+.netHeadersGroup.opened > .netInfoHeadersGroup > .twisty,
 .objectBox-stackFrame.hasTwisty.opened,
 .objectBox-functionCall.hasTwisty.opened,
 .computedStylesGroup.opened > .cssComputedHeader > .twisty,
@@ -55,7 +56,7 @@ body {
 
 .infoTip,
 .fullPanelEditor {
-    font-family: Monaco, monospace;
+    font-family: monospace;
 }
 
 /************************************************************************************************/
@@ -82,7 +83,7 @@ body {
 .arrayLeftBracket,
 .arrayRightBracket,
 .arrayComma {
-      font-family: Monaco, monospace;
+      font-family: monospace;
 }
 
 /************************************************************************************************/
@@ -92,7 +93,7 @@ body {
 .docType,
 .breakpointCode .nodeBox.containerNodeBox,
 .breakpointCode .nodeLabel {
-    font-family: Monaco, monospace;
+    font-family: monospace;
 }
 
 .nodeBox.selected > .nodeLabel > .nodeLabelBox,
@@ -127,7 +128,7 @@ body {
 /* CSS panel */
 
 .cssRule {
-    font-family: Monaco, monospace;
+    font-family: monospace;
 }
 
 /************************************************************************************************/
@@ -135,11 +136,11 @@ body {
 
 .editor-watchNewRow,
 .editor-memberRow {
-    font-family: Monaco, monospace !important;
+    font-family: monospace !important;
 }
 
 .watchRow > .memberLabelCell {
-    font-family: Monaco, monospace;
+    font-family: monospace;
 }
 
 .closeButton {
@@ -162,5 +163,5 @@ body {
 
 .useA11y .a11yShowFullLabel,
 .netInfoText {
-    font-family: Monaco, monospace;
+    font-family: monospace;
 }
diff --git a/skin/classic/mac/pin.png b/skin/classic/mac/pin.png
index 7626e44..e958a88 100644
Binary files a/skin/classic/mac/pin.png and b/skin/classic/mac/pin.png differ
diff --git a/skin/classic/mac/pinned.png b/skin/classic/mac/pinned.png
index cb7f709..ddbc704 100644
Binary files a/skin/classic/mac/pinned.png and b/skin/classic/mac/pinned.png differ
diff --git a/skin/classic/mac/quickInfoBox.css b/skin/classic/mac/quickInfoBox.css
new file mode 100644
index 0000000..b063331
--- /dev/null
+++ b/skin/classic/mac/quickInfoBox.css
@@ -0,0 +1,38 @@
+/* See license.txt for terms of usage */
+
+/*************************************************************************************************/
+/* Quick Info Box */
+
+.fbQuickInfoPanelBody {
+    font-family: monospace;
+}
+
+.fbQuickInfoName, .fbQuickInfoValue {
+    font-family: monospace;
+}
+
+.fbQuickInfoPin {
+    background: url(chrome://firebug/skin/mac/pin.png) no-repeat;
+    width: 13px;
+    height: 13px;
+}
+
+.fbQuickInfoClose {
+    background: url(chrome://firebug/skin/mac/close.png) no-repeat;
+    width: 13px;
+    height: 13px;
+}
+
+.fbQuickInfoPin:hover,
+.fbQuickInfoClose:hover {
+    background-position: 0 -13px;
+}
+
+.fbQuickInfoPin.pin,
+.fbQuickInfoPin:active {
+    background: url(chrome://firebug/skin/mac/pinned.png) no-repeat;
+}
+
+.fbQuickInfoClose:active {
+    background-position: 0 -26px;
+}
diff --git a/skin/classic/net.css b/skin/classic/net.css
index b3c63d6..1c81721 100644
--- a/skin/classic/net.css
+++ b/skin/classic/net.css
@@ -524,33 +524,6 @@
 
 /*************************************************************************************************/
 
-.netLimitRow {
-    background: rgb(255, 255, 225) !important;
-    font-weight:normal;
-    color: black;
-    font-weight:normal;
-}
-
-.netLimitLabel {
-    padding-left: 18px;
-}
-
-.netLimitRow > .netCol {
-    border-bottom: 2px solid;
-    -moz-border-bottom-colors: #EFEFEF #999999;
-    vertical-align: middle !important;
-    padding-top: 2px;
-    padding-bottom: 2px;
-}
-
-.netLimitButton {
-    font-size: 11px;
-    padding-top: 1px;
-    padding-bottom: 1px;
-}
-
-/*************************************************************************************************/
-
 .netInfoCol {
     border-top: 1px solid #EEEEEE;
     background: #FFFFFF linear-gradient(to bottom, rgba(0, 0, 0, 0.1), transparent 33px) repeat-x;
@@ -720,17 +693,44 @@ body[resizingHtmlPreview="true"] .netInfoHtmlPreview {
     cursor: pointer;
 }
 
+.netInfoHeadersTable > .netHeadersGroup > TABLE,
+.netInfoHeadersTable > .netHeadersGroup .netHeadersViewSource {
+    display: none;
+}
+
+.netInfoHeadersTable > .netHeadersGroup.opened > TABLE,
+.netInfoHeadersTable > .netHeadersGroup.opened .netHeadersViewSource {
+    display: inline-block;
+}
+
+.netInfoHeadersTable .netHeader {
+    cursor: pointer;
+    padding-left: 17px;
+    position: static;
+    -moz-user-select: none;
+}
+
+.netInfoHeadersTable .netHeadersViewSource {
+    display: inline-block;
+}
+
 /*************************************************************************************************/
+/* Net Activation Message */
 
 .netActivationRow {
-    background: rgb(229, 229, 229) !important;
+    background: rgb(238, 238, 238) !important;
     font-weight: normal;
     color: black;
 }
 
+.netActivationRow > TD {
+    vertical-align: middle !important;
+    padding-top: 2px;
+    padding-bottom: 2px;
+}
+
 .netActivationLabel {
-    background: url(chrome://firebug/skin/info.svg) no-repeat 3px 2px;
-    padding-left: 22px;
+    padding-left: 28px;
 }
 
 /*************************************************************************************************/
@@ -764,13 +764,6 @@ body[resizingHtmlPreview="true"] .netInfoHtmlPreview {
 
 /*************************************************************************************************/
 
-.netActivationRow > .netCol {
-    border-bottom: 2px solid;
-    -moz-border-bottom-colors: #EFEFEF #999999;
-    padding-top: 2px;
-    padding-bottom: 3px;
-}
-
 .useA11y .panelNode-net .a11yFocus:focus,
 .useA11y .panelNode-net .focusRow:focus {
     outline-offset: -2px;
diff --git a/skin/classic/panel.css b/skin/classic/panel.css
index 9f83fcb..4418679 100644
--- a/skin/classic/panel.css
+++ b/skin/classic/panel.css
@@ -1,20 +1,74 @@
 /* See license.txt for terms of usage */
 
- at import "chrome://firebug/skin/panelbase.css";
- at import "chrome://firebug/skin/breakpoint.css";
- at import "chrome://firebug/skin/console.css";
- at import "chrome://firebug/skin/net.css";
- at import "chrome://firebug/skin/jsonViewer.css";
- at import "chrome://firebug/skin/fontViewer.css";
- at import "chrome://firebug/skin/html.css";
- at import "chrome://firebug/skin/css.css";
- at import "chrome://firebug/skin/debugger.css";
- at import "chrome://firebug/skin/balloonNote.css";
- at import "chrome://firebug/skin/callstack.css";
- at import "chrome://firebug/skin/layout.css";
- at import "chrome://firebug/skin/dom.css";
- at import "chrome://firebug/skin/selectors.css";
- at import "chrome://firebug/skin/performanceTiming.css";
- at import "chrome://firebug/skin/tableRep.css";
- at import "chrome://firebug-os/skin/panel.css";
- at import "chrome://firebug/skin/timeInfoTip.css";
+/************************************************************************************************/
+/* Twisties */
+
+.twisty,
+.foldableGroup > .groupHeader > .twisty,
+.logRow-errorMessage .hasTwisty > .errorTitle,
+.logRow-log .objectBox-array.hasTwisty,
+.logRow-spy .spyHead .spyTitle,
+.logGroup > .logRow,
+.memberRow.hasChildren > .memberLabelCell > .memberLabel,
+.memberRow.cropped > .memberLabelCell > .memberLabel,
+.hasHeaders .netHrefLabel,
+.objectBox-stackFrame.hasTwisty,
+.objectBox-functionCall.hasTwisty,
+.netPageRow > .netCol > .netPageTitle,
+.cssComputedHeader > .twisty,
+.breakpointHeader > .twisty,
+.computedStyle.hasSelectors > .stylePropName,
+.cookieRow > .cookieNameCol > .cookieNameLabel {
+    background-image: url(chrome://firebug/skin/win/twistyClosed.png);
+    background-repeat: no-repeat;
+    background-position: 2px calc(0.5em - 3px);
+    min-height: 12px;
+}
+
+.foldableGroup.opened > .groupHeader > .twisty,
+.logRow-errorMessage .hasTwisty.opened > .errorTitle,
+.logRow-log .objectBox-array.hasTwisty.opened,
+.logRow-spy.opened .spyHead .spyTitle,
+.logGroup.opened > .logRow,
+.memberRow.hasChildren.opened > .memberLabelCell > .memberLabel,
+.memberRow.cropped.opened > .memberLabelCell > .memberLabel,
+.nodeBox.highlightOpen > .nodeLabel > .twisty,
+.nodeBox.open > .nodeLabel > .twisty,
+.netRow.opened > .netCol > .netHrefLabel,
+.netPageRow.opened > .netCol > .netPageTitle,
+.netHeadersGroup.opened > .netInfoHeadersGroup > .twisty,
+.objectBox-stackFrame.hasTwisty.opened,
+.objectBox-functionCall.hasTwisty.opened,
+.computedStylesGroup.opened > .cssComputedHeader > .twisty,
+.breakpointBlock.opened > .breakpointHeader > .twisty,
+.computedStyle.hasSelectors.opened > .stylePropName,
+.cookieRow.opened > .cookieNameCol > .cookieNameLabel {
+    background-image: url(chrome://firebug/skin/win/twistyOpen.png);
+    background-repeat: no-repeat;
+    min-height: 12px;
+}
+
+.hasHeaders .netHrefLabel,
+.netInfoHeadersTable .netHeader,
+.netHrefLabel,
+.cookieRow > .cookieNameCol > .cookieNameLabel {
+    background-position: 2px 50%;
+}
+
+/************************************************************************************************/
+/* DOM panel */
+
+.closeButton {
+    display: inline-block;
+    width: 16px;
+    height: 16px;
+    background: url(chrome://firebug/skin/win/close.png) no-repeat 0 0;
+}
+
+.closeButton:hover {
+    background-position: 0 -16px;
+}
+
+.closeButton:hover:active {
+    background-position: 0 -32px;
+}
diff --git a/skin/classic/panelNotification.css b/skin/classic/panelNotification.css
new file mode 100644
index 0000000..7f6b38c
--- /dev/null
+++ b/skin/classic/panelNotification.css
@@ -0,0 +1,44 @@
+/* See license.txt for terms of usage */
+
+/*************************************************************************************************/
+/* Panel Notification Styles */
+
+.panelNotification {
+    width: 100%;
+    padding: 0;
+    border-bottom: 2px solid;
+    -moz-border-bottom-colors: #EFEFEF #999999;
+    height: 17px;
+    background: rgb(255, 255, 225) !important;
+    padding-top: 3px;
+    padding-bottom: 3px;
+}
+
+.panelNotification .panelNotificationRow {
+    font-weight: normal;
+    color: black;
+    font-weight: normal;
+}
+
+.panelNotification .panelNotificationMessage {
+    padding-left: 18px;
+    font-family: Lucida Grande,Tahoma,sans-serif;
+}
+
+.panelNotification .panelNotificationCol {
+    padding: 0;
+    white-space: nowrap;
+    height: 17px;
+    vertical-align: middle !important;
+}
+
+.panelNotification .panelNotificationButton {
+    font-size: 11px;
+    padding-top: 1px;
+    padding-bottom: 1px;
+    margin-right: 3px;
+}
+
+.panelNotification .panelSeparatorCol {
+    width: 100%;
+}
diff --git a/skin/classic/quickInfoBox.css b/skin/classic/quickInfoBox.css
index e319e7f..b71866d 100644
--- a/skin/classic/quickInfoBox.css
+++ b/skin/classic/quickInfoBox.css
@@ -3,11 +3,6 @@
 /*************************************************************************************************/
 /* Quick Info Box */
 
-#fbQuickInfoPanel {
-    border: 0;
-    opacity: 0.9;
-}
-
 .fbQuickInfoPanelBody {
     background-color: white;
     font-family: monospace;
@@ -55,7 +50,7 @@
 }
 
 .fbQuickInfoPin {
-    background: url(chrome://firebug-os/skin/pin.png) no-repeat;
+    background: url(chrome://firebug/skin/win/pin.png) no-repeat;
     width: 16px;
     height: 16px;
     border: none;
@@ -65,7 +60,7 @@
 }
 
 .fbQuickInfoClose {
-    background: url(chrome://firebug-os/skin/close.png) no-repeat;
+    background: url(chrome://firebug/skin/win/close.png) no-repeat;
     width: 16px;
     height: 16px;
     border: none;
@@ -81,9 +76,9 @@
 
 .fbQuickInfoPin.pin,
 .fbQuickInfoPin:active {
-    background: url(chrome://firebug-os/skin/pinned.png) no-repeat;
+    background: url(chrome://firebug/skin/win/pinned.png) no-repeat;
 }
 
 .fbQuickInfoClose:active {
     background-position: 0 -32px;
-}
\ No newline at end of file
+}
diff --git a/skin/classic/quickInfoBoxPanel.css b/skin/classic/quickInfoBoxPanel.css
new file mode 100644
index 0000000..7cb4ed3
--- /dev/null
+++ b/skin/classic/quickInfoBoxPanel.css
@@ -0,0 +1,10 @@
+/* See license.txt for terms of usage */
+
+/*************************************************************************************************/
+/* Quick Info Box */
+
+#fbQuickInfoPanel {
+    border: none;
+    opacity: 0.9;
+    overflow: hidden;
+}
diff --git a/skin/classic/search.png b/skin/classic/search.png
index 6e87593..16fb92b 100644
Binary files a/skin/classic/search.png and b/skin/classic/search.png differ
diff --git a/skin/classic/searchHovered.png b/skin/classic/searchHovered.png
deleted file mode 100644
index 599f166..0000000
Binary files a/skin/classic/searchHovered.png and /dev/null differ
diff --git a/skin/classic/win/debugger.css b/skin/classic/win/debugger.css
deleted file mode 100644
index d59c6ab..0000000
--- a/skin/classic/win/debugger.css
+++ /dev/null
@@ -1,33 +0,0 @@
-/* See license.txt for terms of usage */
-
-/************************************************************************************************/
-/* Breakpoint condition */
-
-/* xxxsz: Use PNG images for condition editor, because using SVGs as border images is broken
-   up to Firefox 22.0. Use SVGs as soon as Firefox 23.0 is the min. supported version.
-   (see issue 6607) */
-.conditionEditor {
-    border-style: solid;
-    border-width: 19px 25px 33px 33px;
-    border-image: url(chrome://firebug/skin/win/breakpointConditionEditor.png) 19 25 33 33 fill stretch;
-}
-
-.conditionCaption {
-    margin-bottom: 2px;
-    font-family: Lucida Grande, sans-serif;
-    font-weight: bold;
-    font-size: 11px;
-    color: #226679;
-}
-
-.conditionInput {
-    border: 1px solid #0096C0;
-    font-family: monospace;
-}
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-.upsideDown {
-    border-width: 28px 25px 19px 33px;
-    border-image: url(chrome://firebug/skin/win/breakpointConditionEditorDown.png) 28 25 19 33 fill stretch;
-}
\ No newline at end of file
diff --git a/skin/classic/win/linux.css b/skin/classic/win/linux.css
deleted file mode 100644
index e69de29..0000000
diff --git a/skin/classic/win/panel.css b/skin/classic/win/panel.css
deleted file mode 100644
index 6bd2fa8..0000000
--- a/skin/classic/win/panel.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/* See license.txt for terms of usage */
-
-/************************************************************************************************/
-/* Twisties */
-
-.twisty,
-.foldableGroup > .groupHeader > .twisty,
-.logRow-errorMessage .hasTwisty > .errorTitle,
-.logRow-log .objectBox-array.hasTwisty,
-.logRow-spy .spyHead .spyTitle,
-.logGroup > .logRow,
-.memberRow.hasChildren > .memberLabelCell > .memberLabel,
-.memberRow.cropped > .memberLabelCell > .memberLabel,
-.hasHeaders .netHrefLabel,
-.objectBox-stackFrame.hasTwisty,
-.objectBox-functionCall.hasTwisty,
-.netPageRow > .netCol > .netPageTitle,
-.cssComputedHeader > .twisty,
-.breakpointHeader > .twisty,
-.computedStyle.hasSelectors > .stylePropName,
-.cookieRow > .cookieNameCol > .cookieNameLabel {
-    background-image: url(chrome://firebug/skin/win/twistyClosed.png);
-    background-repeat: no-repeat;
-    background-position: 2px calc(0.5em - 3px);
-    min-height: 12px;
-}
-
-.foldableGroup.opened > .groupHeader > .twisty,
-.logRow-errorMessage .hasTwisty.opened > .errorTitle,
-.logRow-log .objectBox-array.hasTwisty.opened,
-.logRow-spy.opened .spyHead .spyTitle,
-.logGroup.opened > .logRow,
-.memberRow.hasChildren.opened > .memberLabelCell > .memberLabel,
-.memberRow.cropped.opened > .memberLabelCell > .memberLabel,
-.nodeBox.highlightOpen > .nodeLabel > .twisty,
-.nodeBox.open > .nodeLabel > .twisty,
-.netRow.opened > .netCol > .netHrefLabel,
-.netPageRow.opened > .netCol > .netPageTitle,
-.objectBox-stackFrame.hasTwisty.opened,
-.objectBox-functionCall.hasTwisty.opened,
-.computedStylesGroup.opened > .cssComputedHeader > .twisty,
-.breakpointBlock.opened > .breakpointHeader > .twisty,
-.computedStyle.hasSelectors.opened > .stylePropName,
-.cookieRow.opened > .cookieNameCol > .cookieNameLabel {
-    background-image: url(chrome://firebug/skin/win/twistyOpen.png);
-}
-
-.hasHeaders .netHrefLabel,
-.cookieRow > .cookieNameCol > .cookieNameLabel {
-    background-position: 2px 50%;
-}
-
-/************************************************************************************************/
-/* DOM panel */
-
-.closeButton {
-    display: inline-block;
-    width: 16px;
-    height: 16px;
-    background: url(chrome://firebug/skin/win/close.png) no-repeat 0 0;
-}
-
-.closeButton:hover {
-    background-position: 0 -16px;
-}
-
-.closeButton:hover:active {
-    background-position: 0 -32px;
-}
diff --git a/skin/classic/win/window.css b/skin/classic/win/window.css
deleted file mode 100644
index 144b66a..0000000
--- a/skin/classic/win/window.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* See license.txt for terms of usage */
-

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/firebug.git



More information about the Pkg-mozext-commits mailing list