Merge mozilla-central to mozilla-inbound
authorCarsten "Tomcat" Book <cbook@mozilla.com>
Tue, 16 Feb 2016 12:20:11 +0100
changeset 331286 d73b4d5f5d259b9015d7af8f7bfaae81d33529ec
parent 331285 374422755fccfd9e8296195ad60b6f4b752238e6 (current diff)
parent 331237 6ea654cad929c9bedd8a4161a182b6189fbeae6a (diff)
child 331287 85b4f57c10f925521c8302207b6d0676d6f12ae7
push id10956
push userjolesen@mozilla.com
push dateTue, 16 Feb 2016 19:12:12 +0000
milestone47.0a1
Merge mozilla-central to mozilla-inbound
browser/extensions/loop/chrome/content/shared/test/models_test.js
testing/eslint-plugin-mozilla/docs/components-imports.rst
testing/eslint-plugin-mozilla/lib/rules/components-imports.js
testing/eslint-plugin-mozilla/lib/rules/import-globals-from.js
--- a/browser/base/content/browser-places.js
+++ b/browser/base/content/browser-places.js
@@ -1342,17 +1342,17 @@ var BookmarkingUI = {
   },
 
   _updateRecentBookmarks: function(container, extraCSSClass = "") {
     const kMaxResults = 5;
 
     let options = PlacesUtils.history.getNewQueryOptions();
     options.excludeQueries = true;
     options.queryType = options.QUERY_TYPE_BOOKMARKS;
-    options.sortingMode = options.SORT_BY_DATE_DESCENDING;
+    options.sortingMode = options.SORT_BY_DATEADDED_DESCENDING;
     options.maxResults = kMaxResults;
     let query = PlacesUtils.history.getNewQuery();
 
     while (container.firstChild) {
       container.firstChild.remove();
     }
 
     PlacesUtils.history.QueryInterface(Ci.nsPIPlacesDatabase)
@@ -1600,16 +1600,20 @@ var BookmarkingUI = {
     let isStarred = !forceReset && this._itemIds.length > 0;
     let label = isStarred ? "editlabel" : "bookmarklabel";
     if (this.broadcaster) {
       this.broadcaster.setAttribute("label", this.broadcaster.getAttribute(label));
     }
   },
 
   onMainMenuPopupShowing: function BUI_onMainMenuPopupShowing(event) {
+    // Don't handle events for submenus.
+    if (event.target != event.currentTarget)
+      return;
+
     this._updateBookmarkPageMenuItem();
     PlacesCommandHook.updateBookmarkAllTabsCommand();
     this._updateRecentBookmarks(document.getElementById("menu_recentBookmarks"));
   },
 
   _showBookmarkedNotification: function BUI_showBookmarkedNotification() {
     function getCenteringTransformForRects(rectToPosition, referenceRect) {
       let topDiff = referenceRect.top - rectToPosition.top;
--- a/browser/base/content/browser-syncui.js
+++ b/browser/base/content/browser-syncui.js
@@ -82,16 +82,18 @@ var gSyncUI = {
     broadcaster.setAttribute("label", this._stringBundle.GetStringFromName("syncnow.label"));
 
     // Initialize the Synced Tabs Sidebar
     if (Services.prefs.getBoolPref("services.sync.syncedTabsUIRefresh")) {
       let sidebarBroadcaster = document.getElementById("viewTabsSidebar");
       sidebarBroadcaster.removeAttribute("hidden");
     }
 
+    this.maybeMoveSyncedTabsButton();
+
     this.updateUI();
   },
 
 
   // Returns a promise that resolves with true if Sync needs to be configured,
   // false otherwise.
   _needsSetup() {
     // If Sync is configured for FxAccounts then we do that promise-dance.
@@ -327,16 +329,38 @@ var gSyncUI = {
         PanelUI.showSubView("PanelUI-remotetabs", anchor, area);
       }).catch(Cu.reportError);
     } else {
       // It is placed somewhere else - just try and show it.
       PanelUI.showSubView("PanelUI-remotetabs", anchor, area);
     }
   },
 
+  /* After Sync is initialized we perform a once-only check for the sync
+     button being in "customize purgatory" and if so, move it to the panel.
+     This is done primarily for profiles created before SyncedTabs landed,
+     where the button defaulted to being in that purgatory.
+     We use a preference to ensure we only do it once, so people can still
+     customize it away and have it stick.
+  */
+  maybeMoveSyncedTabsButton() {
+    const prefName = "browser.migrated-sync-button";
+    let migrated = false;
+    try {
+      migrated = Services.prefs.getBoolPref(prefName);
+    } catch (_) {}
+    if (migrated) {
+      return;
+    }
+    if (!CustomizableUI.getPlacementOfWidget("sync-button")) {
+      CustomizableUI.addWidgetToArea("sync-button", CustomizableUI.AREA_PANEL);
+    }
+    Services.prefs.setBoolPref(prefName, true);
+  },
+
   /* Update the tooltip for the sync-status broadcaster (which will update the
      Sync Toolbar button and the Sync spinner in the FxA hamburger area.)
      If Sync is configured, the tooltip is when the last sync occurred,
      otherwise the tooltip reflects the fact that Sync needs to be
      (re-)configured.
   */
   _updateSyncButtonsTooltip: Task.async(function* () {
     if (!gBrowser)
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -1015,47 +1015,25 @@ toolbar[mode="text"] > #downloads-button
 }
 
 toolbar[mode="text"] > #downloads-button > .toolbarbutton-icon {
   display: -moz-box;
   -moz-box-ordinal-group: 2;
   visibility: collapse;
 }
 
-/* full screen chat window support */
-chatbar:-moz-full-screen-ancestor,
-chatbox:-moz-full-screen-ancestor  {
-  border: none;
-  position: fixed !important;
-  top: 0 !important;
-  left: 0 !important;
-  right: 0 !important;
-  bottom: 0 !important;
-  width: 100% !important;
-  height: 100% !important;
-  margin: 0 !important;
-  min-width: 0 !important;
-  max-width: none !important;
-  min-height: 0 !important;
-  max-height: none !important;
-  box-sizing: border-box !important;
-}
-
 /* hide chat chrome when chat is fullscreen */
-chatbox:-moz-full-screen-ancestor > .chat-titlebar {
+#chat-window[sizemode="fullscreen"] chatbox > .chat-titlebar {
   display: none;
 }
 
-/* hide chatbar if browser tab is fullscreen */
-*:-moz-full-screen-ancestor chatbar:not(:-moz-full-screen-ancestor) {
-  display: none;
-}
-
-/* hide sidebar when fullscreen */
-*:-moz-full-screen-ancestor #social-sidebar-box:not(:-moz-full-screen-ancestor) {
+/* hide chatbar and sidebar if browser tab is fullscreen */
+#main-window[inFullscreen][inDOMFullscreen] chatbar,
+#main-window[inFullscreen][inDOMFullscreen] #social-sidebar-box,
+#main-window[inFullscreen][inDOMFullscreen] #social-sidebar-splitter {
   display: none;
 }
 
 /* Combobox dropdown renderer */
 #ContentSelectDropdown > menupopup {
   max-height: 350px;
   /* The menupopup itself should always be rendered LTR to ensure the scrollbar aligns with
    * the dropdown arrow on the dropdown widget. If a menuitem is RTL, its style will be set accordingly */
--- a/browser/base/content/social-content.js
+++ b/browser/base/content/social-content.js
@@ -116,31 +116,31 @@ SocialErrorListener = {
         // this, then cancel the event (so the window itself doesn't die) and
         // close the panel instead.
         // However, this is typically affected by the dom.allow_scripts_to_close_windows
         // preference, but we can avoid that check by setting a flag on the window.
         let dwu = content.QueryInterface(Ci.nsIInterfaceRequestor)
            .getInterface(Ci.nsIDOMWindowUtils);
         dwu.allowScriptsToClose();
 
-        addEventListener("DOMWindowClose", function _mozSocialDOMWindowClose(evt) {
+        content.addEventListener("DOMWindowClose", function _mozSocialDOMWindowClose(evt) {
           sendAsyncMessage("DOMWindowClose");
           // preventDefault stops the default window.close() function being called,
           // which doesn't actually close anything but causes things to get into
           // a bad state (an internal 'closed' flag is set and debug builds start
           // asserting as the window is used.).
           // None of the windows we inject this API into are suitable for this
           // default close behaviour, so even if we took no action above, we avoid
           // the default close from doing anything.
           evt.preventDefault();
         }, true);
         break;
       case "Social:ListenForEvents":
         for (let eventName of message.data.eventNames) {
-          addEventListener(eventName, this);
+          content.addEventListener(eventName, this);
         }
         break;
       case "Social:SetDocumentTitle":
         let title = message.data.title;
         if (title && (title = title.trim())) {
           gDOMTitleChangedByUs = true;
           document.title = title;
         }
--- a/browser/base/content/test/general/browser_urlHighlight.js
+++ b/browser/base/content/test/general/browser_urlHighlight.js
@@ -61,16 +61,29 @@ function test() {
   testVal("<user:pass@>mozilla.org");
 
   testVal("<https://>mozilla.org</file.ext>");
   testVal("<https://>mozilla.org</sub/file.ext>");
   testVal("<https://>mozilla.org</sub/file.ext?foo>");
   testVal("<https://>mozilla.org</sub/file.ext?foo&bar>");
   testVal("<https://>mozilla.org</sub/file.ext?foo&bar#top>");
   testVal("<https://>mozilla.org</sub/file.ext?foo&bar#top>");
+  testVal("foo.bar<?q=test>");
+  testVal("foo.bar<#mozilla.org>");
+  testVal("foo.bar<?somewhere.mozilla.org>");
+  testVal("foo.bar<?@mozilla.org>");
+  testVal("foo.bar<#x@mozilla.org>");
+  testVal("foo.bar<#@x@mozilla.org>");
+  testVal("foo.bar<?x@mozilla.org>");
+  testVal("foo.bar<?@x@mozilla.org>");
+  testVal("<foo.bar@x@>mozilla.org");
+  testVal("<foo.bar@:baz@>mozilla.org");
+  testVal("<foo.bar:@baz@>mozilla.org");
+  testVal("<foo.bar@:ba:z@>mozilla.org");
+  testVal("<foo.:bar:@baz@>mozilla.org");
 
   testVal("<https://sub.>mozilla.org<:666/file.ext>");
   testVal("<sub.>mozilla.org<:666/file.ext>");
   testVal("localhost<:666/file.ext>");
 
   let IPs = ["192.168.1.1",
              "[::]",
              "[::1]",
--- a/browser/base/content/urlbarBindings.xml
+++ b/browser/base/content/urlbarBindings.xml
@@ -256,17 +256,17 @@ file, You can obtain one at http://mozil
           // trimmedLength to ensure we don't count the length of a trimmed protocol
           // when determining which parts of the URL to highlight as "preDomain".
           let trimmedLength = 0;
           if (uriInfo.fixedURI.scheme == "http" && !value.startsWith("http://")) {
             value = "http://" + value;
             trimmedLength = "http://".length;
           }
 
-          let matchedURL = value.match(/^((?:[a-z]+:\/\/)?(?:[^\/]+@)?)(.+?)(?::\d+)?(?:\/|$)/);
+          let matchedURL = value.match(/^((?:[a-z]+:\/\/)(?:[^\/#?]+@)?)(.+?)(?::\d+)?(?:[\/#?]|$)/);
           if (!matchedURL)
             return;
 
           // Strike out the "https" part if mixed active content is loaded.
           if (this.getAttribute("pageproxystate") == "valid" &&
               value.startsWith("https:") &&
               gBrowser.securityUI.state &
                 Ci.nsIWebProgressListener.STATE_LOADED_MIXED_ACTIVE_CONTENT) {
--- a/browser/components/migration/content/aboutWelcomeBack.xhtml
+++ b/browser/components/migration/content/aboutWelcomeBack.xhtml
@@ -12,17 +12,17 @@
   <!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd">
   %globalDTD;
   <!ENTITY % restorepageDTD SYSTEM "chrome://browser/locale/aboutSessionRestore.dtd">
   %restorepageDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
   <head>
-    <title>&restorepage.tabtitle;</title>
+    <title>&welcomeback2.tabtitle;</title>
     <link rel="stylesheet" href="chrome://global/skin/in-content/info-pages.css" type="text/css" media="all"/>
     <link rel="stylesheet" href="chrome://browser/skin/aboutWelcomeBack.css" type="text/css" media="all"/>
     <link rel="icon" type="image/png" href="chrome://global/skin/icons/information-16.png"/>
 
     <script type="application/javascript;version=1.8" src="chrome://browser/content/aboutSessionRestore.js"/>
   </head>
 
   <body dir="&locale.dir;">
--- a/browser/components/nsBrowserContentHandler.js
+++ b/browser/components/nsBrowserContentHandler.js
@@ -29,23 +29,19 @@ const nsICommandLine         = Component
 const nsICommandLineHandler  = Components.interfaces.nsICommandLineHandler;
 const nsIContentHandler      = Components.interfaces.nsIContentHandler;
 const nsIDocShellTreeItem    = Components.interfaces.nsIDocShellTreeItem;
 const nsIDOMChromeWindow     = Components.interfaces.nsIDOMChromeWindow;
 const nsIDOMWindow           = Components.interfaces.nsIDOMWindow;
 const nsIFileURL             = Components.interfaces.nsIFileURL;
 const nsIInterfaceRequestor  = Components.interfaces.nsIInterfaceRequestor;
 const nsINetUtil             = Components.interfaces.nsINetUtil;
-const nsIPrefBranch          = Components.interfaces.nsIPrefBranch;
 const nsIPrefLocalizedString = Components.interfaces.nsIPrefLocalizedString;
 const nsISupportsString      = Components.interfaces.nsISupportsString;
-const nsIURIFixup            = Components.interfaces.nsIURIFixup;
 const nsIWebNavigation       = Components.interfaces.nsIWebNavigation;
-const nsIWindowMediator      = Components.interfaces.nsIWindowMediator;
-const nsIWindowWatcher       = Components.interfaces.nsIWindowWatcher;
 const nsIWebNavigationInfo   = Components.interfaces.nsIWebNavigationInfo;
 const nsICommandLineValidator = Components.interfaces.nsICommandLineValidator;
 
 const NS_BINDING_ABORTED = Components.results.NS_BINDING_ABORTED;
 const NS_ERROR_WONT_HANDLE_CONTENT = 0x805d0001;
 const NS_ERROR_ABORT = Components.results.NS_ERROR_ABORT;
 
 function shouldLoadURI(aURI) {
@@ -54,37 +50,36 @@ function shouldLoadURI(aURI) {
 
   dump("*** Preventing external load of chrome: URI into browser window\n");
   dump("    Use --chrome <uri> instead\n");
   return false;
 }
 
 function resolveURIInternal(aCmdLine, aArgument) {
   var uri = aCmdLine.resolveURI(aArgument);
-  var urifixup = Components.classes["@mozilla.org/docshell/urifixup;1"]
-                           .getService(nsIURIFixup);
+  var uriFixup = Services.uriFixup;
 
   if (!(uri instanceof nsIFileURL)) {
-    return urifixup.createFixupURI(aArgument,
-                                   urifixup.FIXUP_FLAG_FIX_SCHEME_TYPOS);
+    return uriFixup.createFixupURI(aArgument,
+                                   uriFixup.FIXUP_FLAG_FIX_SCHEME_TYPOS);
   }
 
   try {
     if (uri.file.exists())
       return uri;
   }
   catch (e) {
     Components.utils.reportError(e);
   }
 
   // We have interpreted the argument as a relative file URI, but the file
   // doesn't exist. Try URI fixup heuristics: see bug 290782.
 
   try {
-    uri = urifixup.createFixupURI(aArgument, 0);
+    uri = uriFixup.createFixupURI(aArgument, 0);
   }
   catch (e) {
     Components.utils.reportError(e);
   }
 
   return uri;
 }
 
@@ -176,29 +171,26 @@ function getPostUpdateOverridePage(defau
 
   return update.getProperty("openURL") || defaultOverridePage;
 }
 
 // Flag used to indicate that the arguments to openWindow can be passed directly.
 const NO_EXTERNAL_URIS = 1;
 
 function openWindow(parent, url, target, features, args, noExternalArgs) {
-  var wwatch = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
-                         .getService(nsIWindowWatcher);
-
   if (noExternalArgs == NO_EXTERNAL_URIS) {
     // Just pass in the defaultArgs directly
     var argstring;
     if (args) {
       argstring = Components.classes["@mozilla.org/supports-string;1"]
                             .createInstance(nsISupportsString);
       argstring.data = args;
     }
 
-    return wwatch.openWindow(parent, url, target, features, argstring);
+    return Services.ww.openWindow(parent, url, target, features, argstring);
   }
 
   // Pass an array to avoid the browser "|"-splitting behavior.
   var argArray = Components.classes["@mozilla.org/supports-array;1"]
                     .createInstance(Components.interfaces.nsISupportsArray);
 
   // add args to the arguments array
   var stringArgs = null;
@@ -225,42 +217,33 @@ function openWindow(parent, url, target,
   // Pass these as null to ensure that we always trigger the "single URL"
   // behavior in browser.js's gBrowserInit.onLoad (which handles the window
   // arguments)
   argArray.AppendElement(null); // charset
   argArray.AppendElement(null); // referer
   argArray.AppendElement(null); // postData
   argArray.AppendElement(null); // allowThirdPartyFixup
 
-  return wwatch.openWindow(parent, url, target, features, argArray);
+  return Services.ww.openWindow(parent, url, target, features, argArray);
 }
 
 function openPreferences() {
   var sa = Components.classes["@mozilla.org/supports-array;1"]
                      .createInstance(Components.interfaces.nsISupportsArray);
 
   var wuri = Components.classes["@mozilla.org/supports-string;1"]
                        .createInstance(Components.interfaces.nsISupportsString);
   wuri.data = "about:preferences";
 
   sa.AppendElement(wuri);
 
-  var wwatch = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
-                         .getService(nsIWindowWatcher);
-
-  wwatch.openWindow(null, gBrowserContentHandler.chromeURL,
-                    "_blank",
-                    "chrome,dialog=no,all",
-                    sa);
-}
-
-function getMostRecentWindow(aType) {
-  var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
-                     .getService(nsIWindowMediator);
-  return wm.getMostRecentWindow(aType);
+  Services.ww.openWindow(null, gBrowserContentHandler.chromeURL,
+                         "_blank",
+                         "chrome,dialog=no,all",
+                         sa);
 }
 
 function logSystemBasedSearch(engine) {
   var countId = (engine.identifier || ("other-" + engine.name)) + ".system";
   var count = Services.telemetry.getKeyedHistogramById("SEARCH_COUNTS");
   count.add(countId);
 }
 
@@ -281,24 +264,21 @@ function doSearch(searchTerm, cmdLine) {
   sa.AppendElement(wuri);
   sa.AppendElement(null);
   sa.AppendElement(null);
   sa.AppendElement(submission.postData);
 
   // XXXbsmedberg: use handURIToExistingBrowser to obey tabbed-browsing
   // preferences, but need nsIBrowserDOMWindow extensions
 
-  var wwatch = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
-                         .getService(nsIWindowWatcher);
-
-  return wwatch.openWindow(null, gBrowserContentHandler.chromeURL,
-                           "_blank",
-                           "chrome,dialog=no,all" +
-                           gBrowserContentHandler.getFeatures(cmdLine),
-                           sa);
+  return Services.ww.openWindow(null, gBrowserContentHandler.chromeURL,
+                                "_blank",
+                                "chrome,dialog=no,all" +
+                                gBrowserContentHandler.getFeatures(cmdLine),
+                                sa);
 }
 
 function nsBrowserContentHandler() {
 }
 nsBrowserContentHandler.prototype = {
   classID: Components.ID("{5d0ce354-df01-421a-83fb-7ead0990c24e}"),
 
   _xpcom_factory: {
@@ -313,19 +293,17 @@ nsBrowserContentHandler.prototype = {
 
   mChromeURL : null,
 
   get chromeURL() {
     if (this.mChromeURL) {
       return this.mChromeURL;
     }
 
-    var prefb = Components.classes["@mozilla.org/preferences-service;1"]
-                          .getService(nsIPrefBranch);
-    this.mChromeURL = prefb.getCharPref("browser.chromeURL");
+    this.mChromeURL = Services.prefs.getCharPref("browser.chromeURL");
 
     return this.mChromeURL;
   },
 
   /* nsISupports */
   QueryInterface : XPCOMUtils.generateQI([nsICommandLineHandler,
                                           nsIBrowserHandler,
                                           nsIContentHandler,
@@ -447,19 +425,17 @@ nsBrowserContentHandler.prototype = {
     // PB builds.
     if (cmdLine.handleFlag("private", false)) {
       PrivateBrowsingUtils.enterTemporaryAutoStartMode();
     }
 
     var fileParam = cmdLine.handleFlagWithParam("file", false);
     if (fileParam) {
       var file = cmdLine.resolveFile(fileParam);
-      var ios = Components.classes["@mozilla.org/network/io-service;1"]
-                          .getService(Components.interfaces.nsIIOService);
-      var fileURI = ios.newFileURI(file);
+      var fileURI = Services.io.newFileURI(file);
       openWindow(null, this.chromeURL, "_blank",
                  "chrome,dialog=no,all" + this.getFeatures(cmdLine),
                  fileURI.spec);
       cmdLine.preventDefault = true;
     }
 
     if (AppConstants.platform  == "win") {
       // Handle "? searchterm" for Windows Vista start menu integration
@@ -489,18 +465,17 @@ nsBrowserContentHandler.prototype = {
     }
     info += "  --search <term>    Search <term> with your default search engine.\n";
     return info;
   },
 
   /* nsIBrowserHandler */
 
   get defaultArgs() {
-    var prefb = Components.classes["@mozilla.org/preferences-service;1"]
-                          .getService(nsIPrefBranch);
+    var prefb = Services.prefs;
 
     if (!gFirstWindow) {
       gFirstWindow = true;
       if (PrivateBrowsingUtils.isInTemporaryAutoStartMode) {
         return "about:privatebrowsing";
       }
     }
 
@@ -742,19 +717,17 @@ nsDefaultCommandLineHandler.prototype = 
       // displayed) we will crash if we open an url and then select a profile. To
       // prevent this handle all url command line flags and set the command line's
       // preventDefault to true to prevent the display of the ui. The initial
       // command line will be retained when nsAppRunner calls LaunchChild though
       // urls launched after the initial launch will be lost.
       if (!this._haveProfile) {
         try {
           // This will throw when a profile has not been selected.
-          var fl = Components.classes["@mozilla.org/file/directory_service;1"]
-                             .getService(Components.interfaces.nsIProperties);
-          var dir = fl.get("ProfD", Components.interfaces.nsILocalFile);
+          var dir = Services.dirsvc.get("ProfD", Components.interfaces.nsILocalFile);
           this._haveProfile = true;
         }
         catch (e) {
           while ((ar = cmdLine.handleFlagWithParam("url", false))) { }
           cmdLine.preventDefault = true;
         }
       }
     }
--- a/browser/extensions/loop/bootstrap.js
+++ b/browser/extensions/loop/bootstrap.js
@@ -19,32 +19,48 @@ Cu.import("resource://gre/modules/AppCon
 
 XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils",
   "resource://gre/modules/PrivateBrowsingUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI",
   "resource:///modules/CustomizableUI.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "Task",
   "resource://gre/modules/Task.jsm");
 
+// See LOG_LEVELS in Console.jsm. Common examples: "All", "Info", "Warn", & "Error".
+const PREF_LOG_LEVEL = "loop.debug.loglevel";
+
+XPCOMUtils.defineLazyGetter(this, "log", () => {
+  let ConsoleAPI = Cu.import("resource://gre/modules/Console.jsm", {}).ConsoleAPI;
+  let consoleOptions = {
+    maxLogLevelPref: PREF_LOG_LEVEL,
+    prefix: "Loop"
+  };
+  return new ConsoleAPI(consoleOptions);
+});
+
 /**
  * This window listener gets loaded into each browser.xul window and is used
  * to provide the required loop functions for the window.
  */
 var WindowListener = {
+  // Records the add-on version once we know it.
+  addonVersion: "unknown",
+
   /**
    * Sets up the chrome integration within browser windows for Loop.
    *
    * @param {Object} window The window to inject the integration into.
    */
   setupBrowserUI: function(window) {
     let document = window.document;
     let gBrowser = window.gBrowser;
     let xhrClass = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"];
     let FileReader = window.FileReader;
     let menuItem = null;
+    let isSlideshowOpen = false;
 
     // the "exported" symbols
     var LoopUI = {
       /**
        * @var {XULWidgetSingleWrapper} toolbarButton Getter for the Loop toolbarbutton
        *                                             instance for this window. This should
        *                                             not be used in the hidden window.
        */
@@ -69,16 +85,40 @@ var WindowListener = {
         let browser = document.querySelector("#loop-notification-panel > #loop-panel-iframe");
         if (browser) {
           delete this.browser;
           this.browser = browser;
         }
         return browser;
       },
 
+      get isSlideshowOpen() {
+        return isSlideshowOpen;
+      },
+
+      set isSlideshowOpen(aOpen) {
+        isSlideshowOpen = aOpen;
+        this.updateToolbarState();
+      },
+      /**
+       * @return {Object} Getter for the Loop constants
+       */
+      get constants() {
+        if (!this._constants) {
+          // GetAllConstants is synchronous even though it's using a callback.
+          this.LoopAPI.sendMessageToHandler({
+            name: "GetAllConstants"
+          }, result => {
+            this._constants = result;
+          });
+        }
+
+        return this._constants;
+      },
+
       /**
        * @return {Promise}
        */
       promiseDocumentVisible(aDocument) {
         if (!aDocument.hidden) {
           return Promise.resolve(aDocument);
         }
 
@@ -109,16 +149,20 @@ var WindowListener = {
         }
         if (this.panel.state == "open") {
           return new Promise(resolve => {
             this.panel.hidePopup();
             resolve();
           });
         }
 
+        if (this.isSlideshowOpen) {
+          return Promise.resolve();
+        }
+
         return this.openPanel(event).then(mm => {
           if (mm) {
             mm.sendAsyncMessage("Social:EnsureFocusElement");
           }
         }).catch(err => {
           Cu.reportError(err);
         });
       },
@@ -136,16 +180,22 @@ var WindowListener = {
             let mm = iframe.QueryInterface(Ci.nsIFrameLoaderOwner).frameLoader.messageManager;
             if (!("messageManager" in iframe)) {
               iframe.messageManager = mm;
             }
             this.hookWindowCloseForPanelClose(iframe);
 
             mm.sendAsyncMessage("Social:WaitForDocumentVisible");
             mm.addMessageListener("Social:DocumentVisible", () => resolve(mm));
+
+            let buckets = this.constants.LOOP_MAU_TYPE;
+            this.LoopAPI.sendMessageToHandler({
+              name: "TelemetryAddValue",
+              data: ["LOOP_MAU", buckets.OPEN_PANEL]
+            });
           };
 
           // Used to clear the temporary "login" state from the button.
           Services.obs.notifyObservers(null, "loop-status-changed", null);
 
           this.shouldResumeTour().then((resume) => {
             if (resume) {
               // Assume the conversation with the visitor wasn't open since we would
@@ -167,16 +217,27 @@ var WindowListener = {
               "about:looppanel", // Source
               null, // Size
               callback);
           });
         });
       },
 
       /**
+       * Wrapper for openPanel - to support Firefox 46 and 45.
+       *
+       * @param {event}  event   The event opening the panel, used to anchor
+       *                         the panel to the button which triggers it.
+       * @return {Promise}
+       */
+      openCallPanel: function(event) {
+        return this.openPanel(event);
+      },
+
+      /**
        * Method to know whether actions to open the panel should instead resume the tour.
        *
        * We need the panel to be opened via UITour so that it gets @noautohide.
        *
        * @return {Promise} resolving with a {Boolean} of whether the tour should be resumed instead of
        *                   opening the panel.
        */
       shouldResumeTour: Task.async(function* () {
@@ -224,17 +285,17 @@ var WindowListener = {
 
       /**
        * Triggers the initialization of the loop service if necessary.
        * Also adds appropraite observers for the UI.
        */
       init: function() {
         // This is a promise for test purposes, but we don't want to be logging
         // expected errors to the console, so we catch them here.
-        this.MozLoopService.initialize().catch(ex => {
+        this.MozLoopService.initialize(WindowListener.addonVersion).catch(ex => {
           if (!ex.message ||
               (!ex.message.contains("not enabled") &&
                !ex.message.contains("not needed"))) {
             console.error(ex);
           }
         });
 
         this.addMenuItem();
@@ -308,16 +369,18 @@ var WindowListener = {
           return;
         }
         let state = "";
         let mozL10nId = "loop-call-button3";
         let suffix = ".tooltiptext";
         if (this.MozLoopService.errors.size) {
           state = "error";
           mozL10nId += "-error";
+        } else if (this.isSlideshowOpen) {
+          state = "slideshow";
         } else if (this.MozLoopService.screenShareActive) {
           state = "action";
           mozL10nId += "-screensharing";
         } else if (aReason == "login" && this.MozLoopService.userProfile) {
           state = "active";
           mozL10nId += "-active";
           suffix += "2";
         } else if (this.MozLoopService.doNotDisturb) {
@@ -476,18 +539,98 @@ var WindowListener = {
         if (!this._listeningToTabSelect) {
           return;
         }
 
         this._hideBrowserSharingInfoBar();
         gBrowser.tabContainer.removeEventListener("TabSelect", this);
         gBrowser.removeEventListener("DOMTitleChanged", this);
         gBrowser.removeEventListener("mousemove", this);
+        this.removeRemoteCursor();
         this._listeningToTabSelect = false;
         this._browserSharePaused = false;
+        this._sendTelemetryEventsIfNeeded();
+      },
+
+      /**
+       * Sends telemetry events for pause/ resume buttons if needed.
+       */
+      _sendTelemetryEventsIfNeeded: function() {
+        // The user can't click Resume button without clicking Pause button first.
+        if (!this._pauseButtonClicked) {
+          return;
+        }
+
+        let buckets = this.constants.SHARING_SCREEN;
+        this.LoopAPI.sendMessageToHandler({
+          name: "TelemetryAddValue",
+          data: [
+            "LOOP_INFOBAR_ACTION_BUTTONS",
+            buckets.PAUSED
+          ]
+        });
+
+        if (this._resumeButtonClicked) {
+          this.LoopAPI.sendMessageToHandler({
+            name: "TelemetryAddValue",
+            data: [
+              "LOOP_INFOBAR_ACTION_BUTTONS",
+              buckets.RESUMED
+            ]
+          });
+        }
+
+        this._pauseButtonClicked = false;
+        this._resumeButtonClicked = false;
+      },
+
+      /**
+       *  If sharing is active, paints and positions the remote cursor
+       *  over the screen
+       *
+       *  @param cursorData Object with the correct position for the cursor
+       *                    {
+       *                      ratioX: position on the X axis (percentage value)
+       *                      ratioY: position on the Y axis (percentage value)
+       *                    }
+       */
+      addRemoteCursor: function(cursorData) {
+        if (!this._listeningToTabSelect) {
+          return;
+        }
+
+        let browser = gBrowser.selectedBrowser;
+
+        let cursor = document.getElementById("loop-remote-cursor");
+        if (!cursor) {
+          cursor = document.createElement("image");
+          cursor.setAttribute("id", "loop-remote-cursor");
+        }
+
+        // Update the cursor's position.
+        cursor.setAttribute("left",
+                            cursorData.ratioX * browser.boxObject.width);
+        cursor.setAttribute("top",
+                            cursorData.ratioY * browser.boxObject.height);
+
+        // browser's parent is a xul:stack, so positioning with left/top works.
+        browser.parentNode.appendChild(cursor);
+      },
+
+      /**
+       *  Removes the remote cursor from the screen
+       *
+       *  @param browser OPT browser where the cursor should be removed from.
+       */
+      removeRemoteCursor: function() {
+        let cursor = document.getElementById("loop-remote-cursor");
+
+        if (cursor) {
+          cursor.parentNode.removeChild(cursor);
+        }
       },
 
       /**
        * Helper function to fetch a localized string via the MozLoopService API.
        * It's currently inconveniently wrapped inside a string of stringified JSON.
        *
        * @param  {String} key The element id to get strings for.
        * @return {String}
@@ -534,16 +677,21 @@ var WindowListener = {
             callback: (event, buttonInfo, buttonNode) => {
               this._browserSharePaused = !this._browserSharePaused;
               let stringObj = this._browserSharePaused ? pausedStrings : unpausedStrings;
               bar.label = stringObj.message;
               bar.classList.toggle("paused", this._browserSharePaused);
               buttonNode.label = stringObj.label;
               buttonNode.accessKey = stringObj.accesskey;
               LoopUI.MozLoopService.toggleBrowserSharing(this._browserSharePaused);
+              if (this._browserSharePaused) {
+                this._pauseButtonClicked = true;
+              } else {
+                this._resumeButtonClicked = true;
+              }
               return true;
             },
             type: "pause"
           },
           {
             label: this._getString("infobar_button_disconnect_label"),
             accessKey: this._getString("infobar_button_disconnect_accesskey"),
             isDefault: true,
@@ -600,17 +748,20 @@ var WindowListener = {
           case "DOMTitleChanged":
             // Get the new title of the shared tab
             this._notifyBrowserSwitch();
             break;
           case "TabSelect":
             let wasVisible = false;
             // Hide the infobar from the previous tab.
             if (event.detail.previousTab) {
-              wasVisible = this._hideBrowserSharingInfoBar(event.detail.previousTab.linkedBrowser);
+              wasVisible = this._hideBrowserSharingInfoBar(
+                            event.detail.previousTab.linkedBrowser);
+              // And remove the cursor.
+              this.removeRemoteCursor();
             }
 
             // We've changed the tab, so get the new window id.
             this._notifyBrowserSwitch();
 
             if (wasVisible) {
               // If the infobar was visible before, we should show it again after the
               // switch.
@@ -708,20 +859,28 @@ var WindowListener = {
     XPCOMUtils.defineLazyModuleGetter(LoopUI, "MozLoopService", "chrome://loop/content/modules/MozLoopService.jsm");
     XPCOMUtils.defineLazyModuleGetter(LoopUI, "PanelFrame", "resource:///modules/PanelFrame.jsm");
     XPCOMUtils.defineLazyModuleGetter(LoopUI, "PlacesUtils", "resource://gre/modules/PlacesUtils.jsm");
 
     LoopUI.init();
     window.LoopUI = LoopUI;
   },
 
-  tearDownBrowserUI: function() {
-    // Take any steps to remove UI or anything from the browser window
-    // document.getElementById() etc. will work here
-    // XXX Add in tear-down of the panel.
+  /**
+   * Take any steps to remove UI or anything from the browser window
+   * document.getElementById() etc. will work here.
+   *
+   * @param {Object} window The window to remove the integration from.
+   */
+  tearDownBrowserUI: function(window) {
+    if (window.LoopUI) {
+      window.LoopUI.removeMenuItem();
+
+      // XXX Bug 1229352 - Add in tear-down of the panel.
+    }
   },
 
   // nsIWindowMediatorListener functions.
   onOpenWindow: function(xulWindow) {
     // A new window has opened.
     let domWindow = xulWindow.QueryInterface(Ci.nsIInterfaceRequestor)
                              .getInterface(Ci.nsIDOMWindow);
 
@@ -810,17 +969,20 @@ function loadDefaultPrefs() {
       }
     }
   });
 }
 
 /**
  * Called when the add-on is started, e.g. when installed or when Firefox starts.
  */
-function startup() {
+function startup(data) {
+  // Record the add-on version for when the UI is initialised.
+  WindowListener.addonVersion = data.version;
+
   loadDefaultPrefs();
 
   createLoopButton();
 
   // Attach to hidden window (for OS X).
   if (AppConstants.platform == "macosx") {
     try {
       WindowListener.setupBrowserUI(Services.appShell.hiddenDOMWindow);
--- a/browser/extensions/loop/chrome/content/modules/LoopRooms.jsm
+++ b/browser/extensions/loop/chrome/content/modules/LoopRooms.jsm
@@ -17,19 +17,16 @@ XPCOMUtils.defineLazyModuleGetter(this, 
                                   "resource://services-common/utils.js");
 XPCOMUtils.defineLazyModuleGetter(this, "WebChannel",
                                   "resource://gre/modules/WebChannel.jsm");
 
 XPCOMUtils.defineLazyGetter(this, "eventEmitter", function() {
   const { EventEmitter } = Cu.import("resource://devtools/shared/event-emitter.js", {});
   return new EventEmitter();
 });
-XPCOMUtils.defineLazyGetter(this, "gLoopBundle", function() {
-  return Services.strings.createBundle("chrome://loop/locale/loop.properties");
-});
 
 XPCOMUtils.defineLazyModuleGetter(this, "LoopRoomsCache",
   "chrome://loop/content/modules/LoopRoomsCache.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "loopUtils",
   "chrome://loop/content/modules/utils.js", "utils");
 XPCOMUtils.defineLazyModuleGetter(this, "loopCrypto",
   "chrome://loop/content/shared/js/crypto.js", "LoopCrypto");
 XPCOMUtils.defineLazyModuleGetter(this, "ObjectUtils",
@@ -767,29 +764,23 @@ var LoopRoomsInternal = {
       callback(null, joinData);
     }, error => callback(error)).catch(error => callback(error));
   },
 
   /**
    * Joins a room. The sessionToken that is returned by the server will be stored
    * locally, for future use.
    *
-   * @param {String} roomToken  The room token.
-   * @param {Function} callback Function that will be invoked once the operation
-   *                            finished. The first argument passed will be an
-   *                            `Error` object or `null`.
+   * @param {String} roomToken   The room token.
+   * @param {String} displayName The user's display name.
+   * @param {Function} callback  Function that will be invoked once the operation
+   *                             finished. The first argument passed will be an
+   *                             `Error` object or `null`.
    */
-  join: function(roomToken, callback) {
-    let displayName;
-    if (MozLoopService.userProfile && MozLoopService.userProfile.email) {
-      displayName = MozLoopService.userProfile.email;
-    } else {
-      displayName = gLoopBundle.GetStringFromName("display_name_guest");
-    }
-
+  join: function(roomToken, displayName, callback) {
     this._postToRoom(roomToken, {
       action: "join",
       displayName: displayName,
       clientMaxSize: CLIENT_MAX_SIZE
     }, callback);
   },
 
   /**
@@ -1062,18 +1053,18 @@ this.LoopRooms = {
   open: function(roomToken) {
     return LoopRoomsInternal.open(roomToken);
   },
 
   delete: function(roomToken, callback) {
     return LoopRoomsInternal.delete(roomToken, callback);
   },
 
-  join: function(roomToken, callback) {
-    return LoopRoomsInternal.join(roomToken, callback);
+  join: function(roomToken, displayName, callback) {
+    return LoopRoomsInternal.join(roomToken, displayName, callback);
   },
 
   refreshMembership: function(roomToken, sessionToken, callback) {
     return LoopRoomsInternal.refreshMembership(roomToken, sessionToken,
       callback);
   },
 
   leave: function(roomToken, sessionToken, callback) {
--- a/browser/extensions/loop/chrome/content/modules/MozLoopAPI.jsm
+++ b/browser/extensions/loop/chrome/content/modules/MozLoopAPI.jsm
@@ -133,16 +133,22 @@ var gSocialProviders = null;
 var gStringBundle = null;
 var gStubbedMessageHandlers = null;
 const kBatchMessage = "Batch";
 const kMaxLoopCount = 10;
 const kMessageName = "Loop:Message";
 const kPushMessageName = "Loop:Message:Push";
 const kPushSubscription = "pushSubscription";
 const kRoomsPushPrefix = "Rooms:";
+const kMauPrefMap = new Map(
+  Object.getOwnPropertyNames(LOOP_MAU_TYPE).map(name => {
+    let parts = name.toLowerCase().split("_");
+    return [LOOP_MAU_TYPE[name], parts[0] + parts[1].charAt(0).toUpperCase() + parts[1].substr(1)];
+  })
+);
 const kMessageHandlers = {
   /**
    * Start browser sharing, which basically means to start listening for tab
    * switches and passing the new window ID to the sender whenever that happens.
    *
    * @param {Object}   message Message meant for the handler function, containing
    *                           the following parameters in its `data` property:
    *                           [
@@ -181,16 +187,40 @@ const kMessageHandlers = {
     NewTabURL.override("about:home");
 
     gBrowserSharingWindows.add(Cu.getWeakReference(win));
     gBrowserSharingListeners.add(windowId);
     reply();
   },
 
   /**
+   * Creates a layout for the remote cursor on the browser chrome,
+   * and positions it on the received coordinates.
+   *
+   * @param {Object}  message Message meant for the handler function, containing
+   *                          the following parameters in its 'data' property:
+   *                          {
+   *                            ratioX: cursor's X position (between 0-1)
+   *                            ratioY: cursor's Y position (between 0-1)
+   *                          }
+   *
+   * @param {Function} reply  Callback function, invoked with the result of the
+   *                          message handler. The result will be sent back to
+   *                          the senders' channel.
+   */
+  AddRemoteCursorOverlay: function(message, reply) {
+    let win = Services.wm.getMostRecentWindow("navigator:browser");
+    if (win) {
+      win.LoopUI.addRemoteCursor(message.data[0]);
+    }
+
+    reply();
+  },
+
+  /**
    * Associates a session-id and a call-id with a window for debugging.
    *
    * @param {Object}   message Message meant for the handler function, containing
    *                           the following parameters in its `data` property:
    *                           [
    *                             {String} windowId  The window id.
    *                             {String} sessionId OT session id.
    *                             {String} callId    The callId on the server.
@@ -361,19 +391,21 @@ const kMessageHandlers = {
    *                           [ ]
    * @param {Function} reply   Callback function, invoked with the result of this
    *                           message handler. The result will be sent back to
    *                           the senders' channel.
    */
   GetAllConstants: function(message, reply) {
     reply({
       LOOP_SESSION_TYPE: LOOP_SESSION_TYPE,
+      LOOP_MAU_TYPE: LOOP_MAU_TYPE,
       ROOM_CREATE: ROOM_CREATE,
       ROOM_DELETE: ROOM_DELETE,
       SHARING_ROOM_URL: SHARING_ROOM_URL,
+      SHARING_SCREEN: SHARING_SCREEN,
       TWO_WAY_MEDIA_CONN_LENGTH: TWO_WAY_MEDIA_CONN_LENGTH
     });
   },
 
   /**
    * Returns the app version information for use during feedback.
    *
    * @param {Object}   message Message meant for the handler function, containing
@@ -774,26 +806,23 @@ const kMessageHandlers = {
     reply();
   },
 
   /**
    * Opens the Getting Started tour in the browser.
    *
    * @param {Object}   message Message meant for the handler function, containing
    *                           the following parameters in its `data` property:
-   *                           [
-   *                             {String} src Origin that starts or resumes the tour
-   *                           ]
+   *                           []
    * @param {Function} reply   Callback function, invoked with the result of this
    *                           message handler. The result will be sent back to
    *                           the senders' channel.
    */
   OpenGettingStartedTour: function(message, reply) {
-    var src = message.data[0];
-    MozLoopService.openGettingStartedTour(src);
+    MozLoopService.openGettingStartedTour();
     reply();
   },
 
   /**
    * Open the FxA profile/ settings page.
    *
    * @param {Object}   message Message meant for the handler function, containing
    *                           the following parameters in its `data` property:
@@ -996,17 +1025,40 @@ const kMessageHandlers = {
    *                                                   in the histogram.
    *                           ]
    * @param {Function} reply   Callback function, invoked with the result of this
    *                           message handler. The result will be sent back to
    *                           the senders' channel.
    */
   TelemetryAddValue: function(message, reply) {
     let [histogramId, value] = message.data;
-    Services.telemetry.getHistogramById(histogramId).add(value);
+
+    if (histogramId === "LOOP_MAU") {
+      let pref = "mau." + kMauPrefMap.get(value);
+      let prefDate = MozLoopService.getLoopPref(pref) * 1000;
+      let delta = Date.now() - prefDate;
+
+      // Send telemetry event if period (30 days) passed.
+      // 0 is default value for pref.
+      // 2592000 seconds in 30 days
+      if (pref === 0 || delta >= 2592000 * 1000) {
+        try {
+          Services.telemetry.getHistogramById(histogramId).add(value);
+        } catch (ex) {
+          MozLoopService.log.error("TelemetryAddValue failed for histogram '" + histogramId + "'", ex);
+        }
+        MozLoopService.setLoopPref(pref, Math.floor(Date.now() / 1000));
+      }
+    } else {
+      try {
+        Services.telemetry.getHistogramById(histogramId).add(value);
+      } catch (ex) {
+        MozLoopService.log.error("TelemetryAddValue failed for histogram '" + histogramId + "'", ex);
+      }
+    }
     reply();
   }
 };
 
 const LoopAPIInternal = {
   /**
    * Initialize the Loop API, which means:
    * 1) setup RemotePageManager to hook into loop documents as channels and
@@ -1015,17 +1067,21 @@ const LoopAPIInternal = {
    */
   initialize: function() {
     if (gPageListeners) {
       return;
     }
 
     Cu.import("resource://gre/modules/RemotePageManager.jsm");
 
-    gPageListeners = [new RemotePages("about:looppanel"), new RemotePages("about:loopconversation")];
+    gPageListeners = [new RemotePages("about:looppanel"),
+      new RemotePages("about:loopconversation"),
+      // Slideshow added here to expose the loop api to make L10n work.
+      // XXX Can remove once slideshow is made remote.
+      new RemotePages("chrome://loop/content/panels/slideshow.html")];
     for (let page of gPageListeners) {
       page.addMessageListener(kMessageName, this.handleMessage.bind(this));
     }
 
     // Subscribe to global events:
     Services.obs.addObserver(this.handleStatusChanged, "loop-status-changed", false);
   },
 
--- a/browser/extensions/loop/chrome/content/modules/MozLoopService.jsm
+++ b/browser/extensions/loop/chrome/content/modules/MozLoopService.jsm
@@ -54,16 +54,40 @@ const ROOM_CREATE = {
  *
  * @type {{DELETE_SUCCESS: Number, DELETE_FAIL: Number}}
  */
 const ROOM_DELETE = {
   DELETE_SUCCESS: 0,
   DELETE_FAIL: 1
 };
 
+/**
+ * Values that we segment sharing screen pause/ resume action telemetry probes into.
+ *
+ * @type {{PAUSED: Number, RESUMED: Number}}
+ */
+const SHARING_SCREEN = {
+  PAUSED: 0,
+  RESUMED: 1
+};
+
+ /**
+ * Values that we segment MAUs telemetry probes into.
+ *
+ * @type {{OPEN_PANEL: Number, OPEN_CONVERSATION: Number,
+ *        ROOM_OPEN: Number, ROOM_SHARE: Number, ROOM_DELETE: Number}}
+ */
+const LOOP_MAU_TYPE = {
+  OPEN_PANEL: 0,
+  OPEN_CONVERSATION: 1,
+  ROOM_OPEN: 2,
+  ROOM_SHARE: 3,
+  ROOM_DELETE: 4
+};
+
 // See LOG_LEVELS in Console.jsm. Common examples: "All", "Info", "Warn", & "Error".
 const PREF_LOG_LEVEL = "loop.debug.loglevel";
 
 const kChatboxHangupButton = {
   id: "loop-hangup",
   visibleWhenUndocked: false,
   onCommand: function(e, chatbox) {
     let mm = chatbox.content.messageManager;
@@ -76,24 +100,27 @@ Cu.import("resource://gre/modules/XPCOMU
 Cu.import("resource://gre/modules/Promise.jsm");
 Cu.import("resource://gre/modules/osfile.jsm", this);
 Cu.import("resource://gre/modules/Task.jsm");
 Cu.import("resource://gre/modules/Timer.jsm");
 Cu.import("resource://gre/modules/FxAccountsOAuthClient.jsm");
 
 Cu.importGlobalProperties(["URL"]);
 
-this.EXPORTED_SYMBOLS = ["MozLoopService", "LOOP_SESSION_TYPE",
-  "TWO_WAY_MEDIA_CONN_LENGTH", "SHARING_ROOM_URL", "ROOM_CREATE", "ROOM_DELETE"];
+this.EXPORTED_SYMBOLS = ["MozLoopService", "LOOP_SESSION_TYPE", "LOOP_MAU_TYPE",
+  "TWO_WAY_MEDIA_CONN_LENGTH", "SHARING_ROOM_URL", "SHARING_SCREEN",
+  "ROOM_CREATE", "ROOM_DELETE"];
 
 XPCOMUtils.defineConstant(this, "LOOP_SESSION_TYPE", LOOP_SESSION_TYPE);
 XPCOMUtils.defineConstant(this, "TWO_WAY_MEDIA_CONN_LENGTH", TWO_WAY_MEDIA_CONN_LENGTH);
 XPCOMUtils.defineConstant(this, "SHARING_ROOM_URL", SHARING_ROOM_URL);
+XPCOMUtils.defineConstant(this, "SHARING_SCREEN", SHARING_SCREEN);
 XPCOMUtils.defineConstant(this, "ROOM_CREATE", ROOM_CREATE);
 XPCOMUtils.defineConstant(this, "ROOM_DELETE", ROOM_DELETE);
+XPCOMUtils.defineConstant(this, "LOOP_MAU_TYPE", LOOP_MAU_TYPE);
 
 XPCOMUtils.defineLazyModuleGetter(this, "LoopAPI",
   "chrome://loop/content/modules/MozLoopAPI.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "convertToRTCStatsReport",
   "resource://gre/modules/media/RTCStatsReport.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "loopUtils",
   "chrome://loop/content/modules/utils.js", "utils");
@@ -112,19 +139,16 @@ XPCOMUtils.defineLazyModuleGetter(this, 
                                   "resource://gre/modules/FxAccountsProfileClient.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "HawkClient",
                                   "resource://services-common/hawkclient.js");
 
 XPCOMUtils.defineLazyModuleGetter(this, "deriveHawkCredentials",
                                   "resource://services-common/hawkrequest.js");
 
-XPCOMUtils.defineLazyModuleGetter(this, "hookWindowCloseForPanelClose",
-                                  "resource://gre/modules/MozSocialAPI.jsm");
-
 XPCOMUtils.defineLazyModuleGetter(this, "LoopRooms",
                                   "chrome://loop/content/modules/LoopRooms.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "roomsPushNotification",
                                   "chrome://loop/content/modules/LoopRooms.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "MozLoopPushHandler",
                                   "chrome://loop/content/modules/MozLoopPushHandler.jsm");
@@ -166,16 +190,17 @@ function getJSONPref(aName) {
 
 var gHawkClient = null;
 var gLocalizedStrings = new Map();
 var gFxAEnabled = true;
 var gFxAOAuthClientPromise = null;
 var gFxAOAuthClient = null;
 var gErrors = new Map();
 var gConversationWindowData = new Map();
+var gAddonVersion = "unknown";
 
 /**
  * Internal helper methods and state
  *
  * The registration is a two-part process. First we need to connect to
  * and register with the push server. Then we need to take the result of that
  * and register with the Loop server.
  */
@@ -609,17 +634,21 @@ var MozLoopServiceInternal = {
           this.setError("login", error);
           throw error;
         });
       }
       this.setError("registration", error);
       throw error;
     };
 
-    return gHawkClient.request(path, method, credentials, payloadObj).then(
+    var extraHeaders = {
+      "x-loop-addon-ver": gAddonVersion
+    };
+
+    return gHawkClient.request(path, method, credentials, payloadObj, extraHeaders).then(
       (result) => {
         this.clearError("network");
         return result;
       },
       (error) => {
       if (error.code && error.code == 401) {
         this.clearSessionToken(sessionType);
         if (retryOn401 && sessionType === LOOP_SESSION_TYPE.GUEST) {
@@ -899,167 +928,184 @@ var MozLoopServiceInternal = {
 
   /**
    * Opens the chat window
    *
    * @param {Object} conversationWindowData The data to be obtained by the
    *                                        window when it opens.
    * @param {Function} windowCloseCallback  Callback function that's invoked
    *                                        when the window closes.
-   * @returns {Number} The id of the window, null if a window could not
-   *                   be opened.
+   * @returns {Promise} That is resolved with the id of the window, null if a
+   *                    window could not be opened.
    */
   openChatWindow: function(conversationWindowData, windowCloseCallback) {
-    // So I guess the origin is the loop server!?
-    let origin = this.loopServerUri;
-    let windowId = this.getChatWindowID(conversationWindowData);
+    return new Promise(resolve => {
+      // So I guess the origin is the loop server!?
+      let origin = this.loopServerUri;
+      let windowId = this.getChatWindowID(conversationWindowData);
+
+      gConversationWindowData.set(windowId, conversationWindowData);
+
+      let url = this.getChatURL(windowId);
+
+      Chat.registerButton(kChatboxHangupButton);
+
+      let callback = chatbox => {
+        let mm = chatbox.content.messageManager;
 
-    gConversationWindowData.set(windowId, conversationWindowData);
+        let loaded = () => {
+          mm.removeMessageListener("DOMContentLoaded", loaded);
+          mm.sendAsyncMessage("Social:ListenForEvents", {
+            eventNames: ["LoopChatEnabled", "LoopChatMessageAppended",
+              "LoopChatDisabledMessageAppended", "socialFrameAttached",
+              "socialFrameDetached", "socialFrameHide", "socialFrameShow"]
+          });
+
+          const kEventNamesMap = {
+            socialFrameAttached: "Loop:ChatWindowAttached",
+            socialFrameDetached: "Loop:ChatWindowDetached",
+            socialFrameHide: "Loop:ChatWindowHidden",
+            socialFrameShow: "Loop:ChatWindowShown",
+            unload: "Loop:ChatWindowClosed"
+          };
 
-    let url = this.getChatURL(windowId);
+          const kSizeMap = {
+            LoopChatEnabled: "loopChatEnabled",
+            LoopChatDisabledMessageAppended: "loopChatDisabledMessageAppended",
+            LoopChatMessageAppended: "loopChatMessageAppended"
+          };
+
+          let listeners = {};
+
+          let messageName = "Social:CustomEvent";
+          mm.addMessageListener(messageName, listeners[messageName] = message => {
+            let eventName = message.data.name;
+            if (kEventNamesMap[eventName]) {
+              eventName = kEventNamesMap[eventName];
 
-    Chat.registerButton(kChatboxHangupButton);
+              UITour.clearAvailableTargetsCache();
+              UITour.notify(eventName);
+            } else {
+              // When the chat box or messages are shown, resize the panel or window
+              // to be slightly higher to accomodate them.
+              let customSize = kSizeMap[eventName];
+              let currSize = chatbox.getAttribute("customSize");
+              // If the size is already at the requested one or at the maximum size
+              // already, don't do anything. Especially don't make it shrink.
+              if (customSize && currSize != customSize && currSize != "loopChatMessageAppended") {
+                chatbox.setAttribute("customSize", customSize);
+                chatbox.parentNode.setAttribute("customSize", customSize);
+              }
+            }
+          });
 
-    let callback = chatbox => {
-      let mm = chatbox.content.messageManager;
+          // Handle window.close correctly on the chatbox.
+          mm.sendAsyncMessage("Social:HookWindowCloseForPanelClose");
+          messageName = "DOMWindowClose";
+          mm.addMessageListener(messageName, listeners[messageName] = () => {
+            // Remove message listeners.
+            for (let name of Object.getOwnPropertyNames(listeners)) {
+              mm.removeMessageListener(name, listeners[name]);
+            }
+            listeners = {};
 
-      let loaded = () => {
-        mm.removeMessageListener("DOMContentLoaded", loaded);
-        mm.sendAsyncMessage("Social:ListenForEvents", {
-          eventNames: ["LoopChatEnabled", "LoopChatMessageAppended",
-            "LoopChatDisabledMessageAppended", "socialFrameAttached",
-            "socialFrameDetached", "socialFrameHide", "socialFrameShow"]
-        });
+            windowCloseCallback();
+
+            if (conversationWindowData.type == "room") {
+              // NOTE: if you add something here, please also consider if something
+              //       needs to be done on the content side as well (e.g.
+              //       activeRoomStore#windowUnload).
+              LoopAPI.sendMessageToHandler({
+                name: "HangupNow",
+                data: [conversationWindowData.roomToken, windowId]
+              });
+            }
+
+            chatbox.close();
+          });
 
-        let chatbar = chatbox.parentNode;
+          mm.sendAsyncMessage("Loop:MonitorPeerConnectionLifecycle");
+          messageName = "Loop:PeerConnectionLifecycleChange";
+          mm.addMessageListener(messageName, listeners[messageName] = message => {
+            // Chat Window Id, this is different that the internal winId
+            let chatWindowId = message.data.locationHash.slice(1);
+            var context = this.conversationContexts.get(chatWindowId);
+            var peerConnectionID = message.data.peerConnectionID;
+            var exists = peerConnectionID.match(/session=(\S+)/);
+            if (context && !exists) {
+              // Not ideal but insert our data amidst existing data like this:
+              // - 000 (id=00 url=http)
+              // + 000 (session=000 call=000 id=00 url=http)
+              var pair = peerConnectionID.split("(");
+              if (pair.length == 2) {
+                peerConnectionID = pair[0] + "(session=" + context.sessionId +
+                    (context.callId ? " call=" + context.callId : "") + " " + pair[1];
+              }
+            }
 
-        const kEventNamesMap = {
-          socialFrameAttached: "Loop:ChatWindowAttached",
-          socialFrameDetached: "Loop:ChatWindowDetached",
-          socialFrameHide: "Loop:ChatWindowHidden",
-          socialFrameShow: "Loop:ChatWindowShown",
-          unload: "Loop:ChatWindowClosed"
-        };
+            if (message.data.type == "iceconnectionstatechange") {
+              switch (message.data.iceConnectionState) {
+                case "failed":
+                case "disconnected":
+                  if (Services.telemetry.canRecordExtended) {
+                    this.stageForTelemetryUpload(chatbox.content, message.data);
+                  }
+                  break;
+              }
+            }
+          });
 
-        const kSizeMap = {
-          LoopChatEnabled: "loopChatEnabled",
-          LoopChatDisabledMessageAppended: "loopChatDisabledMessageAppended",
-          LoopChatMessageAppended: "loopChatMessageAppended"
+          // When a chat window is attached or detached, the docShells hosting
+          // about:loopconverstation is swapped to the newly created chat window.
+          // (Be it inside a popup or back inside a chatbox element attached to the
+          // chatbar.)
+          // Since a swapDocShells call does not swap the messageManager instances
+          // attached to a browser, we'll need to add the message listeners to
+          // the new messageManager. This is not a bug in swapDocShells, merely
+          // a design decision.
+          chatbox.content.addEventListener("SwapDocShells", function swapped(ev) {
+            chatbox.content.removeEventListener("SwapDocShells", swapped);
+
+            let otherBrowser = ev.detail;
+            chatbox = otherBrowser.ownerDocument.getBindingParent(otherBrowser);
+            mm = otherBrowser.messageManager;
+            otherBrowser.addEventListener("SwapDocShells", swapped);
+
+            for (let name of Object.getOwnPropertyNames(listeners)) {
+              mm.addMessageListener(name, listeners[name]);
+            }
+          });
+
+          UITour.notify("Loop:ChatWindowOpened");
+          resolve(windowId);
         };
 
-        let listeners = {};
-
-        let messageName = "Social:CustomEvent";
-        mm.addMessageListener(messageName, listeners[messageName] = message => {
-          let eventName = message.data.name;
-          if (kEventNamesMap[eventName]) {
-            eventName = kEventNamesMap[eventName];
-
-            UITour.clearAvailableTargetsCache();
-            UITour.notify(eventName);
-
-            if (eventName == "Loop:ChatWindowDetached" || eventName == "Loop:ChatWindowAttached") {
-              // After detach, re-attach of the chatbox, refresh its reference so
-              // we can keep using it here.
-              let ref = chatbar.chatboxForURL.get(chatbox.src);
-              chatbox = ref && ref.get() || chatbox;
-            }
-          } else {
-            // When the chat box or messages are shown, resize the panel or window
-            // to be slightly higher to accomodate them.
-            let customSize = kSizeMap[eventName];
-            let currSize = chatbox.getAttribute("customSize");
-            // If the size is already at the requested one or at the maximum size
-            // already, don't do anything. Especially don't make it shrink.
-            if (customSize && currSize != customSize && currSize != "loopChatMessageAppended") {
-              chatbox.setAttribute("customSize", customSize);
-              chatbox.parentNode.setAttribute("customSize", customSize);
-            }
-          }
-        });
-
-        // Handle window.close correctly on the chatbox.
-        hookWindowCloseForPanelClose(chatbox.content);
-        messageName = "DOMWindowClose";
-        mm.addMessageListener(messageName, listeners[messageName] = () => {
-          // Remove message listeners.
-          for (let name of Object.getOwnPropertyNames(listeners)) {
-            mm.removeMessageListener(name, listeners[name]);
-          }
-          listeners = {};
-
-          windowCloseCallback();
-
-          if (conversationWindowData.type == "room") {
-            // NOTE: if you add something here, please also consider if something
-            //       needs to be done on the content side as well (e.g.
-            //       activeRoomStore#windowUnload).
-            LoopAPI.sendMessageToHandler({
-              name: "HangupNow",
-              data: [conversationWindowData.roomToken, windowId]
-            });
-          }
-        });
-
-        mm.sendAsyncMessage("Loop:MonitorPeerConnectionLifecycle");
-        messageName = "Loop:PeerConnectionLifecycleChange";
-        mm.addMessageListener(messageName, listeners[messageName] = message => {
-          // Chat Window Id, this is different that the internal winId
-          let chatWindowId = message.data.locationHash.slice(1);
-          var context = this.conversationContexts.get(chatWindowId);
-          var peerConnectionID = message.data.peerConnectionID;
-          var exists = peerConnectionID.match(/session=(\S+)/);
-          if (context && !exists) {
-            // Not ideal but insert our data amidst existing data like this:
-            // - 000 (id=00 url=http)
-            // + 000 (session=000 call=000 id=00 url=http)
-            var pair = peerConnectionID.split("(");
-            if (pair.length == 2) {
-              peerConnectionID = pair[0] + "(session=" + context.sessionId +
-                  (context.callId ? " call=" + context.callId : "") + " " + pair[1];
-            }
-          }
-
-          if (message.data.type == "iceconnectionstatechange") {
-            switch (message.data.iceConnectionState) {
-              case "failed":
-              case "disconnected":
-                if (Services.telemetry.canRecordExtended) {
-                  this.stageForTelemetryUpload(chatbox.content, message.data);
-                }
-                break;
-            }
-          }
-        });
-
-        UITour.notify("Loop:ChatWindowOpened");
+        mm.sendAsyncMessage("WaitForDOMContentLoaded");
+        mm.addMessageListener("DOMContentLoaded", loaded);
       };
 
-      mm.sendAsyncMessage("WaitForDOMContentLoaded");
-      mm.addMessageListener("DOMContentLoaded", loaded);
-    };
-
-    LoopAPI.initialize();
-    let chatboxInstance = Chat.open(null, {
-      origin: origin,
-      title: "",
-      url: url,
-      remote: MozLoopService.getLoopPref("remote.autostart")
-    }, callback);
-    if (!chatboxInstance) {
-      return null;
-    // It's common for unit tests to overload Chat.open.
-    } else if (chatboxInstance.setAttribute) {
-      // Set properties that influence visual appearance of the chatbox right
-      // away to circumvent glitches.
-      chatboxInstance.setAttribute("customSize", "loopDefault");
-      chatboxInstance.parentNode.setAttribute("customSize", "loopDefault");
-      Chat.loadButtonSet(chatboxInstance, "minimize,swap," + kChatboxHangupButton.id);
-    }
-    return windowId;
+      LoopAPI.initialize();
+      let chatboxInstance = Chat.open(null, {
+        origin: origin,
+        title: "",
+        url: url,
+        remote: MozLoopService.getLoopPref("remote.autostart")
+      }, callback);
+      if (!chatboxInstance) {
+        resolve(null);
+      // It's common for unit tests to overload Chat.open.
+      } else if (chatboxInstance.setAttribute) {
+        // Set properties that influence visual appearance of the chatbox right
+        // away to circumvent glitches.
+        chatboxInstance.setAttribute("customSize", "loopDefault");
+        chatboxInstance.parentNode.setAttribute("customSize", "loopDefault");
+        Chat.loadButtonSet(chatboxInstance, "minimize,swap," + kChatboxHangupButton.id);
+        resolve(windowId);
+      }
+    });
   },
 
   /**
    * Fetch Firefox Accounts (FxA) OAuth parameters from the Loop Server.
    *
    * @return {Promise} resolved with the body of the hawk request for OAuth parameters.
    */
   promiseFxAOAuthParameters: function() {
@@ -1242,24 +1288,28 @@ this.MozLoopService = {
   },
 
   /**
    * Initialized the loop service, and starts registration with the
    * push and loop servers.
    *
    * Note: this returns a promise for unit test purposes.
    *
+   * @param {String} addonVersion The name of the add-on
+   *
    * @return {Promise}
    */
-  initialize: Task.async(function*() {
+  initialize: Task.async(function*(addonVersion) {
     // Ensure we don't setup things like listeners more than once.
     if (gServiceInitialized) {
       return Promise.resolve();
     }
 
+    gAddonVersion = addonVersion;
+
     gServiceInitialized = true;
 
     // Do this here, rather than immediately after definition, so that we can
     // stub out API functions for unit testing
     Object.freeze(this);
 
     // Initialise anything that needs it in rooms.
     LoopRooms.init();
@@ -1600,16 +1650,29 @@ this.MozLoopService = {
     try {
       return Services.prefs.getComplexValue("general.useragent.locale",
         Ci.nsISupportsString).data;
     } catch (ex) {
       return "en-US";
     }
   },
 
+  /*
+   * Returns current FTU version
+   *
+   * @return {Number}
+   *
+   * XXX must match number in panel.jsx; expose this via MozLoopAPI
+   * and kill that constant.
+   */
+   get FTU_VERSION()
+   {
+     return 2;
+   },
+
   /**
    * Set any preference under "loop.".
    *
    * @param {String} prefSuffix The name of the pref without the preceding "loop."
    * @param {*} value The value to set.
    * @param {Enum} prefType Type of preference, defined at Ci.nsIPrefBranch. Optional.
    *
    * Any errors thrown by the Mozilla pref API are logged to the console.
@@ -1863,30 +1926,75 @@ this.MozLoopService = {
       UITour.notify("Loop:IncomingConversation", {
         conversationOpen: aIncomingConversationState === "open"
       });
     }
   },
 
   /**
    * Opens the Getting Started tour in the browser.
-   *
-   * @param {String} [aSrc] A string representing the entry point to begin the tour, optional.
    */
-  openGettingStartedTour: Task.async(function(aSrc = null) {
-    try {
-      let url = this.getTourURL(aSrc);
-      let win = Services.wm.getMostRecentWindow("navigator:browser");
-      win.switchToTabHavingURI(url, true, {
-        ignoreFragment: true,
-        replaceQueryString: true
-      });
-    } catch (ex) {
-      log.error("Error opening Getting Started tour", ex);
+  openGettingStartedTour: Task.async(function() {
+    const kNSXUL = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+
+    // User will have _just_ clicked the tour menu item or the FTU
+    // button in the panel, (or else it wouldn't be visible), so...
+    let xulWin = Services.wm.getMostRecentWindow("navigator:browser");
+    let xulDoc = xulWin.document;
+
+    let box = xulDoc.createElementNS(kNSXUL, "box");
+    box.setAttribute("id", "loop-slideshow-container");
+
+    let appContent = xulDoc.getElementById("appcontent");
+    let tabBrowser = xulDoc.getElementById("content");
+    appContent.insertBefore(box, tabBrowser);
+
+    var xulBrowser = xulDoc.createElementNS(kNSXUL, "browser");
+    xulBrowser.setAttribute("id", "loop-slideshow-browser");
+    xulBrowser.setAttribute("flex", "1");
+    xulBrowser.setAttribute("type", "content");
+    box.appendChild(xulBrowser);
+
+    // Notify the UI, which has the side effect of disabling panel opening
+    // and updating the toolbar icon to visually indicate difference.
+    xulWin.LoopUI.isSlideshowOpen = true;
+
+    var removeSlideshow = function() {
+      try {
+        appContent.removeChild(box);
+      } catch (ex) {
+        log.error(ex);
+      }
+
+      this.setLoopPref("gettingStarted.latestFTUVersion", this.FTU_VERSION);
+
+      // Notify the UI, which has the side effect of re-enabling panel opening
+      // and updating the toolbar.
+      xulWin.LoopUI.isSlideshowOpen = false;
+
+      xulWin.removeEventListener("CloseSlideshow", removeSlideshow);
+
+      log.info("slideshow removed");
+    }.bind(this);
+
+    function xulLoadListener() {
+      xulBrowser.contentWindow.addEventListener("CloseSlideshow",
+        removeSlideshow);
+      log.info("CloseSlideshow handler added");
+
+      xulBrowser.removeEventListener("load", xulLoadListener, true);
     }
+
+    xulBrowser.addEventListener("load", xulLoadListener, true);
+
+    // XXX we are loading the slideshow page with chrome privs.
+    // To make this remote, we'll need to think through a better
+    // security model.
+    xulBrowser.setAttribute("src",
+      "chrome://loop/content/panels/slideshow.html");
   }),
 
   /**
    * Opens a URL in a new tab in the browser.
    *
    * @param {String} url The new url to open
    */
   openURL: function(url) {
--- a/browser/extensions/loop/chrome/content/panels/conversation.html
+++ b/browser/extensions/loop/chrome/content/panels/conversation.html
@@ -23,28 +23,32 @@
     <script type="text/javascript" src="shared/vendor/sdk.js"></script>
     <script type="text/javascript" src="shared/vendor/react.js"></script>
     <script type="text/javascript" src="shared/vendor/lodash.js"></script>
     <script type="text/javascript" src="shared/vendor/backbone.js"></script>
     <script type="text/javascript" src="shared/vendor/classnames.js"></script>
 
     <script type="text/javascript" src="shared/js/loopapi-client.js"></script>
     <script type="text/javascript" src="shared/js/utils.js"></script>
+    <script type="text/javascript" src="shared/js/urlRegExps.js"></script>
     <script type="text/javascript" src="shared/js/mixins.js"></script>
     <script type="text/javascript" src="shared/js/actions.js"></script>
     <script type="text/javascript" src="shared/js/validate.js"></script>
     <script type="text/javascript" src="shared/js/dispatcher.js"></script>
     <script type="text/javascript" src="shared/js/otSdkDriver.js"></script>
+
+    <!-- Stores need to be loaded before the views that uses them -->
     <script type="text/javascript" src="shared/js/store.js"></script>
+    <script type="text/javascript" src="panels/js/roomStore.js"></script>
     <script type="text/javascript" src="shared/js/activeRoomStore.js"></script>
+    <script type="text/javascript" src="panels/js/conversationAppStore.js"></script>
+    <script type="text/javascript" src="shared/js/textChatStore.js"></script>
+    <script type="text/javascript" src="shared/js/remoteCursorStore.js"></script>
+
+    <!-- Views -->
     <script type="text/javascript" src="shared/js/views.js"></script>
-    <script type="text/javascript" src="shared/js/textChatStore.js"></script>
     <script type="text/javascript" src="shared/js/textChatView.js"></script>
     <script type="text/javascript" src="shared/js/linkifiedTextView.js"></script>
-    <script type="text/javascript" src="shared/js/urlRegExps.js"></script>
-    <script type="text/javascript" src="panels/js/conversationAppStore.js"></script>
     <script type="text/javascript" src="panels/js/feedbackViews.js"></script>
-    <script type="text/javascript" src="panels/js/roomStore.js"></script>
-    <script type="text/javascript" src="shared/js/remoteCursorStore.js"></script>
     <script type="text/javascript" src="panels/js/roomViews.js"></script>
     <script type="text/javascript" src="panels/js/conversation.js"></script>
   </body>
 </html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/loop/chrome/content/panels/css/slideshow.css
@@ -0,0 +1,97 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+.slideshow {
+  -moz-user-select: none;
+  cursor: default;
+}
+
+/* slide content */
+.slide > div {
+  height: 100%;
+  width:  100%;
+}
+
+.slide-layout {
+  padding-top: 50px;
+  padding-left: 50px;
+  padding-bottom: 20px;
+  width: 600px;
+}
+
+.slide-layout > h2 {
+  font-family: sans-serif;
+  font-size: 3.0rem;
+  font-weight: 500;
+  white-space: normal;
+  color: #fff;
+  line-height: 3rem;
+  margin-bottom: 10px;
+}
+
+.slide-layout > .slide-text {
+  font-family: sans-serif;
+  font-size: 2.1rem;
+  font-weight: 300;
+  white-space: normal;
+  color: #fff;
+  line-height: 3.0rem;
+}
+
+.slide-layout > img {
+  display: block;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  border: none;
+  background-color: transparent;
+  background-repeat: no-repeat;
+  background-position: center;
+  padding: 0;
+  float: right;
+  margin-top: -20px;
+}
+
+.slide1 {
+  background: #06a6e0;
+}
+
+.slide1-image {
+  background-image: url(../../shared/img/firefox-hello_tour-slide-01.svg);
+  height: 260px;
+  width: 295px;
+  background-size: 310px 310px;
+}
+
+.slide2 {
+  background: #0183b2;
+}
+
+.slide2-image {
+  background-image: url(../../shared/img/firefox-hello_tour-slide-02.svg);
+  height: 245px;
+  width: 245px;
+  background-size: 320px 320px;
+}
+
+.slide3 {
+  background: #005da5;
+}
+
+.slide3-image {
+  background-image: url(../../shared/img/firefox-hello_tour-slide-03.svg);
+  height: 260px;
+  width: 260px;
+  background-size: 310px 310px;
+}
+
+.slide4 {
+  background: #7ec24c;
+}
+
+.slide4-image {
+  background-image: url(../../shared/img/firefox-hello_tour-slide-04.svg);
+  height: 240px;
+  width: 240px;
+  background-size: 320px 320px;
+}
--- a/browser/extensions/loop/chrome/content/panels/js/conversation.js
+++ b/browser/extensions/loop/chrome/content/panels/js/conversation.js
@@ -19,20 +19,29 @@ loop.conversation = function (mozL10n) {
    * in progress, and hence, which view to display.
    */
   var AppControllerView = React.createClass({
     displayName: "AppControllerView",
 
     mixins: [Backbone.Events, loop.store.StoreMixin("conversationAppStore"), sharedMixins.DocumentTitleMixin, sharedMixins.WindowCloseMixin],
 
     propTypes: {
+      cursorStore: React.PropTypes.instanceOf(loop.store.RemoteCursorStore).isRequired,
       dispatcher: React.PropTypes.instanceOf(loop.Dispatcher).isRequired,
       roomStore: React.PropTypes.instanceOf(loop.store.RoomStore)
     },
 
+    componentWillMount: function () {
+      this.listenTo(this.props.cursorStore, "change:remoteCursorPosition", this._onRemoteCursorChange);
+    },
+
+    _onRemoteCursorChange: function () {
+      return loop.request("AddRemoteCursorOverlay", this.props.cursorStore.getStoreState("remoteCursorPosition"));
+    },
+
     getInitialState: function () {
       return this.getStoreState();
     },
 
     _renderFeedbackForm: function () {
       this.setTitle(mozL10n.get("conversation_has_ended"));
 
       return React.createElement(FeedbackView, {
@@ -61,16 +70,17 @@ loop.conversation = function (mozL10n) {
         return this._renderFeedbackForm();
       }
 
       switch (this.state.windowType) {
         case "room":
           {
             return React.createElement(DesktopRoomConversationView, {
               chatWindowDetached: this.state.chatWindowDetached,
+              cursorStore: this.props.cursorStore,
               dispatcher: this.props.dispatcher,
               facebookEnabled: this.state.facebookEnabled,
               onCallTerminated: this.handleCallTerminated,
               roomStore: this.props.roomStore });
           }
         case "failed":
           {
             return React.createElement(RoomFailureView, {
@@ -183,26 +193,29 @@ loop.conversation = function (mozL10n) {
 
       loop.store.StoreMixin.register({
         conversationAppStore: conversationAppStore,
         remoteCursorStore: remoteCursorStore,
         textChatStore: textChatStore
       });
 
       React.render(React.createElement(AppControllerView, {
+        cursorStore: remoteCursorStore,
         dispatcher: dispatcher,
         roomStore: roomStore }), document.querySelector("#main"));
 
       document.documentElement.setAttribute("lang", mozL10n.language.code);
       document.documentElement.setAttribute("dir", mozL10n.language.direction);
       document.body.setAttribute("platform", loop.shared.utils.getPlatform());
 
       dispatcher.dispatch(new sharedActions.GetWindowData({
         windowId: windowId
       }));
+
+      loop.request("TelemetryAddValue", "LOOP_MAU", constants.LOOP_MAU_TYPE.OPEN_CONVERSATION);
     });
   }
 
   return {
     AppControllerView: AppControllerView,
     init: init,
 
     /**
--- a/browser/extensions/loop/chrome/content/panels/js/panel.js
+++ b/browser/extensions/loop/chrome/content/panels/js/panel.js
@@ -7,28 +7,27 @@ loop.panel = function (_, mozL10n) {
   "use strict";
 
   var sharedViews = loop.shared.views;
   var sharedModels = loop.shared.models;
   var sharedMixins = loop.shared.mixins;
   var sharedActions = loop.shared.actions;
   var Button = sharedViews.Button;
 
-  var FTU_VERSION = 1;
+  // XXX This must be kept in sync with the number in MozLoopService.jsm.
+  // We should expose that one through MozLoopAPI and kill this constant.
+  var FTU_VERSION = 2;
 
   var GettingStartedView = React.createClass({
     displayName: "GettingStartedView",
 
     mixins: [sharedMixins.WindowCloseMixin],
 
     handleButtonClick: function () {
-      loop.requestMulti(["OpenGettingStartedTour", "getting-started"], ["SetLoopPref", "gettingStarted.latestFTUVersion", FTU_VERSION]).then(function () {
-        var event = new CustomEvent("GettingStartedSeen");
-        window.dispatchEvent(event);
-      }.bind(this));
+      loop.request("OpenGettingStartedTour");
       this.closeWindow();
     },
 
     render: function () {
       return React.createElement(
         "div",
         { className: "fte-get-started-content" },
         React.createElement(
@@ -287,17 +286,17 @@ loop.panel = function (_, mozL10n) {
       event.preventDefault();
       loop.request("GetLoopPref", "feedback.manualFormURL").then(function (helloFeedbackUrl) {
         loop.request("OpenURL", helloFeedbackUrl);
         this.closeWindow();
       }.bind(this));
     },
 
     openGettingStartedTour: function () {
-      loop.request("OpenGettingStartedTour", "settings-menu");
+      loop.request("OpenGettingStartedTour");
       this.closeWindow();
     },
 
     render: function () {
       var cx = classNames;
       var accountEntryCSSClass = this.state.signedIn ? "entry-settings-signout" : "entry-settings-signin";
       var notificationsLabel = this.state.doNotDisturb ? "settings_menu_item_turnnotificationson" : "settings_menu_item_turnnotificationsoff";
 
@@ -902,17 +901,16 @@ loop.panel = function (_, mozL10n) {
    * E10s not supported view
    */
   var E10sNotSupported = React.createClass({
     displayName: "E10sNotSupported",
 
     propTypes: {
       onClick: React.PropTypes.func.isRequired
     },
-
     componentWillMount: function () {
       loop.request("SetPanelHeight", 262);
     },
 
     render: function () {
       return React.createElement(
         "div",
         { className: "error-content" },
@@ -998,51 +996,55 @@ loop.panel = function (_, mozL10n) {
           });
         } else {
           this.props.notifications.remove(this.props.notifications.get("service-error"));
         }
       }.bind(this));
     },
 
     _onStatusChanged: function () {
-      loop.requestMulti(["GetUserProfile"], ["GetHasEncryptionKey"]).then(function (results) {
+      loop.requestMulti(["GetUserProfile"], ["GetHasEncryptionKey"], ["GetLoopPref", "gettingStarted.latestFTUVersion"]).then(function (results) {
         var profile = results[0];
         var hasEncryptionKey = results[1];
+        var prefFTUVersion = results[2];
+
+        var stateToUpdate = {};
+
+        // It's possible that this state change was slideshow related
+        // so update that if the pref has changed.
+        var prefGettingStartedSeen = prefFTUVersion >= FTU_VERSION;
+        if (prefGettingStartedSeen !== this.state.gettingStartedSeen) {
+          stateToUpdate.gettingStartedSeen = prefGettingStartedSeen;
+        }
+
         var currUid = this.state.userProfile ? this.state.userProfile.uid : null;
         var newUid = profile ? profile.uid : null;
         if (currUid === newUid) {
           // Update the state of hasEncryptionKey as this might have changed now.
-          this.setState({ hasEncryptionKey: hasEncryptionKey });
+          stateToUpdate.hasEncryptionKey = hasEncryptionKey;
         } else {
-          this.setState({ userProfile: profile });
+          stateToUpdate.userProfile = profile;
         }
+
+        this.setState(stateToUpdate);
+
         this.updateServiceErrors();
       }.bind(this));
     },
 
-    _gettingStartedSeen: function () {
-      loop.request("GetLoopPref", "gettingStarted.latestFTUVersion").then(function (result) {
-        this.setState({
-          gettingStartedSeen: result >= FTU_VERSION
-        });
-      }.bind(this));
-    },
-
     componentWillMount: function () {
       this.updateServiceErrors();
     },
 
     componentDidMount: function () {
       loop.subscribe("LoopStatusChanged", this._onStatusChanged);
-      window.addEventListener("GettingStartedSeen", this._gettingStartedSeen);
     },
 
     componentWillUnmount: function () {
       loop.unsubscribe("LoopStatusChanged", this._onStatusChanged);
-      window.removeEventListener("GettingStartedSeen", this._gettingStartedSeen);
     },
 
     handleContextMenu: function (e) {
       e.preventDefault();
     },
 
     launchNonE10sWindow: function () {
       loop.request("GetSelectedTabMetadata").then(function (metadata) {
--- a/browser/extensions/loop/chrome/content/panels/js/roomStore.js
+++ b/browser/extensions/loop/chrome/content/panels/js/roomStore.js
@@ -317,60 +317,83 @@ loop.store = loop.store || {};
         ["NotifyUITour", "Loop:RoomURLCopied"]);
 
       var from = actionData.from;
       var bucket = this._constants.SHARING_ROOM_URL["COPY_FROM_" + from.toUpperCase()];
       if (typeof bucket === "undefined") {
         console.error("No URL sharing type bucket found for '" + from + "'");
         return;
       }
-      loop.request("TelemetryAddValue", "LOOP_SHARING_ROOM_URL", bucket);
+      loop.requestMulti(
+        ["TelemetryAddValue", "LOOP_SHARING_ROOM_URL", bucket],
+        ["TelemetryAddValue", "LOOP_MAU", this._constants.LOOP_MAU_TYPE.ROOM_SHARE]
+      );
     },
 
     /**
      * Emails a room url.
      *
      * @param  {sharedActions.EmailRoomUrl} actionData The action data.
      */
     emailRoomUrl: function(actionData) {
       var from = actionData.from;
       loop.shared.utils.composeCallUrlEmail(actionData.roomUrl, null,
         actionData.roomDescription);
 
-      var bucket = this._constants.SHARING_ROOM_URL["EMAIL_FROM_" + (from || "").toUpperCase()];
+      var bucket = this._constants.SHARING_ROOM_URL[
+        "EMAIL_FROM_" + (from || "").toUpperCase()
+      ];
       if (typeof bucket === "undefined") {
         console.error("No URL sharing type bucket found for '" + from + "'");
         return;
       }
       loop.requestMulti(
         ["NotifyUITour", "Loop:RoomURLEmailed"],
-        ["TelemetryAddValue", "LOOP_SHARING_ROOM_URL", bucket]);
+        ["TelemetryAddValue", "LOOP_SHARING_ROOM_URL", bucket],
+        ["TelemetryAddValue", "LOOP_MAU", this._constants.LOOP_MAU_TYPE.ROOM_SHARE]
+      );
     },
 
     /**
      * Share a room url with Facebook
      *
      * @param  {sharedActions.FacebookShareRoomUrl} actionData The action data.
      */
     facebookShareRoomUrl: function(actionData) {
       var encodedRoom = encodeURIComponent(actionData.roomUrl);
-      loop.request("GetLoopPref", "facebook.shareUrl")
-        .then(shareUrl => {
-          loop.request("OpenURL", shareUrl.replace("%ROOM_URL%", encodedRoom));
-        }).then(() => {
-          loop.request("NotifyUITour", "Loop:RoomURLShared");
-        });
+
+      loop.requestMulti(
+        ["GetLoopPref", "facebook.appId"],
+        ["GetLoopPref", "facebook.fallbackUrl"],
+        ["GetLoopPref", "facebook.shareUrl"]
+      ).then(results => {
+        var app_id = results[0];
+        var fallback_url = results[1];
+        var redirect_url = encodeURIComponent(actionData.originUrl ||
+                                              fallback_url);
+
+        var finalURL = results[2].replace("%ROOM_URL%", encodedRoom)
+                                 .replace("%APP_ID%", app_id)
+                                 .replace("%REDIRECT_URI%", redirect_url);
+
+        return loop.request("OpenURL", finalURL);
+      }).then(() => {
+        loop.request("NotifyUITour", "Loop:RoomURLShared");
+      });
 
       var from = actionData.from;
       var bucket = this._constants.SHARING_ROOM_URL["FACEBOOK_FROM_" + from.toUpperCase()];
       if (typeof bucket === "undefined") {
         console.error("No URL sharing type bucket found for '" + from + "'");
         return;
       }
-      loop.request("TelemetryAddValue", "LOOP_SHARING_ROOM_URL", bucket);
+      loop.requestMulti(
+        ["TelemetryAddValue", "LOOP_SHARING_ROOM_URL", bucket],
+        ["TelemetryAddValue", "LOOP_MAU", this._constants.LOOP_MAU_TYPE.ROOM_SHARE]
+      );
     },
 
     /**
      * Share a room url.
      *
      * @param  {sharedActions.ShareRoomUrl} actionData The action data.
      */
     shareRoomUrl: function(actionData) {
@@ -414,18 +437,21 @@ loop.store = loop.store || {};
      */
     deleteRoom: function(actionData) {
       loop.request("Rooms:Delete", actionData.roomToken).then(function(result) {
         var isError = (result && result.isError);
         if (isError) {
           this.dispatchAction(new sharedActions.DeleteRoomError({ error: result }));
         }
         var buckets = this._constants.ROOM_DELETE;
-        loop.request("TelemetryAddValue", "LOOP_ROOM_DELETE", buckets[isError ?
-          "DELETE_FAIL" : "DELETE_SUCCESS"]);
+        loop.requestMulti(
+          ["TelemetryAddValue", "LOOP_ROOM_DELETE", buckets[isError ?
+            "DELETE_FAIL" : "DELETE_SUCCESS"]],
+          ["TelemetryAddValue", "LOOP_MAU", this._constants.LOOP_MAU_TYPE.ROOM_DELETE]
+        );
       }.bind(this));
     },
 
     /**
      * Executed when a room deletion error occurs.
      *
      * @param {sharedActions.DeleteRoomError} actionData The action data.
      */
@@ -478,17 +504,20 @@ loop.store = loop.store || {};
     },
 
     /**
      * Opens a room
      *
      * @param {sharedActions.OpenRoom} actionData The action data.
      */
     openRoom: function(actionData) {
-      loop.request("Rooms:Open", actionData.roomToken);
+      loop.requestMulti(
+        ["Rooms:Open", actionData.roomToken],
+        ["TelemetryAddValue", "LOOP_MAU", this._constants.LOOP_MAU_TYPE.ROOM_OPEN]
+      );
     },
 
     /**
      * Updates the context data attached to a room.
      *
      * @param {sharedActions.UpdateRoomContext} actionData
      */
     updateRoomContext: function(actionData) {
--- a/browser/extensions/loop/chrome/content/panels/js/roomViews.js
+++ b/browser/extensions/loop/chrome/content/panels/js/roomViews.js
@@ -241,17 +241,17 @@ loop.roomViews = function (mozL10n) {
 
   /**
    * Desktop room invitation view (overlay).
    */
   var DesktopRoomInvitationView = React.createClass({
     displayName: "DesktopRoomInvitationView",
 
     statics: {
-      TRIGGERED_RESET_DELAY: 2000
+      TRIGGERED_RESET_DELAY: 3000
     },
 
     mixins: [sharedMixins.DropdownMenuMixin(".room-invitation-overlay")],
 
     propTypes: {
       dispatcher: React.PropTypes.instanceOf(loop.Dispatcher).isRequired,
       error: React.PropTypes.object,
       facebookEnabled: React.PropTypes.bool.isRequired,
@@ -319,81 +319,92 @@ loop.roomViews = function (mozL10n) {
     },
 
     render: function () {
       if (!this.props.show || !this.props.roomData.roomUrl) {
         return null;
       }
 
       var cx = classNames;
+
       return React.createElement(
         "div",
         { className: "room-invitation-overlay" },
         React.createElement(
           "div",
           { className: "room-invitation-content" },
           React.createElement(
-            "p",
+            "div",
+            { className: "room-context-header" },
+            mozL10n.get("invite_header_text_bold2")
+          ),
+          React.createElement(
+            "div",
             null,
+            mozL10n.get("invite_header_text4")
+          )
+        ),
+        React.createElement(
+          "div",
+          { className: "input-button-group" },
+          React.createElement(
+            "div",
+            { className: "input-button-group-label" },
+            mozL10n.get("invite_your_link")
+          ),
+          React.createElement(
+            "div",
+            { className: "input-button-content" },
             React.createElement(
-              "span",
-              { className: "room-context-header" },
-              mozL10n.get("invite_header_text_bold")
+              "div",
+              { className: "input-group group-item-top" },
+              React.createElement("input", { readOnly: true, type: "text", value: this.props.roomData.roomUrl })
             ),
-            " ",
             React.createElement(
-              "span",
-              null,
-              mozL10n.get("invite_header_text3")
+              "div",
+              { className: cx({
+                  "group-item-bottom": true,
+                  "btn": true,
+                  "invite-button": true,
+                  "btn-copy": true,
+                  "triggered": this.state.copiedUrl
+                }),
+                onClick: this.handleCopyButtonClick },
+              mozL10n.get(this.state.copiedUrl ? "invite_copied_link_button" : "invite_copy_link_button")
             )
           )
         ),
         React.createElement(
           "div",
           { className: cx({
               "btn-group": true,
-              "call-action-group": true
+              "share-action-group": true
             }) },
           React.createElement(
             "div",
-            { className: cx({
-                "btn-copy": true,
-                "invite-button": true,
-                "triggered": this.state.copiedUrl
-              }),
-              onClick: this.handleCopyButtonClick },
-            React.createElement("img", { src: "shared/img/glyph-link-16x16.svg" }),
-            React.createElement(
-              "p",
-              null,
-              mozL10n.get(this.state.copiedUrl ? "invite_copied_link_button" : "invite_copy_link_button")
-            )
-          ),
-          React.createElement(
-            "div",
             { className: "btn-email invite-button",
               onClick: this.handleEmailButtonClick,
               onMouseOver: this.resetTriggeredButtons },
             React.createElement("img", { src: "shared/img/glyph-email-16x16.svg" }),
             React.createElement(
-              "p",
+              "div",
               null,
               mozL10n.get("invite_email_link_button")
             )
           ),
           (() => {
             if (this.props.facebookEnabled) {
               return React.createElement(
                 "div",
                 { className: "btn-facebook invite-button",
                   onClick: this.handleFacebookButtonClick,
                   onMouseOver: this.resetTriggeredButtons },
                 React.createElement("img", { src: "shared/img/glyph-facebook-16x16.svg" }),
                 React.createElement(
-                  "p",
+                  "div",
                   null,
                   mozL10n.get("invite_facebook_button3")
                 )
               );
             }
           })()
         ),
         React.createElement(SocialShareDropdown, {
@@ -411,16 +422,17 @@ loop.roomViews = function (mozL10n) {
    */
   var DesktopRoomConversationView = React.createClass({
     displayName: "DesktopRoomConversationView",
 
     mixins: [ActiveRoomStoreMixin, sharedMixins.DocumentTitleMixin, sharedMixins.MediaSetupMixin, sharedMixins.RoomsAudioMixin, sharedMixins.WindowCloseMixin],
 
     propTypes: {
       chatWindowDetached: React.PropTypes.bool.isRequired,
+      cursorStore: React.PropTypes.instanceOf(loop.store.RemoteCursorStore).isRequired,
       dispatcher: React.PropTypes.instanceOf(loop.Dispatcher).isRequired,
       facebookEnabled: React.PropTypes.bool.isRequired,
       // The poster URLs are for UI-showcase testing and development.
       localPosterUrl: React.PropTypes.string,
       onCallTerminated: React.PropTypes.func.isRequired,
       remotePosterUrl: React.PropTypes.string,
       roomStore: React.PropTypes.instanceOf(loop.store.RoomStore).isRequired
     },
@@ -450,29 +462,16 @@ loop.roomViews = function (mozL10n) {
       if (this.state.used) {
         this.props.dispatcher.dispatch(new sharedActions.LeaveRoom());
       } else {
         this.closeWindow();
       }
     },
 
     /**
-     * Used to control publishing a stream - i.e. to mute a stream
-     *
-     * @param {String} type The type of stream, e.g. "audio" or "video".
-     * @param {Boolean} enabled True to enable the stream, false otherwise.
-     */
-    publishStream: function (type, enabled) {
-      this.props.dispatcher.dispatch(new sharedActions.SetMute({
-        type: type,
-        enabled: enabled
-      }));
-    },
-
-    /**
      * Determine if the invitation controls should be shown.
      *
      * @return {Boolean} True if there's no guests.
      */
     _shouldRenderInvitationOverlay: function () {
       var hasGuests = typeof this.state.participants === "object" && this.state.participants.filter(function (participant) {
         return !participant.owner;
       }).length > 0;
@@ -591,16 +590,17 @@ loop.roomViews = function (mozL10n) {
           {
             return React.createElement(
               "div",
               { className: "room-conversation-wrapper desktop-room-wrapper",
                 onContextMenu: this.handleContextMenu },
               React.createElement(
                 sharedViews.MediaLayoutView,
                 {
+                  cursorStore: this.props.cursorStore,
                   dispatcher: this.props.dispatcher,
                   displayScreenShare: false,
                   isLocalLoading: this._isLocalLoading(),
                   isRemoteLoading: this._isRemoteLoading(),
                   isScreenShareLoading: false,
                   localPosterUrl: this.props.localPosterUrl,
                   localSrcMediaElement: this.state.localSrcMediaElement,
                   localVideoMuted: this.state.videoMuted,
@@ -611,17 +611,16 @@ loop.roomViews = function (mozL10n) {
                   screenShareMediaElement: this.state.screenShareMediaElement,
                   screenSharePosterUrl: null,
                   showInitialContext: false,
                   useDesktopPaths: true },
                 React.createElement(sharedViews.ConversationToolbar, {
                   audio: { enabled: !this.state.audioMuted, visible: true },
                   dispatcher: this.props.dispatcher,
                   hangup: this.leaveRoom,
-                  publishStream: this.publishStream,
                   showHangup: this.props.chatWindowDetached,
                   video: { enabled: !this.state.videoMuted, visible: true } }),
                 React.createElement(DesktopRoomInvitationView, {
                   dispatcher: this.props.dispatcher,
                   error: this.state.error,
                   facebookEnabled: this.props.facebookEnabled,
                   roomData: roomData,
                   show: shouldRenderInvitationOverlay,
new file mode 100644
--- /dev/null
+++ b/browser/extensions/loop/chrome/content/panels/js/slideshow.js
@@ -0,0 +1,81 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+var loop = loop || {};
+loop.slideshow = function (mozL10n) {
+  "use strict";
+
+  /**
+   * Slideshow initialisation.
+   */
+
+  function init() {
+    var requests = [["GetAllStrings"], ["GetLocale"], ["GetPluralRule"]];
+    return loop.requestMulti.apply(null, requests).then(function (results) {
+      // `requestIdx` is keyed off the order of the `requests`
+      // array. Be careful to update both when making changes.
+      var requestIdx = 0;
+      // Do the initial L10n setup, we do this before anything
+      // else to ensure the L10n environment is setup correctly.
+      var stringBundle = results[requestIdx];
+      var locale = results[++requestIdx];
+      var pluralRule = results[++requestIdx];
+      mozL10n.initialize({
+        locale: locale,
+        pluralRule: pluralRule,
+        getStrings: function (key) {
+          if (!(key in stringBundle)) {
+            return "{ textContent: '' }";
+          }
+
+          return JSON.stringify({
+            textContent: stringBundle[key]
+          });
+        }
+      });
+
+      document.documentElement.setAttribute("lang", mozL10n.language.code);
+      document.documentElement.setAttribute("dir", mozL10n.language.direction);
+      document.body.setAttribute("platform", loop.shared.utils.getPlatform());
+      var clientSuperShortname = mozL10n.get("clientSuperShortname");
+      var data = [{
+        id: "slide1",
+        imageClass: "slide1-image",
+        title: mozL10n.get("fte_slide_1_title"),
+        text: mozL10n.get("fte_slide_1_copy", {
+          clientShortname2: mozL10n.get("clientShortname2")
+        })
+      }, {
+        id: "slide2",
+        imageClass: "slide2-image",
+        title: mozL10n.get("fte_slide_2_title"),
+        text: mozL10n.get("fte_slide_2_copy")
+      }, {
+        id: "slide3",
+        imageClass: "slide3-image",
+        title: mozL10n.get("fte_slide_3_title"),
+        text: mozL10n.get("fte_slide_3_copy", {
+          clientSuperShortname: clientSuperShortname
+        })
+      }, {
+        id: "slide4",
+        imageClass: "slide4-image",
+        title: mozL10n.get("fte_slide_4_title", {
+          clientSuperShortname: clientSuperShortname
+        }),
+        text: mozL10n.get("fte_slide_4_copy", {
+          brandShortname: mozL10n.get("brandShortname")
+        })
+      }];
+
+      loop.SimpleSlideshow.init("#main", data);
+    });
+  }
+
+  return {
+    init: init
+  };
+}(document.mozL10n);
+
+document.addEventListener("DOMContentLoaded", loop.slideshow.init);
--- a/browser/extensions/loop/chrome/content/panels/panel.html
+++ b/browser/extensions/loop/chrome/content/panels/panel.html
@@ -19,19 +19,23 @@
     <script type="text/javascript" src="shared/vendor/lodash.js"></script>
     <script type="text/javascript" src="shared/vendor/backbone.js"></script>
     <script type="text/javascript" src="shared/vendor/classnames.js"></script>
 
     <script type="text/javascript" src="shared/js/loopapi-client.js"></script>
     <script type="text/javascript" src="shared/js/utils.js"></script>
     <script type="text/javascript" src="shared/js/models.js"></script>
     <script type="text/javascript" src="shared/js/mixins.js"></script>
+    <script type="text/javascript" src="shared/js/actions.js"></script>
+    <script type="text/javascript" src="shared/js/dispatcher.js"></script>
+
+    <!-- Stores need to be loaded before the views that uses them -->
     <script type="text/javascript" src="shared/js/store.js"></script>
+    <script type="text/javascript" src="panels/js/roomStore.js"></script>
     <script type="text/javascript" src="shared/js/activeRoomStore.js"></script>
     <script type="text/javascript" src="shared/js/remoteCursorStore.js"></script>
+
+    <!-- Views -->
     <script type="text/javascript" src="shared/js/views.js"></script>
     <script type="text/javascript" src="shared/js/validate.js"></script>
-    <script type="text/javascript" src="shared/js/actions.js"></script>
-    <script type="text/javascript" src="shared/js/dispatcher.js"></script>
-    <script type="text/javascript" src="panels/js/roomStore.js"></script>
     <script type="text/javascript" src="panels/js/panel.js"></script>
  </body>
 </html>
copy from browser/extensions/loop/chrome/content/panels/panel.html
copy to browser/extensions/loop/chrome/content/panels/slideshow.html
--- a/browser/extensions/loop/chrome/content/panels/panel.html
+++ b/browser/extensions/loop/chrome/content/panels/slideshow.html
@@ -3,35 +3,38 @@
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/.  -->
 <html>
   <head>
     <meta charset="utf-8">
     <base href="chrome://loop/content">
     <link rel="stylesheet" type="text/css" href="shared/css/reset.css">
     <link rel="stylesheet" type="text/css" href="shared/css/common.css">
-    <link rel="stylesheet" type="text/css" href="panels/css/panel.css">
+    <link rel="stylesheet" type="text/css" href="panels/vendor/simpleSlideshow.css">
+    <link rel="stylesheet" type="text/css" href="panels/css/slideshow.css">
   </head>
   <body class="panel">
 
     <div id="main"></div>
 
     <script type="text/javascript" src="panels/vendor/l10n.js"></script>
     <script type="text/javascript" src="shared/vendor/react.js"></script>
     <script type="text/javascript" src="shared/vendor/lodash.js"></script>
-    <script type="text/javascript" src="shared/vendor/backbone.js"></script>
-    <script type="text/javascript" src="shared/vendor/classnames.js"></script>
-
+    <script type="text/javascript" src="shared/js/utils.js"></script>
     <script type="text/javascript" src="shared/js/loopapi-client.js"></script>
-    <script type="text/javascript" src="shared/js/utils.js"></script>
-    <script type="text/javascript" src="shared/js/models.js"></script>
-    <script type="text/javascript" src="shared/js/mixins.js"></script>
-    <script type="text/javascript" src="shared/js/store.js"></script>
-    <script type="text/javascript" src="shared/js/activeRoomStore.js"></script>
-    <script type="text/javascript" src="shared/js/remoteCursorStore.js"></script>
-    <script type="text/javascript" src="shared/js/views.js"></script>
-    <script type="text/javascript" src="shared/js/validate.js"></script>
-    <script type="text/javascript" src="shared/js/actions.js"></script>
-    <script type="text/javascript" src="shared/js/dispatcher.js"></script>
-    <script type="text/javascript" src="panels/js/roomStore.js"></script>
-    <script type="text/javascript" src="panels/js/panel.js"></script>
+    <script type="text/javascript" src="shared/vendor/classnames.js"></script>
+    <script type="text/javascript" src="panels/vendor/simpleSlideshow.js"></script>
+    <script type="text/javascript" src="panels/js/slideshow.js"></script>
+
+    <script type="text/javascript">
+    function clickHandler() {
+      try {
+        var e = new CustomEvent("CloseSlideshow"); window.dispatchEvent(e);
+      } catch (ex) {
+        console.warn('CloseSlideshow dispatch exploded' + ex);
+      }
+
+      return;
+    }
+    </script>
+    <button onclick="clickHandler();" class="button-close" />
  </body>
 </html>
--- a/browser/extensions/loop/chrome/content/panels/test/conversation_test.js
+++ b/browser/extensions/loop/chrome/content/panels/test/conversation_test.js
@@ -4,23 +4,24 @@
 
 describe("loop.conversation", function() {
   "use strict";
 
   var FeedbackView = loop.feedbackViews.FeedbackView;
   var expect = chai.expect;
   var TestUtils = React.addons.TestUtils;
   var sharedActions = loop.shared.actions;
-  var fakeWindow, sandbox, setLoopPrefStub, mozL10nGet, remoteCursorStore, dispatcher;
+  var fakeWindow, sandbox, setLoopPrefStub, mozL10nGet,
+    remoteCursorStore, dispatcher, requestStubs;
 
   beforeEach(function() {
     sandbox = LoopMochaUtils.createSandbox();
     setLoopPrefStub = sandbox.stub();
 
-    LoopMochaUtils.stubLoopRequest({
+    LoopMochaUtils.stubLoopRequest(requestStubs = {
       GetDoNotDisturb: function() { return true; },
       GetAllStrings: function() {
         return JSON.stringify({ textContent: "fakeText" });
       },
       GetLocale: function() {
         return "en-US";
       },
       SetLoopPref: setLoopPrefStub,
@@ -33,16 +34,23 @@ describe("loop.conversation", function()
             return "http://fake";
         }
       },
       GetAllConstants: function() {
         return {
           LOOP_SESSION_TYPE: {
             GUEST: 1,
             FXA: 2
+          },
+          LOOP_MAU_TYPE: {
+            OPEN_PANEL: 0,
+            OPEN_CONVERSATION: 1,
+            ROOM_OPEN: 2,
+            ROOM_SHARE: 3,
+            ROOM_DELETE: 4
           }
         };
       },
       EnsureRegistered: sinon.stub(),
       GetAppVersionInfo: function() {
         return {
           version: "42",
           channel: "test",
@@ -52,17 +60,18 @@ describe("loop.conversation", function()
       GetAudioBlob: sinon.spy(function() {
         return new Blob([new ArrayBuffer(10)], { type: "audio/ogg" });
       }),
       GetSelectedTabMetadata: function() {
         return {};
       },
       GetConversationWindowData: function() {
         return {};
-      }
+      },
+      TelemetryAddValue: sinon.stub()
     });
 
     fakeWindow = {
       close: sinon.stub(),
       document: {},
       addEventListener: function() {},
       removeEventListener: function() {}
     };
@@ -139,57 +148,103 @@ describe("loop.conversation", function()
       loop.conversation.init();
 
       sinon.assert.calledOnce(loop.Dispatcher.prototype.dispatch);
       sinon.assert.calledWithExactly(loop.Dispatcher.prototype.dispatch,
         new loop.shared.actions.GetWindowData({
           windowId: "42"
         }));
     });
+
+    it("should log a telemetry event when opening the conversation window", function() {
+      var constants = requestStubs.GetAllConstants();
+      loop.conversation.init();
+
+      sinon.assert.calledOnce(requestStubs["TelemetryAddValue"]);
+      sinon.assert.calledWithExactly(requestStubs["TelemetryAddValue"],
+        "LOOP_MAU", constants.LOOP_MAU_TYPE.OPEN_CONVERSATION);
+    });
   });
 
   describe("AppControllerView", function() {
-    var activeRoomStore, ccView;
-    var conversationAppStore, roomStore, feedbackPeriodMs = 15770000000;
+    var activeRoomStore, ccView, addRemoteCursorStub;
+    var conversationAppStore,
+        roomStore,
+        feedbackPeriodMs = 15770000000;
     var ROOM_STATES = loop.store.ROOM_STATES;
 
     function mountTestComponent() {
       return TestUtils.renderIntoDocument(
         React.createElement(loop.conversation.AppControllerView, {
-          roomStore: roomStore,
-          dispatcher: dispatcher
+          cursorStore: remoteCursorStore,
+          dispatcher: dispatcher,
+          roomStore: roomStore
         }));
     }
 
     beforeEach(function() {
       activeRoomStore = new loop.store.ActiveRoomStore(dispatcher, {
         mozLoop: {},
         sdkDriver: {}
       });
       roomStore = new loop.store.RoomStore(dispatcher, {
         activeRoomStore: activeRoomStore,
         constants: {}
       });
+      remoteCursorStore = new loop.store.RemoteCursorStore(dispatcher, {
+        sdkDriver: {}
+      });
       conversationAppStore = new loop.store.ConversationAppStore({
         activeRoomStore: activeRoomStore,
         dispatcher: dispatcher,
         feedbackPeriod: 42,
         feedbackTimestamp: 42,
         facebookEnabled: false
       });
 
       loop.store.StoreMixin.register({
         conversationAppStore: conversationAppStore
       });
+
+      addRemoteCursorStub = sandbox.stub();
+      LoopMochaUtils.stubLoopRequest({
+        AddRemoteCursorOverlay: addRemoteCursorStub
+      });
     });
 
     afterEach(function() {
       ccView = undefined;
     });
 
+    it("should request AddRemoteCursorOverlay when cursor position changes", function() {
+
+      mountTestComponent();
+      remoteCursorStore.setStoreState({
+        "remoteCursorPosition": {
+          "ratioX": 10,
+          "ratioY": 10
+        }
+      });
+
+      sinon.assert.calledOnce(addRemoteCursorStub);
+    });
+
+    it("should NOT request AddRemoteCursorOverlay when cursor position DOES NOT changes", function() {
+
+      mountTestComponent();
+      remoteCursorStore.setStoreState({
+        "realVideoSize": {
+          "height": 400,
+          "width": 600
+        }
+      });
+
+      sinon.assert.notCalled(addRemoteCursorStub);
+    });
+
     it("should display the RoomView for rooms", function() {
       conversationAppStore.setStoreState({ windowType: "room" });
       activeRoomStore.setStoreState({ roomState: ROOM_STATES.READY });
 
       ccView = mountTestComponent();
 
       var desktopRoom = TestUtils.findRenderedComponentWithType(ccView,
         loop.roomViews.DesktopRoomConversationView);
--- a/browser/extensions/loop/chrome/content/panels/test/index.html
+++ b/browser/extensions/loop/chrome/content/panels/test/index.html
@@ -44,28 +44,32 @@
   <script src="/add-on/shared/js/loopapi-client.js"></script>
   <script src="/add-on/shared/js/utils.js"></script>
   <script src="/add-on/shared/js/models.js"></script>
   <script src="/add-on/shared/js/mixins.js"></script>
   <script src="/add-on/shared/js/actions.js"></script>
   <script src="/add-on/shared/js/validate.js"></script>
   <script src="/add-on/shared/js/dispatcher.js"></script>
   <script src="/add-on/shared/js/otSdkDriver.js"></script>
+
+  <!-- Stores need to be loaded before the views that uses them -->
   <script src="/add-on/shared/js/store.js"></script>
+  <script src="/add-on/panels/js/roomStore.js"></script>
   <script src="/add-on/shared/js/activeRoomStore.js"></script>
-  <script src="/add-on/shared/js/views.js"></script>
+  <script src="/add-on/panels/js/conversationAppStore.js"></script>
   <script src="/add-on/shared/js/textChatStore.js"></script>
+  <script src="/add-on/shared/js/remoteCursorStore.js"></script>
+
+  <!-- Views -->
+  <script src="/add-on/shared/js/views.js"></script>
   <script src="/add-on/shared/js/textChatView.js"></script>
-  <script src="/add-on/panels/js/conversationAppStore.js"></script>
-  <script src="/add-on/panels/js/roomStore.js"></script>
   <script src="/add-on/panels/js/roomViews.js"></script>
   <script src="/add-on/panels/js/feedbackViews.js"></script>
   <script src="/add-on/panels/js/conversation.js"></script>
   <script src="/add-on/panels/js/panel.js"></script>
-  <script src="/add-on/shared/js/remoteCursorStore.js"></script>
 
   <!-- Test scripts -->
   <script src="conversationAppStore_test.js"></script>
   <script src="conversation_test.js"></script>
   <script src="feedbackViews_test.js"></script>
   <script src="panel_test.js"></script>
   <script src="roomViews_test.js"></script>
   <script src="l10n_test.js"></script>
--- a/browser/extensions/loop/chrome/content/panels/test/panel_test.js
+++ b/browser/extensions/loop/chrome/content/panels/test/panel_test.js
@@ -80,17 +80,17 @@ describe("loop.panel", function() {
       GetUserProfile: function() { return null; }
     });
 
     loop.storedRequests = {
       GetFxAEnabled: true,
       GetHasEncryptionKey: true,
       GetUserProfile: null,
       GetDoNotDisturb: false,
-      "GetLoopPref|gettingStarted.latestFTUVersion": 1,
+      "GetLoopPref|gettingStarted.latestFTUVersion": 2,
       "GetLoopPref|legal.ToS_url": "",
       "GetLoopPref|legal.privacy_url": "",
       "GetLoopPref|remote.autostart": false,
       IsMultiProcessActive: false
     };
 
     roomName = "First Room Name";
     // XXX Multiple rooms needed for some tests, could clean up this code to
--- a/browser/extensions/loop/chrome/content/panels/test/roomStore_test.js
+++ b/browser/extensions/loop/chrome/content/panels/test/roomStore_test.js
@@ -38,33 +38,42 @@ describe("loop.store.RoomStore", functio
           },
           ROOM_CREATE: {
             CREATE_SUCCESS: 0,
             CREATE_FAIL: 1
           },
           ROOM_DELETE: {
             DELETE_SUCCESS: 0,
             DELETE_FAIL: 1
+          },
+          LOOP_MAU_TYPE: {
+            OPEN_PANEL: 0,
+            OPEN_CONVERSATION: 1,
+            ROOM_OPEN: 2,
+            ROOM_SHARE: 3,
+            ROOM_DELETE: 4
           }
         };
       },
       CopyString: sinon.stub(),
+      ComposeEmail: sinon.stub(),
       GetLoopPref: function(prefName) {
         if (prefName === "debug.dispatcher") {
           return false;
         }
       },
       NotifyUITour: function() {},
       OpenURL: sinon.stub(),
       "Rooms:Create": sinon.stub().returns({ roomToken: "fakeToken" }),
       "Rooms:Delete": sinon.stub(),
       "Rooms:GetAll": sinon.stub(),
       "Rooms:Open": sinon.stub(),
       "Rooms:Rename": sinon.stub(),
       "Rooms:PushSubscription": sinon.stub(),
+      "SetLoopPref": sinon.stub(),
       TelemetryAddValue: sinon.stub()
     });
 
     dispatcher = new loop.Dispatcher();
     fakeRoomList = [{
       roomToken: "_nxD4V4FflQ",
       roomUrl: "http://sample/_nxD4V4FflQ",
       roomName: "First Room Name",
@@ -428,32 +437,32 @@ describe("loop.store.RoomStore", functio
           }));
       });
 
       it("should log a telemetry event when the operation is successful", function() {
         store.deleteRoom(new sharedActions.DeleteRoom({
           roomToken: fakeRoomToken
         }));
 
-        sinon.assert.calledOnce(requestStubs.TelemetryAddValue);
-        sinon.assert.calledWithExactly(requestStubs.TelemetryAddValue,
+        sinon.assert.calledTwice(requestStubs.TelemetryAddValue);
+        sinon.assert.calledWithExactly(requestStubs.TelemetryAddValue.getCall(0),
           "LOOP_ROOM_DELETE", 0);
       });
 
       it("should log a telemetry event when the operation fails", function() {
         var err = new Error("fake");
         err.isError = true;
         requestStubs["Rooms:Delete"].returns(err);
 
         store.deleteRoom(new sharedActions.DeleteRoom({
           roomToken: fakeRoomToken
         }));
 
-        sinon.assert.calledOnce(requestStubs.TelemetryAddValue);
-        sinon.assert.calledWithExactly(requestStubs.TelemetryAddValue,
+        sinon.assert.calledTwice(requestStubs.TelemetryAddValue);
+        sinon.assert.calledWithExactly(requestStubs.TelemetryAddValue.getCall(0),
           "LOOP_ROOM_DELETE", 1);
       });
     });
 
     describe("#copyRoomUrl", function() {
       it("should copy the room URL", function() {
         store.copyRoomUrl(new sharedActions.CopyRoomUrl({
           roomUrl: "http://invalid",
@@ -465,29 +474,29 @@ describe("loop.store.RoomStore", functio
       });
 
       it("should send a telemetry event for copy from panel", function() {
         store.copyRoomUrl(new sharedActions.CopyRoomUrl({
           roomUrl: "http://invalid",
           from: "panel"
         }));
 
-        sinon.assert.calledOnce(requestStubs.TelemetryAddValue);
-        sinon.assert.calledWithExactly(requestStubs.TelemetryAddValue,
+        sinon.assert.calledTwice(requestStubs.TelemetryAddValue);
+        sinon.assert.calledWithExactly(requestStubs.TelemetryAddValue.getCall(0),
           "LOOP_SHARING_ROOM_URL", 0);
       });
 
       it("should send a telemetry event for copy from conversation", function() {
         store.copyRoomUrl(new sharedActions.CopyRoomUrl({
           roomUrl: "http://invalid",
           from: "conversation"
         }));
 
-        sinon.assert.calledOnce(requestStubs.TelemetryAddValue);
-        sinon.assert.calledWithExactly(requestStubs.TelemetryAddValue,
+        sinon.assert.calledTwice(requestStubs.TelemetryAddValue);
+        sinon.assert.calledWithExactly(requestStubs.TelemetryAddValue.getCall(0),
           "LOOP_SHARING_ROOM_URL", 1);
       });
     });
 
     describe("#emailRoomUrl", function() {
       it("should call composeCallUrlEmail to email the url", function() {
         sandbox.stub(sharedUtils, "composeCallUrlEmail");
 
@@ -515,46 +524,73 @@ describe("loop.store.RoomStore", functio
         sinon.assert.calledOnce(sharedUtils.composeCallUrlEmail);
         sinon.assert.calledWithExactly(sharedUtils.composeCallUrlEmail,
           url, null, description);
       });
     });
 
     describe("#facebookShareRoomUrl", function() {
       var getLoopPrefStub;
+      var sharingSite = "www.sharing-site.com",
+          shareURL = sharingSite +
+                     "?app_id=%APP_ID%" +
+                     "&link=%ROOM_URL%" +
+                     "&redirect_uri=%REDIRECT_URI%",
+          appId = "1234567890",
+          fallback = "www.fallback.com";
 
       beforeEach(function() {
-        getLoopPrefStub = function() {
-          return "https://shared.site/?u=%ROOM_URL%";
-        };
+        getLoopPrefStub = sinon.stub();
+        getLoopPrefStub.withArgs("facebook.appId").returns(appId);
+        getLoopPrefStub.withArgs("facebook.shareUrl").returns(shareURL);
+        getLoopPrefStub.withArgs("facebook.fallbackUrl").returns(fallback);
 
         LoopMochaUtils.stubLoopRequest({
           GetLoopPref: getLoopPrefStub
         });
       });
 
-      it("should open the facebook url with room URL", function() {
+      it("should open the facebook share url with correct room and redirection", function() {
+        var room = "invalid.room",
+            origin = "origin.url";
 
         store.facebookShareRoomUrl(new sharedActions.FacebookShareRoomUrl({
           from: "conversation",
-          roomUrl: "http://invalid"
+          originUrl: origin,
+          roomUrl: room
         }));
 
         sinon.assert.calledOnce(requestStubs.OpenURL);
-        sinon.assert.calledWithExactly(requestStubs.OpenURL, "https://shared.site/?u=http%3A%2F%2Finvalid");
+        sinon.assert.calledWithMatch(requestStubs.OpenURL, sharingSite);
+        sinon.assert.calledWithMatch(requestStubs.OpenURL, room);
+        sinon.assert.calledWithMatch(requestStubs.OpenURL, origin);
+      });
+
+      it("if no origin URL, send fallback URL", function() {
+        var room = "invalid.room";
+
+        store.facebookShareRoomUrl(new sharedActions.FacebookShareRoomUrl({
+          from: "conversation",
+          roomUrl: room
+        }));
+
+        sinon.assert.calledOnce(requestStubs.OpenURL);
+        sinon.assert.calledWithMatch(requestStubs.OpenURL, sharingSite);
+        sinon.assert.calledWithMatch(requestStubs.OpenURL, room);
+        sinon.assert.calledWithMatch(requestStubs.OpenURL, fallback);
       });
 
       it("should send a telemetry event for facebook share from conversation", function() {
         store.facebookShareRoomUrl(new sharedActions.FacebookShareRoomUrl({
           from: "conversation",
           roomUrl: "http://invalid"
         }));
 
-        sinon.assert.calledOnce(requestStubs.TelemetryAddValue);
-        sinon.assert.calledWithExactly(requestStubs.TelemetryAddValue,
+        sinon.assert.calledTwice(requestStubs.TelemetryAddValue);
+        sinon.assert.calledWithExactly(requestStubs.TelemetryAddValue.getCall(0),
           "LOOP_SHARING_ROOM_URL", 4);
       });
 
     });
 
     describe("#shareRoomUrl", function() {
       var socialShareRoomStub;
 
@@ -726,17 +762,19 @@ describe("loop.store.RoomStore", functio
         });
     });
   });
 
   describe("#openRoom", function() {
     var store;
 
     beforeEach(function() {
-      store = new loop.store.RoomStore(dispatcher, { constants: {} });
+      store = new loop.store.RoomStore(dispatcher, {
+        constants: requestStubs.GetAllConstants()
+      });
     });
 
     it("should open the room via mozLoop", function() {
       store.openRoom(new sharedActions.OpenRoom({ roomToken: "42abc" }));
 
       sinon.assert.calledOnce(requestStubs["Rooms:Open"]);
       sinon.assert.calledWithExactly(requestStubs["Rooms:Open"], "42abc");
     });
@@ -876,9 +914,81 @@ describe("loop.store.RoomStore", functio
           newRoomURL: ""
         }));
         clock.tick(1);
 
         sinon.assert.notCalled(updateRoomStub);
         expect(store.getStoreState().savingContext).to.eql(false);
       });
   });
+
+  describe("MAU telemetry events", function() {
+    var getLoopPrefStub, store;
+
+    beforeEach(function() {
+      getLoopPrefStub = function(pref) {
+        if (pref === "facebook.shareUrl") {
+          return "https://shared.site/?u=%ROOM_URL%";
+        }
+        return 0;
+      };
+
+      LoopMochaUtils.stubLoopRequest({
+        GetLoopPref: getLoopPrefStub
+      });
+
+      store = new loop.store.RoomStore(dispatcher, {
+        constants: requestStubs.GetAllConstants()
+      });
+    });
+
+    it("should log telemetry event when opening a room", function() {
+      store.openRoom(new sharedActions.OpenRoom({ roomToken: "42abc" }));
+
+      sinon.assert.calledOnce(requestStubs["TelemetryAddValue"]);
+      sinon.assert.calledWithExactly(requestStubs["TelemetryAddValue"],
+        "LOOP_MAU", store._constants.LOOP_MAU_TYPE.ROOM_OPEN);
+    });
+
+    it("should log telemetry event when sharing a room (copy link)", function() {
+      store.copyRoomUrl(new sharedActions.CopyRoomUrl({
+        roomUrl: "http://invalid",
+        from: "conversation"
+      }));
+
+      sinon.assert.calledTwice(requestStubs["TelemetryAddValue"]);
+      sinon.assert.calledWithExactly(requestStubs["TelemetryAddValue"].getCall(1),
+        "LOOP_MAU", store._constants.LOOP_MAU_TYPE.ROOM_SHARE);
+    });
+
+    it("should log telemetry event when sharing a room (email)", function() {
+      store.emailRoomUrl(new sharedActions.EmailRoomUrl({
+        roomUrl: "http://invalid",
+        from: "conversation"
+      }));
+
+      sinon.assert.calledTwice(requestStubs["TelemetryAddValue"]);
+      sinon.assert.calledWithExactly(requestStubs["TelemetryAddValue"].getCall(1),
+        "LOOP_MAU", store._constants.LOOP_MAU_TYPE.ROOM_SHARE);
+    });
+
+    it("should log telemetry event when sharing a room (facebook)", function() {
+      store.facebookShareRoomUrl(new sharedActions.FacebookShareRoomUrl({
+        roomUrl: "http://invalid",
+        from: "conversation"
+      }));
+
+      sinon.assert.calledTwice(requestStubs["TelemetryAddValue"]);
+      sinon.assert.calledWithExactly(requestStubs["TelemetryAddValue"].getCall(1),
+        "LOOP_MAU", store._constants.LOOP_MAU_TYPE.ROOM_SHARE);
+    });
+
+    it("should log telemetry event when deleting a room", function() {
+      store.deleteRoom(new sharedActions.DeleteRoom({
+        roomToken: "42abc"
+      }));
+
+      sinon.assert.calledTwice(requestStubs["TelemetryAddValue"]);
+      sinon.assert.calledWithExactly(requestStubs["TelemetryAddValue"].getCall(1),
+        "LOOP_MAU", store._constants.LOOP_MAU_TYPE.ROOM_DELETE);
+    });
+  });
 });
--- a/browser/extensions/loop/chrome/content/panels/test/roomViews_test.js
+++ b/browser/extensions/loop/chrome/content/panels/test/roomViews_test.js
@@ -6,17 +6,22 @@ describe("loop.roomViews", function() {
 
   var expect = chai.expect;
   var TestUtils = React.addons.TestUtils;
   var sharedActions = loop.shared.actions;
   var sharedViews = loop.shared.views;
   var ROOM_STATES = loop.store.ROOM_STATES;
   var FAILURE_DETAILS = loop.shared.utils.FAILURE_DETAILS;
 
-  var sandbox, dispatcher, roomStore, activeRoomStore, view;
+  var sandbox,
+      dispatcher,
+      roomStore,
+      activeRoomStore,
+      remoteCursorStore,
+      view;
   var clock, fakeWindow, requestStubs;
   var favicon = "data:image/x-icon;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
 
   beforeEach(function() {
     sandbox = LoopMochaUtils.createSandbox();
 
     LoopMochaUtils.stubLoopRequest(requestStubs = {
       GetAudioBlob: sinon.spy(function() {
@@ -64,16 +69,19 @@ describe("loop.roomViews", function() {
 
     activeRoomStore = new loop.store.ActiveRoomStore(dispatcher, {
       sdkDriver: {}
     });
     roomStore = new loop.store.RoomStore(dispatcher, {
       constants: {},
       activeRoomStore: activeRoomStore
     });
+    remoteCursorStore = new loop.store.RemoteCursorStore(dispatcher, {
+      sdkDriver: {}
+    });
     var textChatStore = new loop.store.TextChatStore(dispatcher, {
       sdkDriver: {}
     });
 
     loop.store.StoreMixin.register({
       textChatStore: textChatStore
     });
 
@@ -347,16 +355,17 @@ describe("loop.roomViews", function() {
       onCallTerminatedStub = sandbox.stub();
 
       activeRoomStore.setStoreState({ roomUrl: "http://invalid " });
     });
 
     function mountTestComponent(props) {
       props = _.extend({
         chatWindowDetached: false,
+        cursorStore: remoteCursorStore,
         dispatcher: dispatcher,
         facebookEnabled: false,
         roomStore: roomStore,
         onCallTerminated: onCallTerminatedStub
       }, props);
       return TestUtils.renderIntoDocument(
         React.createElement(loop.roomViews.DesktopRoomConversationView, props));
     }
new file mode 100644
--- /dev/null
+++ b/browser/extensions/loop/chrome/content/panels/vendor/simpleSlideshow.css
@@ -0,0 +1,109 @@
+/* This is derived from PIOTR F's code,
+currently available at https://github.com/piotrf/simple-react-slideshow
+
+Simple React Slideshow Example
+
+Original Author: PIOTR F.
+License: MIT
+
+Copyright (c) 2015 Piotr
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+html {
+  font-size: 10px;
+  font-family: menu;
+  color: #fff;
+}
+
+body {
+  background: none;
+}
+
+* {
+  box-sizing: border-box;
+  padding: 0;
+  margin: 0;
+  line-height: 2.4rem;  /* or 1.3rem original*/
+}
+
+.slides {
+  display: block;
+  width: 100%;
+  height: 390px;
+  overflow: hidden;
+  white-space: nowrap;
+}
+.slide {
+  display: none;
+  height: 100%;
+  width:  100%;
+}
+.slide.slide--active {
+  display: block;
+}
+
+.control-panel {
+  height: 60px;
+  background: #fff;
+  width: 100%;
+}
+
+.toggle {
+  color: white;
+  display: block;
+  padding: 0px;
+  position: absolute;
+  bottom: 20px;
+  background-color: transparent;
+  background-image: url(../../shared/img/arrow-01.svg);
+  background-repeat: no-repeat;
+  background-size: 20px 20px;
+  border: none;
+  /*padding: 0;*/
+  height: 20px;
+  width: 20px;
+}
+.toggle-prev {
+  left: 20px;
+  transform: scaleX(-1);
+}
+.toggle-next {
+  right: 20px;
+
+}
+
+.button-close {
+  display: block;
+  position: absolute;
+  background-color: transparent;
+  background-image: url(../../shared/img/close-02.svg);
+  background-repeat: no-repeat;
+  background-size: 20px 20px;
+  border: none;
+  padding: 0;
+  height: 20px;
+  width: 20px;
+  top: 20px;
+  right: 20px;
+}
new file mode 100644
--- /dev/null
+++ b/browser/extensions/loop/chrome/content/panels/vendor/simpleSlideshow.js
@@ -0,0 +1,217 @@
+// This is derived from PIOTR F's code,
+// currently available at https://github.com/piotrf/simple-react-slideshow
+
+// Simple React Slideshow Example
+//
+// Original Author: PIOTR F.
+// License: MIT
+//
+// Copyright (c) 2015 Piotr
+//
+// Permission is hereby granted, free of charge, to any person
+// obtaining a copy of this software and associated documentation
+// files (the "Software"), to deal in the Software without
+// restriction, including without limitation the rights to use,
+// copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following
+// conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALINGS IN THE SOFTWARE.
+//
+
+var loop = loop || {};
+loop.SimpleSlideshow = function () {
+  "use strict";
+
+  // App state
+
+  var state = {
+    currentSlide: 0,
+    data: []
+  };
+
+  // State transitions
+  var actions = {
+    toggleNext: function () {
+      var current = state.currentSlide;
+      var next = current + 1;
+      if (next < state.data.length) {
+        state.currentSlide = next;
+      }
+      render();
+    },
+    togglePrev: function () {
+      var current = state.currentSlide;
+      var prev = current - 1;
+      if (prev >= 0) {
+        state.currentSlide = prev;
+      }
+      render();
+    },
+    toggleSlide: function (id) {
+      var index = state.data.map(function (el) {
+        return el.id;
+      });
+      var currentIndex = index.indexOf(id);
+      state.currentSlide = currentIndex;
+      render();
+    }
+  };
+
+  var Slideshow = React.createClass({
+    displayName: "Slideshow",
+
+    propTypes: {
+      data: React.PropTypes.array.isRequired
+    },
+    render: function () {
+      return React.createElement(
+        "div",
+        { className: "slideshow" },
+        React.createElement(Slides, { data: this.props.data }),
+        React.createElement(
+          "div",
+          { className: "control-panel" },
+          React.createElement(Controls, null)
+        )
+      );
+    }
+  });
+
+  var Slides = React.createClass({
+    displayName: "Slides",
+
+    propTypes: {
+      data: React.PropTypes.array.isRequired
+    },
+    render: function () {
+      var slidesNodes = this.props.data.map(function (slideNode, index) {
+        var isActive = state.currentSlide === index;
+        return React.createElement(Slide, { active: isActive,
+          imageAlt: slideNode.imageAlt,
+          imageClass: slideNode.imageClass,
+          indexClass: slideNode.id,
+          key: slideNode.id,
+          text: slideNode.text,
+          title: slideNode.title });
+      });
+      return React.createElement(
+        "div",
+        { className: "slides" },
+        slidesNodes
+      );
+    }
+  });
+
+  var Slide = React.createClass({
+    displayName: "Slide",
+
+    propTypes: {
+      active: React.PropTypes.bool.isRequired,
+      imageClass: React.PropTypes.string.isRequired,
+      indexClass: React.PropTypes.string.isRequired,
+      text: React.PropTypes.string.isRequired,
+      title: React.PropTypes.string.isRequired
+    },
+    render: function () {
+      var classes = classNames({
+        "slide": true,
+        "slide--active": this.props.active
+      });
+      return React.createElement(
+        "div",
+        { className: classes },
+        React.createElement(
+          "div",
+          { className: this.props.indexClass },
+          React.createElement(
+            "div",
+            { className: "slide-layout" },
+            React.createElement("img", { className: this.props.imageClass }),
+            React.createElement(
+              "h2",
+              null,
+              this.props.title
+            ),
+            React.createElement(
+              "div",
+              { className: "slide-text" },
+              this.props.text
+            )
+          )
+        )
+      );
+    }
+  });
+
+  var Controls = React.createClass({
+    displayName: "Controls",
+
+    togglePrev: function () {
+      actions.togglePrev();
+    },
+    toggleNext: function () {
+      actions.toggleNext();
+    },
+    render: function () {
+      var showPrev, showNext;
+      var current = state.currentSlide;
+      var last = state.data.length;
+      if (current > 0) {
+        showPrev = React.createElement("div", { className: "toggle toggle-prev", onClick: this.togglePrev });
+      }
+      if (current < last - 1) {
+        showNext = React.createElement("div", { className: "toggle toggle-next", onClick: this.toggleNext });
+      }
+      return React.createElement(
+        "div",
+        { className: "controls" },
+        showPrev,
+        showNext
+      );
+    }
+  });
+
+  var EmptyMessage = React.createClass({
+    displayName: "EmptyMessage",
+
+    render: function () {
+      return React.createElement(
+        "div",
+        { className: "empty-message" },
+        "No Data"
+      );
+    }
+  });
+
+  function render(renderTo) {
+    var hasData = state.data.length > 0;
+    var component;
+    if (hasData) {
+      component = React.createElement(Slideshow, { data: state.data });
+    } else {
+      component = React.createElement(EmptyMessage, null);
+    }
+    React.render(component, document.querySelector(renderTo ? renderTo : "#main"));
+  }
+
+  function init(renderTo, data) {
+    state.data = data;
+    render(renderTo);
+  }
+
+  return {
+    init: init
+  };
+}();
--- a/browser/extensions/loop/chrome/content/preferences/prefs.js
+++ b/browser/extensions/loop/chrome/content/preferences/prefs.js
@@ -1,14 +1,13 @@
 pref("loop.enabled", true);
 pref("loop.remote.autostart", false);
 pref("loop.server", "https://loop.services.mozilla.com/v0");
 pref("loop.linkClicker.url", "https://hello.firefox.com/");
 pref("loop.gettingStarted.latestFTUVersion", 1);
-pref("loop.facebook.shareUrl", "https://www.facebook.com/sharer/sharer.php?u=%ROOM_URL%");
 pref("loop.gettingStarted.url", "https://www.mozilla.org/%LOCALE%/firefox/%VERSION%/hello/start/");
 pref("loop.gettingStarted.resumeOnFirstJoin", false);
 pref("loop.legal.ToS_url", "https://www.mozilla.org/about/legal/terms/firefox-hello/");
 pref("loop.legal.privacy_url", "https://www.mozilla.org/privacy/firefox-hello/");
 pref("loop.do_not_disturb", false);
 pref("loop.retry_delay.start", 60000);
 pref("loop.retry_delay.limit", 300000);
 pref("loop.ping.interval", 1800000);
@@ -16,21 +15,25 @@ pref("loop.ping.timeout", 10000);
 pref("loop.debug.loglevel", "Error");
 pref("loop.debug.dispatcher", false);
 pref("loop.debug.sdk", false);
 pref("loop.debug.twoWayMediaTelemetry", false);
 pref("loop.feedback.dateLastSeenSec", 0);
 pref("loop.feedback.periodSec", 15770000); // 6 months.
 pref("loop.feedback.formURL", "https://www.mozilla.org/firefox/hello/npssurvey/");
 pref("loop.feedback.manualFormURL", "https://www.mozilla.org/firefox/hello/feedbacksurvey/");
+pref("loop.mau.openPanel", 0);
+pref("loop.mau.openConversation", 0);
+pref("loop.mau.roomOpen", 0);
+pref("loop.mau.roomShare", 0);
+pref("loop.mau.roomDelete", 0);
 #ifdef DEBUG
 pref("loop.CSP", "default-src 'self' about: file: chrome: http://localhost:*; img-src * data:; font-src 'none'; connect-src wss://*.tokbox.com https://*.opentok.com https://*.tokbox.com wss://*.mozilla.com https://*.mozilla.org wss://*.mozaws.net http://localhost:* ws://localhost:*; media-src blob:");
 #else
 pref("loop.CSP", "default-src 'self' about: file: chrome:; img-src * data:; font-src 'none'; connect-src wss://*.tokbox.com https://*.opentok.com https://*.tokbox.com wss://*.mozilla.com https://*.mozilla.org wss://*.mozaws.net; media-src blob:");
 #endif
 pref("loop.fxa_oauth.tokendata", "");
 pref("loop.fxa_oauth.profile", "");
 pref("loop.support_url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/cobrowsing");
-#ifdef LOOP_BETA
 pref("loop.facebook.enabled", true);
-#else
-pref("loop.facebook.enabled", false);
-#endif
+pref("loop.facebook.appId", "1519239075036718");
+pref("loop.facebook.shareUrl", "https://www.facebook.com/dialog/send?app_id=%APP_ID%&link=%ROOM_URL%&redirect_uri=%REDIRECT_URI%");
+pref("loop.facebook.fallbackUrl", "https://hello.firefox.com/");
--- a/browser/extensions/loop/chrome/content/shared/css/conversation.css
+++ b/browser/extensions/loop/chrome/content/shared/css/conversation.css
@@ -176,53 +176,16 @@ html[dir="rtl"] .conversation-toolbar-me
   max-width: 100%;
 }
 
 .call-action-group .btn-group-chevron,
 .call-action-group .btn-group {
   width: 100%;
 }
 
-.call-action-group > .invite-button {
-  cursor: pointer;
-  margin: 0 4px;
-  position: relative;
-}
-
-.call-action-group > .invite-button > img {
-  background-color: #00a9dc;
-  border-radius: 100%;
-  height: 28px;
-  width: 28px;
-}
-
-.call-action-group > .invite-button:hover > img {
-  background-color: #5cccee;
-}
-
-.call-action-group > .invite-button.triggered > img {
-  background-color: #56b397;
-}
-
-.call-action-group > .invite-button > p {
-  display: none;
-  /* Position the text under the button while centering it without impacting the
-   * rest of the layout */
-  left: -10rem;
-  margin: .5rem 0 0;
-  position: absolute;
-  right: -10rem;
-  font-size: 0.8rem;
-}
-
-.call-action-group > .invite-button.triggered > p,
-.call-action-group > .invite-button:hover > p {
-  display: block;
-}
-
 .room-failure {
   /* This flex allows us to not calculate the height of the logo area
      versus the buttons */
   display: flex;
   flex-direction: column;
   align-items: center;
   justify-content: space-between;
   min-height: 230px;
@@ -438,32 +401,143 @@ html, .fx-embedded, #main,
 
 .room-invitation-overlay {
   position: absolute;
   background: rgba(255, 255, 255, 0.85);
   top: 0;
   height: 100%;
   right: 0;
   left: 0;
-  text-align: center;
   color: #000;
   z-index: 1010;
   display: flex;
   flex-flow: column nowrap;
-  justify-content: center;
   align-items: stretch;
 }
 
 .room-invitation-content {
   display: flex;
   flex-flow: column nowrap;
+  margin: 12px 0;
+  font-size: 1.4rem;
+}
+
+.room-invitation-content > * {
+  width: 100%;
+  margin: 0 15px;
+}
+
+.room-context-header {
+  font-weight: bold;
+  font-size: 1.6rem;
+  margin-bottom: 10px;
+  text-align: center;
+}
+
+/* Input Button Combo group */
+.input-button-content {
+  margin: 0 15px 10px 15px;
+  min-width: 64px;
+  border-radius: 4px;
+  border: 1px solid #d2cece;;
+}
+
+.input-button-group-label {
+  color: #898a8a;
+  margin: 0 15px;
+  margin-bottom: 2px;
+  font-size: 1.2rem;
+}
+
+.input-button-content > * {
+  width: 100%;
+  padding: 0 4px;
+}
+
+.input-button-content > .input-group input {
+  font-size: 1.4rem;
+  padding: 0.7rem;
+  width: 100%;
+  border: 0;
+}
+
+.input-button-content > .group-item-top {
+  border-radius: 4px 4px 0 0;
+}
+
+.input-button-content > .group-item-bottom {
+  border-radius: 0 0 4px 4px;
+}
+
+.input-button-content > .input-group {
+  background: #FFF;
+}
+
+.input-button-content > .invite-button {
+  background: #00a9dc;
+  height: 34px;
+  text-align: center;
+  display: flex;
+  flex-wrap: nowrap;
   justify-content: center;
   align-items: center;
 }
 
+.input-button-content > .invite-button.triggered {
+  background-color: #00a9dc;
+}
+
+.input-button-content > .invite-button:hover {
+  background-color: #008ACB;
+}
+
+.share-action-group {
+  display: flex;
+  padding: 0 15px;
+  width: 100%;
+  flex-wrap: nowrap;
+  flex-direction: row;
+  justify-content: center;
+}
+
+.share-action-group > .invite-button {
+  cursor: pointer;
+  height: 34px;
+  border-radius: 4px;
+  background-color: #ebebeb;
+  display: flex;
+  flex-wrap: nowrap;
+  justify-content: center;
+  align-items: center;
+  flex-grow: 1;
+  margin-right: 20px;
+}
+
+.share-action-group > .invite-button:last-child {
+  margin-right: 0;
+}
+
+.share-action-group > .invite-button:hover {
+  background-color: #d4d4d4;
+}
+
+.share-action-group > .invite-button.triggered {
+  background-color: #d4d4d4;
+}
+
+.share-action-group > .invite-button > img {
+  height: 28px;
+  width: 28px;
+}
+
+.share-action-group > .invite-button > div {
+  display: inline;
+  color: #4a4a4a;
+}
+
 .share-service-dropdown {
   color: #000;
   text-align: start;
   bottom: auto;
   top: 0;
   overflow: hidden;
   overflow-y: auto;
 }
@@ -495,27 +569,16 @@ body[platform="win"] .share-service-drop
 .dropdown-menu-item:hover:active > .icon-add-share-service {
   background-image: url("../img/icons-16x16.svg#add-active");
 }
 
 .context-url-view-wrapper > .context-content {
   margin: 0 1rem 1.5rem 1rem;
 }
 
-.room-invitation-content {
-  color: #333;
-  font-size: 1rem;
-  margin: 1rem auto;
-}
-
-.room-invitation-content > p {
-  margin-left: 10px;
-  margin-right: 10px;
-}
-
 .media-layout {
   height: 100%;
 }
 
 .media-layout > .media-wrapper {
   display: flex;
   flex-flow: column wrap;
   height: 100%;
@@ -791,17 +854,17 @@ body[platform="win"] .share-service-drop
 
 .text-chat-view {
   background: white;
 }
 
 .text-chat-view > .text-chat-entries {
   width: 100%;
   overflow: auto;
-  padding-top: .6rem;
+  padding-top: 15px;
   /* 40px is the height of .text-chat-box. */
   height: calc(100% - 40px);
 }
 
 .text-chat-disabled > .text-chat-entries {
   /* When text chat is disabled, the entries box should be 100% height. */
   height: 100%;
 }
new file mode 100644
--- /dev/null
+++ b/browser/extensions/loop/chrome/content/shared/img/arrow-01.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50"><path fill="#55565A" d="M47,25c0-1-0.4-2-1.1-2.7L26.4,2.9c-0.7-0.7-1.7-1.1-2.7-1.1c-1,0-2,0.4-2.7,1.1l-2.2,2.2 c-0.7,0.7-1.1,1.7-1.1,2.7s0.4,2,1.1,2.7l8.8,8.8h-21c-2.2,0-3.5,1.8-3.5,3.8v3.8c0,2,1.3,3.8,3.5,3.8h21l-8.8,8.8 c-0.7,0.7-1.1,1.7-1.1,2.7c0,1,0.4,2,1.1,2.7l2.2,2.2c0.7,0.7,1.7,1.1,2.7,1.1c1,0,2-0.4,2.7-1.1l19.5-19.5C46.6,27,47,26,47,25z"/></svg>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/browser/extensions/loop/chrome/content/shared/img/audio-muted-darkgrey.svg
@@ -0,0 +1,1 @@
+<svg width="31" height="24" viewBox="0 0 31 24" xmlns="http://www.w3.org/2000/svg"><g fill="none"><path d="M9.07 17.683l.644.644c.056.042.112.07.182.07.071 0 .126-.027.182-.07l1.975-1.989c.574.35 1.191.56 1.849.63v1.037h-2.003c-.14 0-.252.042-.35.154-.098.098-.154.21-.154.336 0 .14.056.252.154.35.098.098.21.154.35.154h5.001c.14 0 .252-.056.35-.154.098-.098.154-.21.154-.35 0-.126-.056-.238-.154-.336-.098-.112-.21-.154-.35-.154h-2.003v-1.037c1.135-.126 2.088-.602 2.858-1.457.771-.855 1.149-1.864 1.149-3.012v-.995c0-.14-.056-.252-.154-.35-.098-.098-.21-.154-.336-.154-.14 0-.252.056-.35.154-.098.098-.154.21-.154.35v.995c0 .967-.35 1.793-1.037 2.48-.687.687-1.513 1.022-2.465 1.022-.574 0-1.107-.126-1.611-.392l.757-.756c.28.098.56.154.854.154.687 0 1.274-.252 1.765-.743.49-.491.728-1.078.728-1.765v-.995l2.83-2.83c.042-.042.07-.112.07-.182 0-.056-.028-.126-.07-.168l-.644-.644c-.056-.056-.112-.084-.182-.084-.07 0-.126.028-.182.084l-9.652 9.637c-.042.056-.07.112-.07.182 0 .07.028.126.07.182zm1.149-3.502l.784-.798c-.07-.308-.112-.602-.112-.882v-.995c0-.14-.056-.252-.154-.35-.098-.098-.21-.154-.336-.154-.14 0-.252.056-.35.154-.098.098-.154.21-.154.35v.995c0 .574.112 1.135.323 1.681zm6.542-6.527c-.182-.491-.491-.882-.911-1.191-.434-.308-.911-.462-1.443-.462-.701 0-1.289.238-1.779.728-.49.491-.728 1.079-.728 1.765v4.007l4.861-4.847z" fill="#333"/></g></svg>
--- a/browser/extensions/loop/chrome/content/shared/img/audio.svg
+++ b/browser/extensions/loop/chrome/content/shared/img/audio.svg
@@ -1,1 +1,1 @@
-<svg width="31" height="24" viewBox="0 0 31 24" xmlns="http://www.w3.org/2000/svg"><g fill="none"><path d="M19.002 11.5c0-.273-.226-.5-.5-.5-.273 0-.5.226-.5.5v1c0 1.93-1.57 3.5-3.5 3.5s-3.5-1.57-3.5-3.5v-1c0-.273-.226-.5-.5-.5-.273 0-.5.226-.5.5v1c0 2.312 1.75 4.219 4 4.468v1.031h-2c-.273 0-.5.226-.5.5 0 .273.226.5.5.5h5c.273 0 .5-.226.5-.5 0-.273-.226-.5-.5-.5h-2v-1.031c2.25-.25 4-2.156 4-4.468v-1zm-2-2.999c0-1.375-1.125-2.5-2.5-2.5s-2.5 1.125-2.5 2.5v4c0 1.375 1.125 2.5 2.5 2.5s2.5-1.125 2.5-2.5v-4z" fill="#00A9DC"/></g></svg>
\ No newline at end of file
+<svg width="31" height="24" viewBox="0 0 31 24" xmlns="http://www.w3.org/2000/svg"><g fill="none"><path d="M19.002 11.5c0-.273-.226-.5-.5-.5-.273 0-.5.226-.5.5v1c0 1.93-1.57 3.5-3.5 3.5s-3.5-1.57-3.5-3.5v-1c0-.273-.226-.5-.5-.5-.273 0-.5.226-.5.5v1c0 2.312 1.75 4.219 4 4.468v1.031h-2c-.273 0-.5.226-.5.5 0 .273.226.5.5.5h5c.273 0 .5-.226.5-.5 0-.273-.226-.5-.5-.5h-2v-1.031c2.25-.25 4-2.156 4-4.468v-1zm-2-2.999c0-1.375-1.125-2.5-2.5-2.5s-2.5 1.125-2.5 2.5v4c0 1.375 1.125 2.5 2.5 2.5s2.5-1.125 2.5-2.5v-4z" fill="#00A9DC"/></g></svg>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/loop/chrome/content/shared/img/close-02.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50"><path fill="#ffffff" d="M47.3,38.6c0-0.9-0.4-1.9-1.1-2.6l-11-11l11-11c0.7-0.7,1.1-1.6,1.1-2.6c0-0.9-0.4-1.9-1.1-2.6l-5.1-5.1 c-0.7-0.7-1.6-1.1-2.6-1.1c-0.9,0-1.9,0.4-2.6,1.1l-11,11l-11-11c-0.7-0.7-1.6-1.1-2.6-1.1c-0.9,0-1.9,0.4-2.6,1.1L3.8,8.9 c-0.7,0.7-1.1,1.6-1.1,2.6c0,0.9,0.4,1.9,1.1,2.6l11,11l-11,11c-0.7,0.7-1.1,1.6-1.1,2.6c0,0.9,0.4,1.9,1.1,2.6l5.1,5.1 c0.7,0.7,1.6,1.1,2.6,1.1c0.9,0,1.9-0.4,2.6-1.1l11-11l11,11c0.7,0.7,1.6,1.1,2.6,1.1c0.9,0,1.9-0.4,2.6-1.1l5.1-5.1 C46.9,40.5,47.3,39.5,47.3,38.6z"/></svg>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/browser/extensions/loop/chrome/content/shared/img/firefox-hello_logo.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 225 50"><path fill="#1E92CE" d="M146.3,20.2c-0.1-0.1-0.2-0.2-0.4-0.3c-0.2-0.1-0.3-0.1-0.5-0.1c-0.2,0-0.3,0-0.5,0.1 c-0.2,0.1-0.3,0.2-0.4,0.3c-0.1,0.1-0.2,0.3-0.3,0.4c-0.1,0.2-0.1,0.3-0.1,0.5c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.2,0.3,0.3,0.4 c0.1,0.1,0.2,0.2,0.4,0.3c0.2,0.1,0.3,0.1,0.5,0.1c0.2,0,0.3,0,0.5-0.1c0.2-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.2-0.3,0.3-0.4 c0.1-0.2,0.1-0.3,0.1-0.5c0-0.2,0-0.3-0.1-0.5C146.5,20.4,146.4,20.3,146.3,20.2z M146.3,21.5c-0.1,0.1-0.1,0.2-0.2,0.3 c-0.1,0.1-0.2,0.2-0.3,0.2c-0.1,0.1-0.3,0.1-0.4,0.1c-0.1,0-0.3,0-0.4-0.1c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1-0.1-0.2-0.2-0.2-0.3 c-0.1-0.1-0.1-0.3-0.1-0.4c0-0.2,0-0.3,0.1-0.4c0.1-0.1,0.1-0.2,0.2-0.3c0.1-0.1,0.2-0.2,0.3-0.2c0.1-0.1,0.3-0.1,0.4-0.1 c0.1,0,0.3,0,0.4,0.1c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.2,0.2,0.2,0.3c0.1,0.1,0.1,0.3,0.1,0.4C146.4,21.2,146.4,21.4,146.3,21.5 z M145.7,21.4C145.7,21.3,145.6,21.3,145.7,21.4c-0.1-0.1-0.1-0.1-0.1-0.2c0,0,0,0,0,0c0.1,0,0.2,0,0.3-0.1 c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.1,0-0.2c0,0,0-0.1-0.1-0.1c0,0-0.1-0.1-0.1-0.1c-0.1,0-0.1,0-0.2,0H145v1.4h0.2v-0.6 c0,0,0,0,0.1,0c0,0,0,0,0,0c0,0,0.1,0.1,0.1,0.1c0,0.1,0.1,0.1,0.1,0.2l0.1,0.2h0.3L145.7,21.4C145.7,21.4,145.7,21.4,145.7,21.4z M145.3,21h-0.1v-0.5h0.1c0.1,0,0.2,0,0.2,0.1c0,0,0.1,0.1,0.1,0.2c0,0.1,0,0.1-0.1,0.2c0,0-0.1,0-0.1,0.1 C145.4,21,145.4,21,145.3,21z M54.4,37.8h4.1V26.5h6.8v-3.3h-6.8v-6.7h8.4l0.5-3.3h-13V37.8z M71.6,11.9c-1.5,0-2.6,1.2-2.6,2.6 c0,1.4,1.1,2.6,2.5,2.6c1.5,0,2.6-1.2,2.6-2.6C74.1,13.1,73,11.9,71.6,11.9z M69.5,37.8h3.9V19.4l-3.9,0.7V37.8z M85.4,19.3 c-1.7,0-3.2,0.9-4.6,2.9c0-1-0.2-2-0.7-2.8l-3.6,0.9c0.4,1.1,0.6,2.6,0.6,4.8v12.7h3.9V25.6c0.4-1.5,1.7-2.7,3.4-2.7 c0.4,0,0.7,0.1,1.1,0.2l1.2-3.6C86.3,19.4,86,19.3,85.4,19.3z M94,19.4c-2.3,0-4,0.7-5.5,2.4c-1.6,1.8-2.2,3.9-2.2,7 c0,5.7,3.2,9.4,8.3,9.4c2.4,0,4.6-0.8,6.4-2.4l-1.5-2.4c-1.3,1.2-2.8,1.8-4.5,1.8c-3.5,0-4.4-2.6-4.4-5.1v-0.3h10.7V29 c0-4.2-0.8-6.4-2.3-7.8C97.4,19.9,95.7,19.4,94,19.4z M90.6,27c0-2.9,1.2-4.6,3.4-4.6c1.9,0,3.2,1.7,3.2,4.6H90.6z M108,19.8v-2.7 c0-1.6,0.9-2.5,2.2-2.5c0.7,0,1.3,0.2,2.2,0.6l1.3-2.5c-1.2-0.7-2.5-1-4-1c-3.2,0-5.5,1.7-5.5,5.5c0,1.7,0.1,2.7,0.1,2.7h-1.7v2.7 h1.7v15.3h3.9V22.5h3.7l1-2.7H108z M119.9,19.4c-4.7,0-7.8,3.7-7.8,9.4c0,5.7,3,9.4,7.9,9.4c4.9,0,7.9-3.6,7.9-9.4 C127.9,23.2,125,19.4,119.9,19.4z M120.1,35.3c-2.3,0-3.6-1.5-3.6-6.7c0-4.4,1.1-6.2,3.5-6.2c2.3,0,3.7,1.5,3.7,6.6 C123.6,33.4,122.4,35.3,120.1,35.3z M143.2,19.8h-4.5c-0.5,0.7-2.3,4.3-2.8,5.5c-0.9-1.7-2.4-4.5-3.3-5.8l-4.2,0.9l5.2,7.7 l-6.7,9.7h4.9c0.7-1,3.2-5.4,3.9-6.7c0.4,0.6,3.3,5.7,3.9,6.7h4.9L138,28L143.2,19.8z M165.8,23.6h-10.3V13.3h-2.9v24.6h2.9V26 h10.3v11.9h2.9V13.3h-2.9V23.6z M179,19.5c-2.1,0-3.9,0.8-5.3,2.5c-1.5,1.8-2.1,3.7-2.1,6.7c0,5.9,3,9.5,7.9,9.5 c2.3,0,4.4-0.8,6-2.2l-1.1-1.8c-1.3,1.1-2.6,1.7-4.4,1.7c-1.8,0-3.4-0.6-4.4-2.2c-0.6-0.9-0.8-2.2-0.8-3.9v-0.4h11.1V29 c-0.1-4.3-0.5-5.9-2-7.5C182.6,20.2,181,19.5,179,19.5z M174.8,27.3c0.1-3.7,1.6-5.6,4.1-5.6c1.4,0,2.6,0.6,3.2,1.6 c0.5,0.9,0.8,2,0.8,4H174.8z M193.1,36.1c-0.8,0-1-0.4-1-1.8V16c0-2.7-0.5-4.2-0.5-4.2l-2.8,0.5c0,0,0.4,1.3,0.4,3.7v18.9 c0,1.3,0.3,2,0.9,2.5c0.5,0.5,1.3,0.8,2.1,0.8c0.8,0,1.1-0.1,1.8-0.4l-0.6-1.8C193.4,36,193.2,36.1,193.1,36.1z M200.3,36.1 c-0.8,0-1-0.4-1-1.8V16c0-2.7-0.5-4.2-0.5-4.2l-2.8,0.5c0,0,0.4,1.3,0.4,3.7v18.9c0,1.3,0.3,2,0.9,2.5c0.5,0.5,1.2,0.8,2.1,0.8 c0.7,0,1.1-0.1,1.8-0.4l-0.6-1.8C200.6,36,200.4,36.1,200.3,36.1z M216.3,22.6c-1.2-1.8-3.1-3.1-6.1-3.1c-4.7,0-7.6,3.5-7.6,9.4 c0,5.9,2.8,9.5,7.7,9.5c4.5,0,7.7-3.2,7.7-9.1C218,26.3,217.5,24.2,216.3,22.6z M214.3,33.3c-0.6,1.7-2,2.7-3.9,2.7 c-1.5,0-3-0.7-3.6-1.8c-0.7-1.1-1.1-3.3-1.1-5.8c0-2.1,0.3-3.5,0.9-4.7c0.6-1.2,2.1-1.9,3.6-1.9c1.5,0,3,0.7,3.8,2.3 c0.6,1.2,0.8,2.9,0.8,5.4C214.8,31.2,214.7,32.2,214.3,33.3z M26.1,7.7C16.1,7.7,8,14.9,8,23.6c0,4.4,2,8.3,5.2,11.2 c-0.6,2-1.7,4.7-3.9,7.3c0.4,0.7,6.6-1.7,11-3.4c1.8,0.5,3.7,0.8,5.7,0.8c10,0,18.1-7.1,18.1-15.9C44.1,14.9,36,7.7,26.1,7.7z M31.5,17.3c1.3,0,2.4,1.1,2.4,2.4c0,1.3-1.1,2.4-2.4,2.4c-1.3,0-2.4-1.1-2.4-2.4C29.1,18.3,30.2,17.3,31.5,17.3z M20.6,17.3 c1.3,0,2.4,1.1,2.4,2.4c0,1.3-1.1,2.4-2.4,2.4c-1.3,0-2.4-1.1-2.4-2.4C18.2,18.3,19.3,17.3,20.6,17.3z M26.1,34.7 C26.1,34.7,26,34.7,26.1,34.7c-0.1,0-0.1,0-0.1,0c-4.8,0-10.2-3.1-11.5-8.4c3.3,1.5,7.8,2.2,11.5,2.2c3.7,0,8.3-0.7,11.5-2.2 C36.3,31.6,30.9,34.7,26.1,34.7z"/></svg>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/browser/extensions/loop/chrome/content/shared/img/firefox-hello_tour-slide-01.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 310 310"><path fill="#383F44" d="M260.4,88.5h-200c-5.5,0-10,4.5-10,10v21h220v-21C270.4,93,265.9,88.5,260.4,88.5z"/><path fill="#D6DCE5" d="M50.4 119.5H270.4V150.5H50.4z"/><path fill="#71C4EA" d="M60.4,237.5h200c5.5,0,10-4.5,10-10v-77h-220v77C50.4,233,54.9,237.5,60.4,237.5z"/><path fill="#D6DCE5" fill-rule="evenodd" d="M128.4,110.4c-0.8-4.2-2.1-12-12.6-12H90 c-10.4,0-11.8,7.8-12.6,12c-1.2,6.6-3.8,10.1-10.7,10.1c4.6,0,67.8,0,72.5,0C132.3,120.5,129.7,117,128.4,110.4z" clip-rule="evenodd"/><path fill="#FFF" d="M66.4 126.5H240.4V143.5H66.4z"/><circle cx="67.9" cy="135" r="10.5" fill="#383F44"/><path fill="#FFF" d="M246.4 128c0 .8.7 1.5 1.5 1.5h14c.8 0 1.5-.7 1.5-1.5 0-.8-.7-1.5-1.5-1.5h-14C247.1 126.5 246.4 127.1 246.4 128 246.4 128 246.4 127.1 246.4 128zM246.4 135c0 .8.7 1.5 1.5 1.5h14c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5h-14C247.1 133.5 246.4 134.1 246.4 135 246.4 135 246.4 134.1 246.4 135zM246.4 142c0 .8.7 1.5 1.5 1.5h14c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5h-14C247.1 140.5 246.4 141.1 246.4 142 246.4 142 246.4 141.1 246.4 142z"/><path fill="#FFF" fill-rule="evenodd" d="M71.6,133.5h-4.4l2-2c0.3-0.3,0.4-0.8,0.1-1l-0.9-0.9 c-0.2-0.2-0.7-0.2-1,0.1l-4.6,4.7c-0.1,0.1-0.1,0.1-0.1,0.2l0,0c0,0,0,0,0,0c0,0,0,0.1-0.1,0.1c0,0.1-0.1,0.1-0.1,0.2 c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0.1,0,0.1,0.1,0.2c0,0,0,0.1,0.1,0.1c0,0,0,0,0,0l0,0c0,0.1,0.1,0.1,0.1,0.2l4.6,4.7 c0.3,0.3,0.8,0.4,1,0.1l0.9-0.9c0.2-0.2,0.2-0.7-0.1-1l-2-2h4.5c0.4,0,0.7-0.3,0.7-0.7v-1.5C72.3,133.9,72,133.5,71.6,133.5z" clip-rule="evenodd"/><path fill="#CE7C32" d="M174.9,207.4l19.7-4.1c7-2,9.6-3.8,9.6-3.8c2.4-1.6,4.3-4.2,4.9-7.3c1.2-6.2-2.8-12.2-9-13.5l-20.6-4.2 c0,0,0,0,0,0l-2.3-0.5c-0.4-0.1-0.8,0.2-0.9,0.6l-0.3,1.5c0,0,0,0.1,0,0.1c0,0.1,0,0.1-0.1,0.2c-0.3,1.4,0.6,2.8,2,3l3.6,0.7 c1.2,0.2,2,1.4,1.7,2.6c-0.2,1.2-1.4,2-2.6,1.7l-21.2-4.2c-1.4-0.3-2.7,0.6-3,2c-0.3,1.4,0.6,2.8,2,3l17.4,3.5 c0.2,0.1,0.4,0.2,0.3,0.4c0,0.2-0.1,0.3-0.4,0.3l-16,3.6c-1.4,0.3-2.3,1.6-2,3c0.3,1.4,1.7,2.3,3.1,2l16.1-3.5 c0.3,0,0.5,0.1,0.5,0.4c0,0.3-0.1,0.5-0.4,0.6l-11,2.4c-1.4,0.3-2.3,1.7-2,3.1c0.3,1.4,1.7,2.3,3.1,2l11-2.4c0.2,0,0.5,0.1,0.5,0.3 c0,0.2-0.1,0.5-0.3,0.5l-4.5,0.9c-1.4,0.3-2.3,1.7-2,3.1C172.1,206.8,173.5,207.7,174.9,207.4z"/><path fill="#0283B1" d="M279.6,111.1c1.9,14.3,1.2,27.4-1.9,38.9c-2.9,10.5-7.9,19.7-14.9,27.4c-24.5,27-64.6,26.1-66.3,26.1 l0.8-25.2l0,0c0.3,0,30.5,0.5,47-17.9c9.5-10.6,13-26.1,10.4-46L279.6,111.1z"/><path fill="#CE7C32" d="M261.9,91.3l-36.5-9.9c-5.2-1.4-9.2-4.9-11.6-9.3C199,72.8,189.8,86.9,189.7,87c-5.5,26,10.1,52,36.1,59.1 c22.1,6,44.7-3.7,56.1-22.2C286.8,97.4,261.9,91.3,261.9,91.3z"/><path fill="#383F44" d="M252.2,48.9c-2.8-0.8-5.6-1.3-8.3-1.5c1.6-1.7,3.6-3.1,5.9-4.3c-4.5-1.1-9.7-0.7-14.7,1.2 c-1.6,0.6-3.2,1.3-4.7,2.2c-5-1.4-10.1-1.4-14.4-0.1c2.3,1,4.3,2.3,6.1,3.8c-1,0.4-2,0.7-2.9,1.1c-1.5,0.7-3,1.4-4.4,2.2 c-9.6,5.3-17.5,13.8-22,24.4c-0.9,2.1-1.6,4.2-2.2,6.4c-0.2,0.9-0.5,1.8-0.7,2.7c0.1-0.2,9.3-14.3,24.2-14.9 c-0.3-0.6-0.6-1.2-0.9-1.9c0.7,1.8,1.7,3.5,2.9,5c0,0,0,0,0,0.1c0.2,0.3,0.5,0.6,0.7,0.9c0.5,0.6,0.9,1.1,1.4,1.7c1,1.1,2,2,3,3 c2.1,1.8,4.3,3.4,6.7,4.6c4.7,2.5,9.8,3.6,14.4,3.1c-1.6-1.1-3.1-2.4-4.3-3.8l24,6.5c0,0,24.8,6.1,19.9,32.6 c2.5-4,4.4-8.4,5.7-13.2C294.9,83.8,279,56.2,252.2,48.9z"/><circle cx="189.3" cy="93.9" r="6.8" fill="#CE7C32"/><path fill="#CE7C32" d="M290.5,121.4c1-3.6-1.2-7.4-4.8-8.4c-3.6-1-7.4,1.2-8.4,4.8c-1,3.6,1.2,7.4,4.8,8.4 C285.8,127.2,289.5,125,290.5,121.4z"/><path fill="#FFF" d="M215.7,118.8c-2.5,9.1,3,18.3,12.1,20.8c9.1,2.5,18.4-2.7,20.9-11.8L215.7,118.8z"/><path fill="#383F44" fill-rule="evenodd" d="M281,106.3c0.2-1,0.1-1.2-0.9-1.5c-1.2-0.4-2.4-0.8-3.6-1.3 c-1.7-0.7-3.4-1.4-5.1-2.1c-0.7-0.3-1.4-0.5-2.1-0.8c-1.2-0.5-2.5-0.9-3.7-1.3c-0.6-0.2-1.2-0.4-1.9-0.7c-1.5-0.6-3.1-0.8-4.7-1 c-1.1-0.2-2.1-0.4-3.2-0.5c-1.5-0.2-3-0.3-4.4-0.4c-1.8-0.1-3.6-0.2-5.5-0.2c-2.1-0.1-4.2-0.5-6.2-1c-2-0.6-3.9-1.2-5.8-2.2 c-1.6-0.9-3.2-1.7-4.8-2.6c-1.3-0.7-2.7-1.3-4-1.9c-1-0.4-2-0.8-3-1.2c-1.5-0.6-3-1.2-4.6-1.5c-0.6-0.1-1.3-0.2-1.9-0.4 c-1.3-0.2-2.6-0.5-3.9-0.7c-0.7-0.1-1.5-0.3-2.2-0.4c-1.8-0.3-3.6-0.5-5.5-0.8c-1.3-0.2-2.5-0.5-3.8-0.7c-1-0.2-1.2,0-1.5,0.9 c-0.1,0.2-0.2,0.5-0.3,0.7c-0.3,1-0.6,2-0.9,3c-0.1,0.4-0.1,0.8,0.3,1.1c1.1,0.7,1.5,1.7,1.4,3c-0.2,1.5-0.3,3.1-0.4,4.6 c-0.2,2.4-0.3,4.8,0,7.2c0.3,2.1,0.9,4,2.4,5.5c1,1,2.1,1.9,3.3,2.6c2,1.3,4.2,2.2,6.6,2.7c6.6,1.4,13.3-0.1,17.9-5.1 c1.9-2,3.5-4.3,5-6.6c2-2.9,6.4-1.8,6.7,1.8c0.2,2.8,0.4,5.5,1,8.2c1.4,6.7,6.5,11.4,12.9,13.5c2.3,0.8,4.7,1.1,7,1 c1.4,0,2.8-0.3,4.2-0.6c2.1-0.5,3.6-1.9,4.9-3.6c1.5-1.9,2.7-4,3.7-6.2c0.7-1.4,1.3-2.8,2-4.2c0.5-1.2,1.4-1.8,2.7-1.9 c0.5,0,0.7-0.4,0.9-0.8c0.3-1,0.5-2.1,0.8-3.1C280.9,106.8,281,106.5,281,106.3z M229.9,105.2c-1,1.7-2.1,3.2-3.6,4.6 c-3.6,3.3-8.6,4.5-13.3,3.6c-1.6-0.3-3.3-0.7-4.9-1.3c-1.1-0.4-2.1-0.9-3-1.7c-0.4-0.3-0.8-0.6-1.1-0.9c-0.3-0.3-0.6-0.6-0.9-0.8 c-1.8-1.6-2.5-3.7-2.5-6c0-4.1,0.7-8.1,2.3-11.9c0.3-0.8,0.8-1.5,1.2-2.1c0.8-1.2,2-1.6,3.4-1.8c2-0.3,4-0.2,6,0.1 c3,0.4,6,1.1,8.9,2.2c2.8,1,5.4,2.4,7.7,4.3c0.5,0.4,0.9,0.9,1.2,1.3c0.2,0.2,0.3,0.4,0.4,0.7c0.1,0.3,0.2,0.6,0.3,0.9 c0.1,0.3,0.2,0.6,0.3,0.9c0.2,0.6,0,1.3,0,1.9C231.9,101.5,230.9,103.3,229.9,105.2z M269.9,121.5c-1.2,2-2.8,3.4-5.2,3.9 c-0.4,0.1-0.8,0.2-1.2,0.3c-0.5,0.1-0.9,0.1-1.4,0.2c-1.1,0.2-2.3,0.1-3.4-0.1c-1.6-0.2-3.3-0.7-4.9-1.3c-4.5-1.7-8.3-5.2-9.7-9.9 c-0.6-1.9-0.8-3.8-0.7-5.8c0-2.1,0.1-4.3,0.8-6.3c0.3-0.6,0.5-1.2,1-1.7c0.2-0.2,0.5-0.4,0.7-0.6c0.2-0.2,0.5-0.5,0.7-0.7 c0.2-0.1,0.5-0.2,0.7-0.3c0.6-0.2,1.2-0.4,1.8-0.5c2.9-0.5,5.9-0.3,8.8,0.2c3,0.5,6,1.4,8.8,2.6c1.9,0.8,3.7,1.7,5.3,2.9 c1.1,0.8,1.9,1.8,2,3.2c0,0.8,0.1,1.7,0,2.5C273.4,114.2,272,118,269.9,121.5z" clip-rule="evenodd"/><circle cx="257.5" cy="112" r="3" fill="#383F44" fill-rule="evenodd" clip-rule="evenodd"/><circle cx="217.4" cy="101.1" r="3" fill="#383F44" fill-rule="evenodd" clip-rule="evenodd"/><path fill="#DB5527" d="M122.7,259.8c8.9,8.3,20.6,10.2,23.1,7.7c2.5-2.5,0.6-14.2-7.8-23c-4.6-4.3-9.9-6.9-14.4-8l-9,9.1 C115.7,249.9,118.3,255.2,122.7,259.8z"/><path fill="#009BDE" d="M114.8,236.7c-1.2,1.2-1.4,4.6-0.3,8.7l9-9.1C119.4,235.3,116,235.5,114.8,236.7z"/><path fill="#F2D1BB" d="M101.5,211.1c-28.9,8.8-48.2,5.2-60.2-0.4c0,0-20.3,22.9-6.6,48.5c13.6,13.1,33.9,18.1,52.8,11.2 c13.5-5,23.6-15.1,29-27.3C119.8,218.8,101.5,211.1,101.5,211.1z"/><path fill="#F2D1BB" d="M115.7,205.8c-1.3-3.5-3-6.8-4.9-9.8c-12.1-18.6-35.9-27.1-57.6-19.1c-7.4,2.7-13.8,7.1-18.8,12.5 c-2.3,2.4-4.3,5.1-6,7.9c-0.4,0.7-0.8,1.4-1.2,2.1c-0.4,0.7-0.8,1.4-1.1,2.1c-4,8.3-5.6,17.8-4.4,27.2c0.2,1.5,0.4,2.9,0.8,4.4 c0.5,2.1,1.1,4.2,1.8,6.3c2.6,7.1,6.7,13.3,11.8,18.2c0,0,0,0.1,0.1,0.1c13,12.6,32.6,17.4,50.7,10.7c13-4.8,22.7-14.5,27.8-26.2 c0-0.1,0-0.2,0-0.2c3-7,4.4-14.7,3.9-22.6C118.3,214.8,117.4,210.3,115.7,205.8z"/><path fill="#DB5527" d="M112.5,194.9c-12.6-19.4-37.4-28.2-60-19.9c-7.7,2.8-14.3,7.4-19.6,13c-2.4,2.5-4.4,5.3-6.2,8.3 c-0.4,0.7-0.8,1.5-1.2,2.2c-0.4,0.7-0.8,1.4-1.2,2.2c-4.2,8.7-5.9,18.5-4.6,28.4c0.2,1.5,0.5,3,0.8,4.5c0.5,2.2,1.1,4.4,1.9,6.6 c2.7,7.4,7,13.8,12.3,19c-13.7-25.6,6.6-48.5,6.6-48.5c11.9,5.5,31.2,9.1,60.2,0.4c0,0,18.3,7.7,15,31.9 c3.2-7.3,4.7-15.5,4.1-23.7c-0.3-4.7-1.3-9.5-3-14.2C116.2,201.4,114.5,198,112.5,194.9z"/><g fill="#383F44"><path d="M48.9,252.1c-1.6-1.6-2.1-4.1-1.6-6.4c0.5-2.4,2-4.5,4-5.8c2-1.4,4.5-2,6.8-1.7c2.3,0.3,4.5,1.7,5.5,3.6 c-4.3-0.2-6.9,0.9-9.2,2.5c-1.1,0.8-2.1,1.8-3,3C50.4,248.5,49.6,250,48.9,252.1z"/><path d="M52.9,240.1c0,0-5.3,6.7-10.3,5.4c0,0,4,2.5,8.2,1.2L52.9,240.1z"/></g><g fill="#383F44"><path d="M105.6,231.2c0.2-2.2-1-4.5-2.9-5.9c-1.9-1.5-4.4-2.2-6.8-1.9c-2.4,0.2-4.7,1.4-6.3,3.2 c-1.6,1.8-2.3,4.2-1.8,6.3c3.2-3,5.8-3.8,8.6-4.1c1.4-0.1,2.8,0,4.3,0.3C102.1,229.5,103.7,230.1,105.6,231.2z"/><path d="M94.9,224.7c0,0,8.3,1.7,11.4-2.6c0,0-1.4,4.5-5.4,6.2L94.9,224.7z"/></g><path fill="#FFF" d="M72.1 256.5c1.7 4.5 6.7 6.8 11.2 5.2 4.5-1.7 6.8-6.7 5.2-11.2L72.1 256.5zM141.4 36.6c19.3 0 35 13.6 35 30.3 0 8.3-3.9 15.9-10.2 21.4 1.1 3.8 3.3 8.9 7.5 14-.7 1.3-12.8-3.2-21.2-6.6-3.5 1-7.2 1.6-11.1 1.6-19.3 0-35-13.6-35-30.3C106.4 50.1 122.1 36.6 141.4 36.6z"/><path fill="#0283B1" d="M150.4,50.2l-8.6-2.3l-5.3,24.8l6.1,1.6L150.4,50.2z M133.1,84.3c0.6,0.9,1.6,1.6,3,2 c1.4,0.4,2.5,0.3,3.5-0.3c1-0.6,1.6-1.5,2-2.8c0.4-1.4,0.3-2.5-0.3-3.5c-0.6-0.9-1.5-1.6-2.9-2c-1.4-0.4-2.6-0.3-3.6,0.2 c-0.9,0.5-1.6,1.5-2,2.9C132.5,82.2,132.6,83.3,133.1,84.3z"/></svg>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/browser/extensions/loop/chrome/content/shared/img/firefox-hello_tour-slide-02.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 310 310"><defs><path id="a" d="M155,63.5c55.2,0,100,44.8,100,100s-44.8,100-100,100c-55.2,0-100-44.8-100-100S99.8,63.5,155,63.5z"/></defs><clipPath id="b"><use xlink:href="#a" overflow="visible"/></clipPath><path fill="#FFF" fill-rule="evenodd" d="M155,63.5c55.2,0,100,44.8,100,100 s-44.8,100-100,100c-55.2,0-100-44.8-100-100S99.8,63.5,155,63.5z" clip-path="url(#b)" clip-rule="evenodd"/><g fill="#E7C1A8" clip-path="url(#b)"><path d="M80.3 199.7H123.3V254.7H80.3z" transform="rotate(71.16 101.822 227.175)"/><path d="M84.6,163c7.1-1,13.8,1.9,15,11.4l3,22.5c0.1,0.9,1.5,1.5,2.4,1.4c0.9-0.1,1.6-1,1.4-1.9l-10-74.2l0,0 l-0.5-3.5c-0.5-3.4,2-6.6,5.4-7.1c3.5-0.5,6.7,1.9,7.1,5.4l0.5,3.5l5.8,42.7l3-0.4l-7-51.6l0,0l-0.5-3.5c-0.5-3.4,2-6.6,5.4-7.1 c3.5-0.5,6.7,1.9,7.1,5.4l0.5,3.5l0,0l7,51.6l4.1-0.6l-5.8-42.7l-0.5-3.5c-0.5-3.4,2-6.6,5.4-7.1c3.5-0.5,6.7,1.9,7.1,5.4 l0.5,3.5l0,0l5.8,42.7l3.9-0.5L147,130l0,0l-0.5-3.5c-0.5-3.4,2-6.6,5.4-7.1c3.5-0.5,6.7,1.9,7.1,5.4l0.5,3.5c0,0,0,0,0,0 c1.2,9.3,8.9,65.7,9.1,67.8c2.9,21.5-12.3,41.3-33.9,44.2c-21.6,2.9-41.5-12.2-44.4-33.7C90.1,205.1,84.6,163,84.6,163z"/></g><g clip-path="url(#b)"><defs><path id="c" d="M84.6,163c7.1-1,13.8,1.9,15,11.4l3,22.5c0.1,0.9,1.5,1.5,2.4,1.4c0.9-0.1,1.6-1,1.4-1.9l-10-74.2l0,0 l-0.5-3.5c-0.5-3.4,2-6.6,5.4-7.1c3.5-0.5,6.7,1.9,7.1,5.4l0.5,3.5l5.8,42.7l3-0.4l-7-51.6l0,0l-0.5-3.5c-0.5-3.4,2-6.6,5.4-7.1 c3.5-0.5,6.7,1.9,7.1,5.4l0.5,3.5l0,0l7,51.6l4.1-0.6l-5.8-42.7l-0.5-3.5c-0.5-3.4,2-6.6,5.4-7.1c3.5-0.5,6.7,1.9,7.1,5.4 l0.5,3.5l0,0l5.8,42.7l3.9-0.5L147,130l0,0l-0.5-3.5c-0.5-3.4,2-6.6,5.4-7.1c3.5-0.5,6.7,1.9,7.1,5.4l0.5,3.5c0,0,0,0,0,0 c1.2,9.3,8.9,65.7,9.1,67.8c2.9,21.5-12.3,41.3-33.9,44.2c-21.6,2.9-41.5-12.2-44.4-33.7C90.1,205.1,84.6,163,84.6,163z"/></defs><clipPath id="d"><use xlink:href="#c" overflow="visible"/></clipPath><path fill="#F4D2BB" d="M104.7,196.9c-0.2,0-0.3,0.1-0.5,0.1l-6.4-47.6L78,152.1l7.1,52.8 c-12,8.9-19,23.9-16.8,39.8c3.1,23.3,24.5,39.6,47.8,36.4s39.6-24.5,36.4-47.8S127.9,193.8,104.7,196.9z" clip-path="url(#d)"/></g><path fill="#CE7C32" d="M215.7,212.9c0.8-2.7,1.4-5.5,1.6-8.5c0.2-2,4.4-58.9,5.1-68.2c0,0,0,0,0,0 l0.3-3.6c0.3-3.5-2.4-6.5-5.8-6.7c-3.5-0.3-6.5,2.3-6.8,5.8l-0.3,3.6l0,0l-2.1,28.5l-3.9-0.3l3.2-43l0,0l0.3-3.6 c0.3-3.5-2.4-6.5-5.8-6.7c-3.5-0.3-6.5,2.3-6.8,5.8l-0.3,3.6l-3.2,43l-4.1-0.3l3.9-52l0,0l0.3-3.6c0.3-3.5-2.4-6.5-5.8-6.7 c-3.5-0.3-6.5,2.3-6.8,5.8l-0.3,3.6l0,0l-3.9,52l-3-0.2l3.2-43l0.3-3.6c0.3-3.5-2.4-6.5-5.8-6.7c-3.5-0.3-6.5,2.3-6.8,5.8 l-0.3,3.6l0,0l-5.6,74.7c-0.1,0.9-0.9,1.6-1.8,1.6c-0.9-0.1-2.1-0.9-2.1-1.8l1.7-22.7c0.7-9.6-5.2-13.7-12.4-14.3 c0,0-3.3,42.3-3.4,43.9c-1.5,19.8,12.1,37.2,31,41.3l0,0.1l50.6,21.6l16.9-39.6L215.7,212.9z" clip-path="url(#b)"/><g fill="#71C4EA"><path d="M153.8,79.4c0,1.5,1.2,2.6,2.6,2.6c1.5,0,2.6-1.2,2.6-2.6V49.1c0-1.5-1.2-2.6-2.6-2.6 c-1.5,0-2.6,1.2-2.6,2.6V79.4z"/><path d="M174.7,86.4c-0.8,1.2-0.6,2.8,0.6,3.7c1.2,0.8,2.8,0.6,3.7-0.6l17.5-24.7c0.8-1.2,0.6-2.8-0.6-3.7 c-1.2-0.8-2.8-0.6-3.7,0.6L174.7,86.4z"/><path d="M138.1,86.4c0.8,1.2,0.6,2.8-0.6,3.7c-1.2,0.8-2.8,0.6-3.7-0.6l-17.5-24.7c-0.8-1.2-0.6-2.8,0.6-3.7 c1.2-0.8,2.8-0.6,3.7,0.6L138.1,86.4z"/></g></svg>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/browser/extensions/loop/chrome/content/shared/img/firefox-hello_tour-slide-03.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 310 310"><path fill="#71C4EA" d="M265.5,53.9c0-2.6-2.1-3.7-4.7-3.7h-79.6c-2.6,0-4.7,2.1-4.7,4.7V64h89V53.9z"/><circle cx="184.1" cy="56.9" r="1.6" fill="#FFF"/><circle cx="190.2" cy="56.9" r="1.6" fill="#FFF"/><circle cx="196.3" cy="56.9" r="1.6" fill="#FFF"/><path fill="#FFF" d="M181.2,118h79.6c2.6,0,4.7-2.1,4.7-4.7V64h-89v49.3C176.5,115.9,178.6,118,181.2,118z"/><path fill="#D6DCE5" d="M176.5 64H265.5V73H176.5z"/><path fill="#06A6E0" fill-rule="evenodd" d="M153.5,59.9c55.2,0,100,44.8,100,100s-44.8,100-100,100 c-55.2,0-100-44.8-100-100S98.3,59.9,153.5,59.9z" clip-rule="evenodd"/><path fill="none" d="M153.5,59.9c55.2,0,100,44.8,100,100s-44.8,100-100,100 c-55.2,0-100-44.8-100-100S98.3,59.9,153.5,59.9z" clip-rule="evenodd"/><defs><path id="a" d="M153.5,59.9c55.2,0,100,44.8,100,100s-44.8,100-100,100c-55.2,0-100-44.8-100-100S98.3,59.9,153.5,59.9z"/></defs><clipPath id="b"><use xlink:href="#a" overflow="visible"/></clipPath><g clip-path="url(#b)"><path fill="#0283B1" d="M259.4,134.6L259.4,134.6C259.4,134.6,259.4,134.6,259.4,134.6c0-0.1,0-0.2-0.1-0.2h0 c-4.3-13.9-11.2-26.9-20.1-38.1l-2.2,0.8l-1.8,3.9L223,98l-6.8,5.9l1.8,3.4l-11.2-6.9l5.5-5.8l9.7-3.4l-1.5-3.4L210.3,92 l-7.3,7.5l6.3,7.2l-9.4,0l-14.2,9.3l-4.8-5l7.3,0.7l3.3-5.1l-18.5-4.3l-12.4,3l-11.2,15.1l-0.4,5.8l6.8-0.8l1.5,3.9l6.4-1.8 l0.4-5.1l-2.3-1.9l6.4-8.3l2.9,3l-5,3.9l2,4.3l6.8-2.4l1.9,2.4l-10.8,4.1l-0.4,2.8l-9.9,0.5l-1.9-2.9l-2.9,1.4l1.5,3.9l-1.6,1.6 l-4,3.6l-2.9,0.4l-5,3.9l2.9,3l-1.4,3.4l-7.9-0.5l4,11l11.2-10.4l2,1.1l3.3-3l5.9,4.4l1.4,5.8l3.4-4.8l-5.3-7.3l1.2-1.3l6.6,7.6 l1,5.8l5.5,4l-1-7.9l5.8,7.9l4.4-5.9v5.9l-2,2l-10.7-0.5l-3-2.5l-3.9,3.4l-7.9-2.5l0.5-2.5l-2.5-2.8l-9.8,0.9l-17.7,15.3 l0.4,15.1l8,7l13.7,0.4l6.8,4.4l-2.9,1.9l7,8.3v5.8l-2.6,3.4l8.3,22.6l9.4,0.5l11.7-14.2l0.5-5.5l4.5-3.4l-0.6-7.3l-1.8-1.9 l15.2-22.1l-8.4,0.6l-5.5-4.1l-7.2-14.6l0.4-4h2.9l10.8,20.7l10.3-3.9l4.4-5.5l-4.4-4.3l-4,1.4l-3.9-6.4l23.6,4.3l-0.4,6.6 l2.8,0.9l4,11.2l6.5-1.8v-5.9l8.2-6.4l1.1-4.5h2.4v5l8.4,18.2l-5.9-0.4l9.9,10.8c0.6-1.9,1.2-3.8,1.7-5.7l-1.8-0.2l-1-3l3.4,0.9 c0.3-1,0.5-2.1,0.7-3.1l-4.1-2.7l-1.5-6.4l1.5-0.4l3,5.7l2.1-1.2c0.5-2.9,0.9-5.9,1.2-8.9c0-0.3,0.1-0.6,0.1-0.9 c0.3-3.5,0.5-7,0.5-10.5C264.5,156.8,262.7,145.4,259.4,134.6z M181.9,149.5h-3l-3.9,3l-0.9-3.4l4.4-5.5l2.5,3.2l2.9-0.3 l-0.2-2.6l3.3,0.6l3.6,5.7L181.9,149.5z M201.7,157.9l-0.6-10.4l2.8-2.2l1.4,1.5l-2.7,3.7l3.2,6.4L201.7,157.9z M211.9,150.8 l-0.3-4l2.5-0.3l0.5,4L211.9,150.8z M192.3,219.7l-1.8,6.4l6.4,4.4l4.4-14.1l-2.6-1.6L192.3,219.7z M130.3,134.4l-0.2,0.4l0,0 l-0.3,0.5l3.3,3l3-3.3l-0.5-0.6h0l-3-3.8L130.3,134.4L130.3,134.4z M86.9,200.7l-0.9-7h-7.4l-0.6-6l-9.2-0.3l-4.8-1.8l-6.8,2.9 h-7l-1-5.9l-3.9-0.4l1-5.5l-2.6-1.4l-3.9,2.4H38l-4.1-3.9l4.1-7.3h10.8l2.9,4.4h3.4l-2-6.5l7-5.9l-0.6-3.9l2.9-2.9l3,0.4v-5.3 l17.2-9.8l-2.1-2.5h0l-10-12.1l-15.2-2.5l0,7.3l1.4,1.5l-1.9,5.8h-0.1l-0.5,1.5l-1.3-1.5h-0.1l-5-5.8l-6.4-1.9 c-1,2.5-1.9,5.1-2.7,7.8h0c-3.3,10.8-5.1,22.3-5.1,34.2c0,4.9,0.3,9.7,0.9,14.4l6.5,3.7l3.9-0.4l3,5.9h6.8v5l-2.9,4.4l6.8,17 l6.5,3l-3.8,22c3.1,3.6,6.4,7,9.9,10.2l29.1-31.1l1.1-8.8l3.9-4.5L92,200.7H86.9z M155.8,156.2l3,1.1l-1.2-4L155.8,156.2z M76.3,182.5l-13.9-5.9l-0.9,2.5l12.3,4.4L76.3,182.5z M50.5,176.6l7.5,1.6l1-3l-7.8-2.3L50.5,176.6z M58.1,167.7v3.4l3.9,1.9 L58.1,167.7z M126.9,110.6l-9.8,2.5l5.3,7.9l8.8-6.3L126.9,110.6z M138.8,134.8l-1.4,2.7h6.9l0.3-2.6l0.2-1.7l-4.3-3.5l-2-4.8 l-3.3,3.4l4.5,4.9L138.8,134.8z M123.5,83.7l5.8-4.9l-10.7-8.8l-36.4,4.4c-6.4,4.5-12.2,9.7-17.5,15.4l2.4,3.3l6.5-2l5.9,4.4 l2.9,15.2l7.3,11.3l6.4,0.4l3.5-8.4l14.1-4.3l8.9-13.7L123.5,83.7z M50.9,112.5l1.9-5.5l4.5,0l-1.6,8l12.8,2.3l6.8-7.3 L58.8,96.4c-5,6.3-9.4,13.1-13,20.3l6.5,0.6L50.9,112.5z"/></g><g fill="none" stroke="#F5C825" stroke-width="4" stroke-miterlimit="10" stroke-linecap="round"><path d="M128.5 57L128.5 57"/><path d="M117,53.3c-22.1-6-41.2-4-52.7,7.5c-25.5,25.5-4.4,87.8,47,139.3s113.8,72.5,139.3,47c11.6-11.6,13.6-30.9,7.3-53.4" stroke-dasharray="0,12.1246"/><path d="M256.2 187.9L256.2 187.9"/></g><path fill="#7DC14C" d="M166.5,172.1c0-3.5-2.9-5.1-6.4-5.1H50.9c-3.5,0-6.4,2.9-6.4,6.4V186h122V172.1z"/><circle cx="54.6" cy="176.2" r="2.2" fill="#FFF"/><circle cx="62.9" cy="176.2" r="2.2" fill="#FFF"/><circle cx="71.3" cy="176.2" r="2.2" fill="#FFF"/><path fill="#FFF" d="M50.9,260h109.2c3.5,0,6.4-2.9,6.4-6.4V186h-122v67.6C44.5,257.1,47.4,260,50.9,260z"/><path fill="#D6DCE5" d="M44.5 186H166.5V199H44.5z"/></svg>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/browser/extensions/loop/chrome/content/shared/img/firefox-hello_tour-slide-04.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 310 310"><path fill="#A3D189" fill-rule="evenodd" d="M142.5,55c55.2,0,100,44.8,100,100s-44.8,100-100,100 c-55.2,0-100-44.8-100-100S87.3,55,142.5,55z" clip-rule="evenodd"/><defs><path id="a" d="M267.5,66h-79.4c-13.7-7-29.2-11-45.6-11c-55.2,0-100,44.8-100,100c0,55.2,44.8,100,100,100 c20.7,0,39.9-6.3,55.8-17h69.2V66z"/></defs><clipPath id="b"><use xlink:href="#a" overflow="visible"/></clipPath><g clip-path="url(#b)"><path fill="#D6DCE5" d="M14.5 111H234.5V142H14.5z"/><path fill="#383F44" d="M234.5,90c0-5.5-4.5-10-10-10h-200c-5.5,0-10,4.5-10,10v21h220V90z"/><path fill="#FFF" d="M14.5,219c0,5.5,4.5,10,10,10h200c5.5,0,10-4.5,10-10v-77h-220V219z"/><path fill="#D6DCE5" fill-rule="evenodd" d="M92.5,101c-0.8-4.2-2.1-12-12.6-12H54.1 c-10.4,0-11.8,7.8-12.6,12c-1.2,6.6-3.8,10.1-10.7,10.1c4.6,0,67.8,0,72.5,0C96.3,111.1,93.7,107.6,92.5,101z" clip-rule="evenodd"/><path fill="#FFF" d="M29.5 118H165.5V135H29.5z"/><circle cx="32" cy="126.5" r="10.5" fill="#41484E"/><path fill="#FFF" d="M210.5 119.5c0 .8.7 1.5 1.5 1.5h14c.8 0 1.5-.7 1.5-1.5 0-.8-.7-1.5-1.5-1.5h-14C211.2 118 210.5 118.7 210.5 119.5 210.5 119.5 210.5 118.7 210.5 119.5zM210.5 126.5c0 .8.7 1.5 1.5 1.5h14c.8 0 1.5-.7 1.5-1.5 0-.8-.7-1.5-1.5-1.5h-14C211.2 125 210.5 125.7 210.5 126.5 210.5 126.5 210.5 125.7 210.5 126.5zM210.5 133.5c0 .8.7 1.5 1.5 1.5h14c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5h-14C211.2 132 210.5 132.7 210.5 133.5 210.5 133.5 210.5 132.7 210.5 133.5z"/><path fill="#FFF" fill-rule="evenodd" d="M35.7,125.1h-4.4l2-2c0.3-0.3,0.4-0.8,0.1-1l-0.9-0.9 c-0.2-0.2-0.7-0.2-1,0.1l-4.6,4.7c-0.1,0.1-0.1,0.1-0.1,0.2l0,0c0,0,0,0,0,0c0,0,0,0.1-0.1,0.1c0,0.1-0.1,0.1-0.1,0.2 c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0.1,0,0.1,0.1,0.2c0,0,0,0.1,0.1,0.1c0,0,0,0,0,0l0,0c0,0.1,0.1,0.1,0.1,0.2l4.6,4.7 c0.3,0.3,0.8,0.4,1,0.1l0.9-0.9c0.2-0.2,0.2-0.7-0.1-1l-2-2h4.5c0.4,0,0.7-0.3,0.7-0.7v-1.5C36.4,125.4,36.1,125.1,35.7,125.1z" clip-rule="evenodd"/><circle cx="187.5" cy="127" r="9" fill="#FFF"/><path fill="#0283B1" d="M187.5,114.4c-7.2,0-13,5.1-13,11.3c0,3.1,1.4,5.9,3.8,8c-0.4,1.4-1.2,3.3-2.8,5.2 c0.3,0.5,4.7-1.2,7.9-2.5c1.3,0.4,2.7,0.6,4.1,0.6c7.2,0,13-5.1,13-11.3C200.5,119.5,194.7,114.4,187.5,114.4z M191.4,121.2 c0.9,0,1.7,0.8,1.7,1.7c0,0.9-0.8,1.7-1.7,1.7c-0.9,0-1.7-0.8-1.7-1.7C189.7,121.9,190.4,121.2,191.4,121.2z M183.5,121.2 c0.9,0,1.7,0.8,1.7,1.7c0,0.9-0.8,1.7-1.7,1.7c-1,0-1.7-0.8-1.7-1.7C181.8,121.9,182.6,121.2,183.5,121.2z M187.5,133.6 C187.5,133.6,187.5,133.6,187.5,133.6c-0.1,0-0.1,0-0.1,0c-3.5,0-7.3-2.2-8.2-6c2.3,1.1,5.6,1.5,8.3,1.5c2.7,0,5.9-0.5,8.3-1.5 C194.9,131.4,191,133.6,187.5,133.6z"/></g><path fill="#383F44" d="M195.5,155.8v-19.5l17,12.5l-7.4,1.2l3,7.6l-3.3,1.4l-3.9-6.8L195.5,155.8z"/></svg>
\ No newline at end of file
--- a/browser/extensions/loop/chrome/content/shared/img/glyph-email-16x16.svg
+++ b/browser/extensions/loop/chrome/content/shared/img/glyph-email-16x16.svg
@@ -1,1 +1,1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="#FFF" d="M12 10.4c0 .2-.1.4-.2.5-.1.1-.3.2-.5.2H4.7c-.2 0-.4-.1-.5-.2-.1-.1-.2-.3-.2-.5V6.9c.1.1.3.3.5.4 1 .7 1.8 1.2 2.2 1.5.1.1.3.2.4.3.1.1.2.1.4.2s.3.1.5.1.3 0 .5-.1.3-.1.4-.2c.1-.1.3-.2.4-.3.5-.4 1.2-.9 2.2-1.5.2-.1.4-.3.5-.4v3.5zm-.2-4.2c-.1.2-.3.4-.5.5-1.1.8-1.8 1.3-2.1 1.5 0 0-.1.1-.2.1-.1.2-.2.2-.3.3-.1 0-.1.1-.2.1-.1.1-.2.1-.3.1h-.4c-.1 0-.2-.1-.3-.1-.1-.1-.2-.1-.2-.1-.1-.1-.2-.1-.3-.2-.1-.1-.1-.1-.1-.2-.3-.1-.7-.4-1.2-.8-.5-.3-.8-.5-.9-.6-.2-.1-.4-.3-.6-.5S4 5.9 4 5.7c0-.2.1-.4.2-.6.1-.2.3-.2.5-.2h6.6c.2 0 .4.1.5.2.1.1.2.3.2.5s-.1.4-.2.6z"/></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="#4a4a4a" d="M12 10.4c0 .2-.1.4-.2.5-.1.1-.3.2-.5.2H4.7c-.2 0-.4-.1-.5-.2-.1-.1-.2-.3-.2-.5V6.9c.1.1.3.3.5.4 1 .7 1.8 1.2 2.2 1.5.1.1.3.2.4.3.1.1.2.1.4.2s.3.1.5.1.3 0 .5-.1.3-.1.4-.2c.1-.1.3-.2.4-.3.5-.4 1.2-.9 2.2-1.5.2-.1.4-.3.5-.4v3.5zm-.2-4.2c-.1.2-.3.4-.5.5-1.1.8-1.8 1.3-2.1 1.5 0 0-.1.1-.2.1-.1.2-.2.2-.3.3-.1 0-.1.1-.2.1-.1.1-.2.1-.3.1h-.4c-.1 0-.2-.1-.3-.1-.1-.1-.2-.1-.2-.1-.1-.1-.2-.1-.3-.2-.1-.1-.1-.1-.1-.2-.3-.1-.7-.4-1.2-.8-.5-.3-.8-.5-.9-.6-.2-.1-.4-.3-.6-.5S4 5.9 4 5.7c0-.2.1-.4.2-.6.1-.2.3-.2.5-.2h6.6c.2 0 .4.1.5.2.1.1.2.3.2.5s-.1.4-.2.6z"/></svg>
\ No newline at end of file
--- a/browser/extensions/loop/chrome/content/shared/img/glyph-facebook-16x16.svg
+++ b/browser/extensions/loop/chrome/content/shared/img/glyph-facebook-16x16.svg
@@ -1,1 +1,1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="#FFF" d="M12 11.6c0 .1 0 .2-.1.3s-.2.1-.3.1h-2V8.9h1l.2-1.2H9.5v-.8c0-.2 0-.3.1-.4.1-.1.2-.1.5-.1h.6V5.3h-.9c-.4-.1-.8 0-1.1.3-.3.3-.4.7-.4 1.2v.9h-1v1.2h1V12H4.4c-.1 0-.2 0-.3-.1-.1-.1-.1-.2-.1-.3V4.4c0-.1 0-.2.1-.3.1-.1.2-.1.3-.1h7.1c.1 0 .2 0 .3.1.2.1.2.2.2.3v7.2z"/></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="#4a4a4a" d="M12 11.6c0 .1 0 .2-.1.3s-.2.1-.3.1h-2V8.9h1l.2-1.2H9.5v-.8c0-.2 0-.3.1-.4.1-.1.2-.1.5-.1h.6V5.3h-.9c-.4-.1-.8 0-1.1.3-.3.3-.4.7-.4 1.2v.9h-1v1.2h1V12H4.4c-.1 0-.2 0-.3-.1-.1-.1-.1-.2-.1-.3V4.4c0-.1 0-.2.1-.3.1-.1.2-.1.3-.1h7.1c.1 0 .2 0 .3.1.2.1.2.2.2.3v7.2z"/></svg>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/browser/extensions/loop/chrome/content/shared/img/glyph-help-no-circle-16x16.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="#5a5a5a" d="M10.716 5.643c0 1.943-2.158 1.812-2.158 3.154v.3H6.83v-.37C6.83 6.65 8.74 6.793 8.74 5.81c0-.43-.312-.683-.84-.683-.49 0-.972.24-1.403.73l-1.21-.934C5.966 4.12 6.854 3.64 8.09 3.64c1.75 0 2.626.936 2.626 2.003zm-1.92 5.625c0 .6-.478 1.092-1.078 1.092s-1.08-.492-1.08-1.092c0-.588.48-1.08 1.08-1.08s1.08.492 1.08 1.08z"/></svg>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/loop/chrome/content/shared/img/leave.svg
@@ -0,0 +1,1 @@
+<svg width="13" height="10" viewBox="0 0 13 10" xmlns="http://www.w3.org/2000/svg" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns"><title>Shape Copy</title><desc>Created with Sketch.</desc><path d="M6.302 2.225h-3.067c-.602 0-1.095.49-1.095 1.095v3.287c0 .609.49 1.095 1.095 1.095h3.067v1.55c0 .617.397.811.887.449l5.458-4.036c.498-.368.49-.949 0-1.312l-5.458-4.036c-.498-.368-.887-.161-.887.449v1.46zm-6.302-2.191h5.348v1.095h-4.278v7.668h4.278v1.106h-5.348v-9.869z" sketch:type="MSShapeGroup" fill="#fff"/></svg>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/browser/extensions/loop/chrome/content/shared/img/video-muted-darkgrey.svg
@@ -0,0 +1,1 @@
+<svg width="31" height="24" viewBox="0 0 31 24" xmlns="http://www.w3.org/2000/svg"><g fill="none"><path d="M13.506 17.003h4.478c.554 0 1.033-.202 1.424-.592.404-.403.592-.87.592-1.437v-1.16l2.836 2.836c.089.089.189.126.316.126l.176-.038c.189-.076.277-.215.277-.416v-7.652c0-.189-.088-.327-.277-.416l-.176-.025c-.126 0-.227.038-.316.126l-2.836 2.824v-.671l1.83-1.83c.042-.042.07-.112.07-.182 0-.056-.028-.126-.07-.168l-.644-.644c-.056-.056-.112-.084-.182-.084-.07 0-.126.028-.182.084l-9.652 9.637c-.042.056-.07.112-.07.182 0 .07.028.126.07.182l.644.644c.056.042.112.07.182.07.071 0 .126-.027.182-.07l1.327-1.327zm4.948-8.95c-.15-.034-.307-.05-.471-.05h-4.954c-.567 0-1.034.189-1.437.592-.391.391-.592.869-.592 1.424v4.954c0 .165.017.322.051.471l7.403-7.392z" fill="#333"/></g></svg>
--- a/browser/extensions/loop/chrome/content/shared/js/actions.js
+++ b/browser/extensions/loop/chrome/content/shared/js/actions.js
@@ -126,16 +126,25 @@ loop.shared.actions = (function() {
     ReceivedTextChatMessage: Action.define("receivedTextChatMessage", {
       contentType: String,
       message: String,
       receivedTimestamp: String
       // sentTimestamp: String (optional)
     }),
 
     /**
+     *  Used to send cursor data to the other peer
+     */
+    SendCursorData: Action.define("sendCursorData", {
+      ratioX: Number,
+      ratioY: Number,
+      type: String
+    }),
+
+    /**
      * Notifies that cursor data has been received from the other peer.
      */
     ReceivedCursorData: Action.define("receivedCursorData", {
       ratioX: Number,
       ratioY: Number,
       type: String
     }),
 
@@ -391,21 +400,23 @@ loop.shared.actions = (function() {
       // roomDescription: String, Optional.
     }),
 
     /**
      * Share a room url with Facebook.
      * XXX: should move to some roomActions module - refs bug 1079284
      * @from: where the invitation is shared from.
      *        Possible values ['panel', 'conversation']
-     * @roomUrl: the URL that is shared
+     * @roomUrl: the URL that is shared.
+     * @roomOrigin: the URL browsed when the sharing is started - Optional.
      */
     FacebookShareRoomUrl: Action.define("facebookShareRoomUrl", {
       from: String,
       roomUrl: String
+      // roomOrigin: String
     }),
 
     /**
      * Share a room url via the Social API.
      * XXX: should move to some roomActions module - refs bug 1079284
      * @provider: one of the share-capable Social Providers included
      * @roomUrl: the URL that is shared
      */
--- a/browser/extensions/loop/chrome/content/shared/js/activeRoomStore.js
+++ b/browser/extensions/loop/chrome/content/shared/js/activeRoomStore.js
@@ -27,17 +27,17 @@ loop.store.ROOM_STATES = {
     // The room is full
     FULL: "room-full",
     // The room conversation has ended, displays the feedback view.
     ENDED: "room-ended",
     // The window is closing
     CLOSING: "room-closing"
 };
 
-loop.store.ActiveRoomStore = (function() {
+loop.store.ActiveRoomStore = (function(mozL10n) {
   "use strict";
 
   var sharedActions = loop.shared.actions;
   var crypto = loop.crypto;
   var CHAT_CONTENT_TYPES = loop.shared.utils.CHAT_CONTENT_TYPES;
   var FAILURE_DETAILS = loop.shared.utils.FAILURE_DETAILS;
   var SCREEN_SHARE_STATES = loop.shared.utils.SCREEN_SHARE_STATES;
 
@@ -688,17 +688,18 @@ loop.store.ActiveRoomStore = (function()
 
     /**
      * Handles the action that signifies when media permission has been
      * granted and starts joining the room.
      */
     gotMediaPermission: function() {
       this.setStoreState({ roomState: ROOM_STATES.JOINING });
 
-      loop.request("Rooms:Join", this._storeState.roomToken).then(function(result) {
+      loop.request("Rooms:Join", this._storeState.roomToken,
+                   mozL10n.get("display_name_guest")).then(function(result) {
         if (result.isError) {
           this.dispatchAction(new sharedActions.RoomFailure({
             error: result,
             // This is an explicit flag to avoid the leave happening if join
             // fails. We can't track it on ROOM_STATES.JOINING as the user
             // might choose to leave the room whilst the XHR is in progress
             // which would then mean we'd run the race condition of not
             // notifying the server of a leave.
@@ -1238,9 +1239,9 @@ loop.store.ActiveRoomStore = (function()
         return participants.length > 0;
       }
 
       return false;
     }
   });
 
   return ActiveRoomStore;
-})();
+})(navigator.mozL10n || document.mozL10n);
--- a/browser/extensions/loop/chrome/content/shared/js/models.js
+++ b/browser/extensions/loop/chrome/content/shared/js/models.js
@@ -1,15 +1,15 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 var loop = loop || {};
 loop.shared = loop.shared || {};
-loop.shared.models = (function(l10n) {
+loop.shared.models = (function() {
   "use strict";
 
   /**
    * Notification model.
    */
   var NotificationModel = Backbone.Model.extend({
     defaults: {
       details: "",
@@ -19,76 +19,16 @@ loop.shared.models = (function(l10n) {
       message: ""
     }
   });
 
   /**
    * Notification collection
    */
   var NotificationCollection = Backbone.Collection.extend({
-    model: NotificationModel,
-
-    /**
-     * Adds a warning notification to the stack and renders it.
-     *
-     * @return {String} message
-     */
-    warn: function(message) {
-      this.add({ level: "warning", message: message });
-    },
-
-    /**
-     * Adds a l10n warning notification to the stack and renders it.
-     *
-     * @param  {String} messageId L10n message id
-     */
-    warnL10n: function(messageId) {
-      this.warn(l10n.get(messageId));
-    },
-
-    /**
-     * Adds an error notification to the stack and renders it.
-     *
-     * @return {String} message
-     */
-    error: function(message) {
-      this.add({ level: "error", message: message });
-    },
-
-    /**
-     * Adds a l10n error notification to the stack and renders it.
-     *
-     * @param  {String} messageId L10n message id
-     * @param  {Object} [l10nProps] An object with variables to be interpolated
-     *                  into the translation. All members' values must be
-     *                  strings or numbers.
-     */
-    errorL10n: function(messageId, l10nProps) {
-      this.error(l10n.get(messageId, l10nProps));
-    },
-
-    /**
-     * Adds a success notification to the stack and renders it.
-     *
-     * @return {String} message
-     */
-    success: function(message) {
-      this.add({ level: "success", message: message });
-    },
-
-    /**
-     * Adds a l10n success notification to the stack and renders it.
-     *
-     * @param  {String} messageId L10n message id
-     * @param  {Object} [l10nProps] An object with variables to be interpolated
-     *                  into the translation. All members' values must be
-     *                  strings or numbers.
-     */
-    successL10n: function(messageId, l10nProps) {
-      this.success(l10n.get(messageId, l10nProps));
-    }
+    model: NotificationModel
   });
 
   return {
     NotificationCollection: NotificationCollection,
     NotificationModel: NotificationModel
   };
-})(navigator.mozL10n || document.mozL10n);
+})();
--- a/browser/extensions/loop/chrome/content/shared/js/remoteCursorStore.js
+++ b/browser/extensions/loop/chrome/content/shared/js/remoteCursorStore.js
@@ -1,25 +1,29 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 var loop = loop || {};
 loop.store = loop.store || {};
 
+/**
+ *  Manages the different cursors' events being exchanged between the parts.
+ */
 loop.store.RemoteCursorStore = (function() {
   "use strict";
 
   var CURSOR_MESSAGE_TYPES = loop.shared.utils.CURSOR_MESSAGE_TYPES;
 
   /**
    * A store to handle remote cursors events.
    */
   var RemoteCursorStore = loop.store.createStore({
     actions: [
+      "sendCursorData",
       "receivedCursorData",
       "videoDimensionsChanged",
       "videoScreenStreamChanged"
     ],
 
     /**
      * Initializes the store.
      *
@@ -31,54 +35,74 @@ loop.store.RemoteCursorStore = (function
     initialize: function(options) {
       options = options || {};
 
       if (!options.sdkDriver) {
         throw new Error("Missing option sdkDriver");
       }
 
       this._sdkDriver = options.sdkDriver;
-      loop.subscribe("CursorPositionChange", this._cursorPositionChangeListener.bind(this));
+
+      loop.subscribe("CursorPositionChange",
+                     this._cursorPositionChangeListener.bind(this));
     },
 
     /**
      * Returns initial state data for this active room.
      */
     getInitialStoreState: function() {
       return {
         realVideoSize: null,
         remoteCursorPosition: null
       };
     },
 
     /**
      * Sends cursor position through the sdk.
      *
-     * @param {Object} event An object containing the cursor position and stream dimensions
-     *                       It should contains:
+     * @param {Object} event An object containing the cursor position and
+     *                       stream dimensions. It should contain:
      *                       - ratioX: Left position. Number between 0 and 1.
      *                       - ratioY: Top position. Number between 0 and 1.
      */
     _cursorPositionChangeListener: function(event) {
-      this._sdkDriver.sendCursorMessage({
+      this.sendCursorData({
         ratioX: event.ratioX,
         ratioY: event.ratioY,
         type: CURSOR_MESSAGE_TYPES.POSITION
       });
     },
 
     /**
-     * Receives cursor data.
+     * Sends the cursor data to the SDK for broadcasting.
+     *
+     * @param {sharedActions.SendCursorData}
+     *  actionData Contains the updated information for the cursor's position
+     *      {
+     *       ratioX {[0-1]} Cursor's position on the X axis
+     *       ratioY {[0-1]} Cursor's position on the Y axis
+     *       type   {String} Type of the data being sent
+     *      }
+     */
+    sendCursorData: function(actionData) {
+      switch (actionData.type) {
+        case CURSOR_MESSAGE_TYPES.POSITION:
+          this._sdkDriver.sendCursorMessage(actionData);
+          break;
+      }
+    },
+
+    /**
+     * Receives cursor data and updates the store.
      *
      * @param {sharedActions.receivedCursorData} actionData
      */
     receivedCursorData: function(actionData) {
       switch (actionData.type) {
         case CURSOR_MESSAGE_TYPES.POSITION:
-          // TODO: handle cursor position if it's desktop instead of standalone
           this.setStoreState({
             remoteCursorPosition: {
               ratioX: actionData.ratioX,
               ratioY: actionData.ratioY
             }
           });
           break;
       }
@@ -98,18 +122,20 @@ loop.store.RemoteCursorStore = (function
         realVideoSize: {
           height: actionData.dimensions.height,
           width: actionData.dimensions.width
         }
       });
     },
 
     /**
-     * Listen to screen stream changes.
-     *
+     * Listen to screen stream changes. Because the cursor's position is likely
+     * to be different respect to the new screen size, it's better to delete the
+     * previous position and keep waiting for the next one.
+
      * @param {sharedActions.VideoScreenStreamChanged} actionData
      */
     videoScreenStreamChanged: function(actionData) {
       if (actionData.hasVideo) {
         return;
       }
 
       this.setStoreState({
--- a/browser/extensions/loop/chrome/content/shared/js/utils.js
+++ b/browser/extensions/loop/chrome/content/shared/js/utils.js
@@ -1,17 +1,29 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /* global Components */
 
 var loop = loop || {};
 loop.shared = loop.shared || {};
-var inChrome = typeof Components != "undefined" && "utils" in Components;
+var inChrome = typeof Components != "undefined" &&
+  "utils" in Components;
+
+// The slideshow is special, and currently loads with chrome privs, but
+// needs to use this module like the rest of the content does.  Once we make
+// it load remotely, this can go away.
+if (inChrome) {
+  if (typeof window != "undefined" &&
+    window.location.href === "chrome://loop/content/panels/slideshow.html") {
+
+    inChrome = false;
+  }
+}
 
 (function() {
   "use strict";
 
   /**
    * Root object, by default set to window if we're not in chrome code.
    * @type {DOMWindow|Object}
    */
@@ -186,16 +198,23 @@ var inChrome = typeof Components != "und
     if (/Windows Phone/i.test(platform)) {
       return "windows_phone";
     }
 
     if (/BlackBerry/i.test(platform)) {
       return "blackberry";
     }
 
+    // Checks if the platform is Android. Due to the difficulties of detecting an
+    // android device, we need to rely on window.navigator.userAgent instead of
+    // using window.navigator.platform.
+    if (rootNavigator.userAgent.toLowerCase().indexOf("android") > -1) {
+      return "android";
+    }
+
     return null;
   }
 
   /**
    * Helper to get the Operating System name.
    *
    * @param {String}  [platform]    The platform this is running on, will fall
    *                                back to navigator.oscpu and navigator.userAgent
--- a/browser/extensions/loop/chrome/content/shared/js/views.js
+++ b/browser/extensions/loop/chrome/content/shared/js/views.js
@@ -42,59 +42,59 @@ loop.shared.views = function (_, mozL10n
 
   /**
    * Media control button.
    *
    * Required props:
    * - {String}   scope   Media scope, can be "local" or "remote".
    * - {String}   type    Media type, can be "audio" or "video".
    * - {Function} action  Function to be executed on click.
-   * - {Enabled}  enabled Stream activation status (default: true).
+   * - {Bool} muted Stream activation status (default: false).
    */
   var MediaControlButton = React.createClass({
     displayName: "MediaControlButton",
 
     propTypes: {
       action: React.PropTypes.func.isRequired,
-      enabled: React.PropTypes.bool.isRequired,
+      muted: React.PropTypes.bool.isRequired,
       scope: React.PropTypes.string.isRequired,
       title: React.PropTypes.string,
       type: React.PropTypes.string.isRequired,
       visible: React.PropTypes.bool.isRequired
     },
 
     getDefaultProps: function () {
-      return { enabled: true, visible: true };
+      return { muted: false, visible: true };
     },
 
     handleClick: function () {
       this.props.action();
     },
 
     _getClasses: function () {
       var cx = classNames;
       // classes
       var classesObj = {
         "btn": true,
         "media-control": true,
         "transparent-button": true,
         "local-media": this.props.scope === "local",
-        "muted": !this.props.enabled,
+        "muted": this.props.muted,
         "hide": !this.props.visible
       };
       classesObj["btn-mute-" + this.props.type] = true;
       return cx(classesObj);
     },
 
     _getTitle: function () {
       if (this.props.title) {
         return this.props.title;
       }
 
-      var prefix = this.props.enabled ? "mute" : "unmute";
+      var prefix = this.props.muted ? "unmute" : "mute";
       var suffix = this.props.type === "video" ? "button_title2" : "button_title";
       var msgId = [prefix, this.props.scope, this.props.type, suffix].join("_");
       return mozL10n.get(msgId);
     },
 
     render: function () {
       return React.createElement("button", { className: this._getClasses(),
         onClick: this.handleClick,
@@ -121,33 +121,24 @@ loop.shared.views = function (_, mozL10n
         idle: false
       };
     },
 
     propTypes: {
       audio: React.PropTypes.object.isRequired,
       dispatcher: React.PropTypes.instanceOf(loop.Dispatcher).isRequired,
       hangup: React.PropTypes.func.isRequired,
-      publishStream: React.PropTypes.func.isRequired,
       showHangup: React.PropTypes.bool,
       video: React.PropTypes.object.isRequired
     },
 
     handleClickHangup: function () {
       this.props.hangup();
     },
 
-    handleToggleVideo: function () {
-      this.props.publishStream("video", !this.props.video.enabled);
-    },
-
-    handleToggleAudio: function () {
-      this.props.publishStream("audio", !this.props.audio.enabled);
-    },
-
     componentDidMount: function () {
       this.userActivity = false;
       this.startIdleCountDown();
       document.body.addEventListener("mousemove", this._onBodyMouseMove);
     },
 
     componentWillUnmount: function () {
       clearTimeout(this.inactivityTimeout);
@@ -225,30 +216,66 @@ loop.shared.views = function (_, mozL10n
             title: mozL10n.get("rooms_leave_button_label") })
         ) : null,
         React.createElement(
           "li",
           { className: "conversation-toolbar-btn-box" },
           React.createElement(
             "div",
             { className: mediaButtonGroupCssClasses },
-            React.createElement(MediaControlButton, { action: this.handleToggleVideo,
-              enabled: this.props.video.enabled,
-              scope: "local", type: "video",
-              visible: this.props.video.visible }),
-            React.createElement(MediaControlButton, { action: this.handleToggleAudio,
-              enabled: this.props.audio.enabled,
-              scope: "local", type: "audio",
-              visible: this.props.audio.visible })
+            React.createElement(VideoMuteButton, { dispatcher: this.props.dispatcher,
+              muted: !this.props.video.enabled }),
+            React.createElement(AudioMuteButton, { dispatcher: this.props.dispatcher,
+              muted: !this.props.audio.enabled })
           )
         )
       );
     }
   });
 
+  var AudioMuteButton = React.createClass({
+    displayName: "AudioMuteButton",
+
+    propTypes: {
+      dispatcher: React.PropTypes.instanceOf(loop.Dispatcher),
+      muted: React.PropTypes.bool.isRequired
+    },
+
+    toggleAudio: function () {
+      this.props.dispatcher.dispatch(new sharedActions.SetMute({ type: "audio", enabled: this.props.muted }));
+    },
+
+    render: function () {
+      return React.createElement(MediaControlButton, { action: this.toggleAudio,
+        muted: this.props.muted,
+        scope: "local",
+        type: "audio" });
+    }
+  });
+
+  var VideoMuteButton = React.createClass({
+    displayName: "VideoMuteButton",
+
+    propTypes: {
+      dispatcher: React.PropTypes.instanceOf(loop.Dispatcher),
+      muted: React.PropTypes.bool.isRequired
+    },
+
+    toggleVideo: function () {
+      this.props.dispatcher.dispatch(new sharedActions.SetMute({ type: "video", enabled: this.props.muted }));
+    },
+
+    render: function () {
+      return React.createElement(MediaControlButton, { action: this.toggleVideo,
+        muted: this.props.muted,
+        scope: "local",
+        type: "video" });
+    }
+  });
+
   /**
    * Notification view.
    */
   var NotificationView = React.createClass({
     displayName: "NotificationView",
 
     mixins: [Backbone.Events],
 
@@ -628,50 +655,53 @@ loop.shared.views = function (_, mozL10n
   var MediaView = React.createClass({
     displayName: "MediaView",
 
     // srcMediaElement should be ok for a shallow comparison, so we are safe
     // to use the pure render mixin here.
     mixins: [React.addons.PureRenderMixin],
 
     propTypes: {
+      cursorStore: React.PropTypes.instanceOf(loop.store.RemoteCursorStore),
+      dispatcher: React.PropTypes.object,
       displayAvatar: React.PropTypes.bool.isRequired,
       isLoading: React.PropTypes.bool.isRequired,
       mediaType: React.PropTypes.string.isRequired,
       posterUrl: React.PropTypes.string,
-      shouldRenderRemoteCursor: React.PropTypes.bool,
+      shareCursor: React.PropTypes.bool,
       // Expecting "local" or "remote".
       srcMediaElement: React.PropTypes.object
     },
 
     getInitialState: function () {
       return {
         videoElementSize: null
       };
     },
 
     componentDidMount: function () {
       if (!this.props.displayAvatar) {
         this.attachVideo(this.props.srcMediaElement);
       }
 
-      if (this.props.shouldRenderRemoteCursor) {
+      if (this.props.shareCursor) {
         this.handleVideoDimensions();
         window.addEventListener("resize", this.handleVideoDimensions);
       }
     },
 
     componentWillUnmount: function () {
       var videoElement = this.getDOMNode().querySelector("video");
-      if (!this.props.shouldRenderRemoteCursor || !videoElement) {
+      if (!this.props.shareCursor || !videoElement) {
         return;
       }
 
       window.removeEventListener("resize", this.handleVideoDimensions);
       videoElement.removeEventListener("loadeddata", this.handleVideoDimensions);
+      videoElement.removeEventListener("mousemove", this.handleMousemove);
     },
 
     componentDidUpdate: function () {
       if (!this.props.displayAvatar) {
         this.attachVideo(this.props.srcMediaElement);
       }
     },
 
@@ -684,16 +714,52 @@ loop.shared.views = function (_, mozL10n
       this.setState({
         videoElementSize: {
           clientWidth: videoElement.clientWidth,
           clientHeight: videoElement.clientHeight
         }
       });
     },
 
+    MIN_CURSOR_DELTA: 3,
+    MIN_CURSOR_INTERVAL: 100,
+    lastCursorTime: 0,
+    lastCursorX: -1,
+    lastCursorY: -1,
+
+    handleMouseMove: function (event) {
+      // Only update every so often.
+      var now = Date.now();
+      if (now - this.lastCursorTime < this.MIN_CURSOR_INTERVAL) {
+        return;
+      }
+      this.lastCursorTime = now;
+
+      var storeState = this.props.cursorStore.getStoreState();
+
+      var deltaX = event.clientX - storeState.videoLetterboxing.left;
+      var deltaY = event.clientY - storeState.videoLetterboxing.top;
+
+      // Skip the update if cursor is out of bounds
+      if (deltaX < 0 || deltaX > storeState.streamVideoWidth || deltaY < 0 || deltaY > storeState.streamVideoHeight ||
+      // or the cursor didn't move the minimum.
+      Math.abs(deltaX - this.lastCursorX) < this.MIN_CURSOR_DELTA && Math.abs(deltaY - this.lastCursorY) < this.MIN_CURSOR_DELTA) {
+        return;
+      }
+
+      this.lastCursorX = deltaX;
+      this.lastCursorY = deltaY;
+
+      this.props.dispatcher.dispatch(new sharedActions.SendCursorData({
+        ratioX: deltaX / storeState.streamVideoWidth,
+        ratioY: deltaY / storeState.streamVideoHeight,
+        type: loop.shared.utils.CURSOR_MESSAGE_TYPES.POSITION
+      }));
+    },
+
     /**
      * Attaches a video stream from a donor video element to this component's
      * video element if the component is displaying one.
      *
      * @param {Object} srcMediaElement The src video object to clone the stream
      *                                from.
      *
      * XXX need to have a corresponding detachVideo or change this to syncVideo
@@ -701,26 +767,26 @@ loop.shared.views = function (_, mozL10n
      */
     attachVideo: function (srcMediaElement) {
       if (!srcMediaElement) {
         // Not got anything to display.
         return;
       }
 
       var videoElement = this.getDOMNode().querySelector("video");
-
-      if (this.props.shouldRenderRemoteCursor) {
-        videoElement.addEventListener("loadeddata", this.handleVideoDimensions);
-      }
-
       if (!videoElement || videoElement.tagName.toLowerCase() !== "video") {
         // Must be displaying the avatar view, so don't try and attach video.
         return;
       }
 
+      if (this.props.shareCursor) {
+        videoElement.addEventListener("loadeddata", this.handleVideoDimensions);
+        videoElement.addEventListener("mousemove", this.handleMouseMove);
+      }
+
       // Set the src of our video element
       var attrName = "";
       if ("srcObject" in videoElement) {
         // srcObject is according to the standard.
         attrName = "srcObject";
       } else if ("mozSrcObject" in videoElement) {
         // mozSrcObject is for Firefox
         attrName = "mozSrcObject";
@@ -731,16 +797,17 @@ loop.shared.views = function (_, mozL10n
         console.error("Error attaching stream to element - no supported" + "attribute found");
         return;
       }
 
       // If the object hasn't changed it, then don't reattach it.
       if (videoElement[attrName] !== srcMediaElement[attrName]) {
         videoElement[attrName] = srcMediaElement[attrName];
       }
+
       videoElement.play();
     },
 
     render: function () {
       if (this.props.isLoading) {
         return React.createElement(LoadingView, null);
       }
 
@@ -764,30 +831,31 @@ loop.shared.views = function (_, mozL10n
       // control of the audio, but due to the current method of not rendering
       // the element at all when video is muted we have to rely on the hidden
       // dom element in the sdk driver to play the audio.
       // We might want to consider changing this if we add UI controls relating
       // to the remote audio at some stage in the future.
       return React.createElement(
         "div",
         { className: "remote-video-box" },
-        this.state.videoElementSize && this.props.shouldRenderRemoteCursor ? React.createElement(RemoteCursorView, {
+        this.state.videoElementSize && this.props.shareCursor ? React.createElement(RemoteCursorView, {
           videoElementSize: this.state.videoElementSize }) : null,
         React.createElement("video", _extends({}, optionalProps, {
           className: this.props.mediaType + "-video",
           muted: true }))
       );
     }
   });
 
   var MediaLayoutView = React.createClass({
     displayName: "MediaLayoutView",
 
     propTypes: {
       children: React.PropTypes.node,
+      cursorStore: React.PropTypes.instanceOf(loop.store.RemoteCursorStore).isRequired,
       dispatcher: React.PropTypes.instanceOf(loop.Dispatcher).isRequired,
       displayScreenShare: React.PropTypes.bool.isRequired,
       isLocalLoading: React.PropTypes.bool.isRequired,
       isRemoteLoading: React.PropTypes.bool.isRequired,
       isScreenShareLoading: React.PropTypes.bool.isRequired,
       // The poster URLs are for UI-showcase testing and development.
       localPosterUrl: React.PropTypes.string,
       localSrcMediaElement: React.PropTypes.object,
@@ -898,21 +966,23 @@ loop.shared.views = function (_, mozL10n
               srcMediaElement: this.props.remoteSrcMediaElement }),
             this.state.localMediaAboslutelyPositioned ? this.renderLocalVideo() : null,
             this.props.displayScreenShare ? null : this.props.children
           ),
           React.createElement(
             "div",
             { className: screenShareStreamClasses },
             React.createElement(MediaView, {
+              cursorStore: this.props.cursorStore,
+              dispatcher: this.props.dispatcher,
               displayAvatar: false,
               isLoading: this.props.isScreenShareLoading,
               mediaType: "screen-share",
               posterUrl: this.props.screenSharePosterUrl,
-              shouldRenderRemoteCursor: true,
+              shareCursor: true,
               srcMediaElement: this.props.screenShareMediaElement }),
             this.props.displayScreenShare ? this.props.children : null
           ),
           React.createElement(loop.shared.views.chat.TextChatView, {
             dispatcher: this.props.dispatcher,
             showInitialContext: this.props.showInitialContext,
             useDesktopPaths: this.props.useDesktopPaths }),
           this.state.localMediaAboslutelyPositioned ? null : this.renderLocalVideo()
@@ -926,20 +996,17 @@ loop.shared.views = function (_, mozL10n
 
     mixins: [React.addons.PureRenderMixin, loop.store.StoreMixin("remoteCursorStore")],
 
     propTypes: {
       videoElementSize: React.PropTypes.object
     },
 
     getInitialState: function () {
-      return {
-        realVideoSize: null,
-        videoLetterboxing: null
-      };
+      return this.getStoreState();
     },
 
     componentWillMount: function () {
       if (!this.state.realVideoSize) {
         return;
       }
 
       this._calculateVideoLetterboxing();
@@ -958,17 +1025,17 @@ loop.shared.views = function (_, mozL10n
     componentWillUpdate: function (nextProps, nextState) {
       if (!this.state.realVideoSize || !nextState.realVideoSize) {
         return;
       }
 
       if (!this.state.videoLetterboxing) {
         // If this is the first time we receive the event, we must calculate the
         // video letterboxing.
-        this._calculateVideoLetterboxing();
+        this._calculateVideoLetterboxing(nextState.realVideoSize);
         return;
       }
 
       if (nextState.realVideoSize.width !== this.state.realVideoSize.width || nextState.realVideoSize.height !== this.state.realVideoSize.height) {
         // In this case link generator has resized his window so we need to
         // recalculate the video letterboxing.
         this._calculateVideoLetterboxing(nextState.realVideoSize);
       }
@@ -987,17 +1054,17 @@ loop.shared.views = function (_, mozL10n
 
       // If the video element ratio is "wider" than the video content, then the
       // full client height will be used and letterbox will be on the sides.
       // E.g., video element is 3:2 and stream is 1:1, so we end up with 2:2.
       var isWider = clientRatio > realVideoRatio;
       var streamVideoHeight = isWider ? clientHeight : clientWidth / realVideoRatio;
       var streamVideoWidth = isWider ? clientHeight * realVideoRatio : clientWidth;
 
-      this.setState({
+      this.getStore().setStoreState({
         videoLetterboxing: {
           left: (clientWidth - streamVideoWidth) / 2,
           top: (clientHeight - streamVideoHeight) / 2
         },
         streamVideoHeight: streamVideoHeight,
         streamVideoWidth: streamVideoWidth
       });
     },
@@ -1023,22 +1090,25 @@ loop.shared.views = function (_, mozL10n
         return null;
       }
 
       return React.createElement("div", { className: "remote-cursor", style: this.calculateCursorPosition() });
     }
   });
 
   return {
+    AudioMuteButton: AudioMuteButton,
     AvatarView: AvatarView,
     Button: Button,
     ButtonGroup: ButtonGroup,
     Checkbox: Checkbox,
     ContextUrlView: ContextUrlView,
     ConversationToolbar: ConversationToolbar,
+    HangUpControlButton: HangUpControlButton,
     MediaControlButton: MediaControlButton,
     MediaLayoutView: MediaLayoutView,
     MediaView: MediaView,
     LoadingView: LoadingView,
     NotificationListView: NotificationListView,
-    RemoteCursorView: RemoteCursorView
+    RemoteCursorView: RemoteCursorView,
+    VideoMuteButton: VideoMuteButton
   };
 }(_, navigator.mozL10n || document.mozL10n);
--- a/browser/extensions/loop/chrome/content/shared/test/activeRoomStore_test.js
+++ b/browser/extensions/loop/chrome/content/shared/test/activeRoomStore_test.js
@@ -63,16 +63,20 @@ describe("loop.store.ActiveRoomStore", f
     standaloneMediaRestore = loop.standaloneMedia;
     loop.standaloneMedia = {
       multiplexGum: fakeMultiplexGum
     };
 
     store = new loop.store.ActiveRoomStore(dispatcher, {
       sdkDriver: fakeSdkDriver
     });
+
+    sandbox.stub(document.mozL10n ? document.mozL10n : navigator.mozL10n, "get", function(x) {
+      return x;
+    });
   });
 
   afterEach(function() {
     sandbox.restore();
     LoopMochaUtils.restore();
     loop.standaloneMedia = standaloneMediaRestore;
   });
 
@@ -998,17 +1002,17 @@ describe("loop.store.ActiveRoomStore", f
 
       expect(store.getStoreState().roomState).eql(ROOM_STATES.JOINING);
     });
 
     it("should call rooms.join on mozLoop", function() {
       store.gotMediaPermission();
 
       sinon.assert.calledOnce(requestStubs["Rooms:Join"]);
-      sinon.assert.calledWith(requestStubs["Rooms:Join"], "tokenFake");
+      sinon.assert.calledWith(requestStubs["Rooms:Join"], "tokenFake", "display_name_guest");
     });
 
     it("should dispatch `JoinedRoom` on success", function() {
       store.gotMediaPermission();
 
       sinon.assert.calledOnce(dispatcher.dispatch);
       sinon.assert.calledWith(dispatcher.dispatch,
         new sharedActions.JoinedRoom(responseData));
--- a/browser/extensions/loop/chrome/content/shared/test/index.html
+++ b/browser/extensions/loop/chrome/content/shared/test/index.html
@@ -38,47 +38,50 @@
     /*global chai, mocha */
     chai.config.includeStack = true;
     mocha.setup({ui: 'bdd', timeout: 10000});
   </script>
 
   <!-- App scripts -->
   <script src="/shared/js/loopapi-client.js"></script>
   <script src="/shared/js/utils.js"></script>
+  <script src="/shared/js/urlRegExps.js"></script>
   <script src="/shared/js/models.js"></script>
   <script src="/shared/js/mixins.js"></script>
   <script src="/shared/js/crypto.js"></script>
   <script src="/shared/js/validate.js"></script>
   <script src="/shared/js/actions.js"></script>
   <script src="/shared/js/dispatcher.js"></script>
   <script src="/shared/js/otSdkDriver.js"></script>
+
+  <!-- Stores need to be loaded before the views that uses them -->
   <script src="/shared/js/store.js"></script>
   <script src="/shared/js/activeRoomStore.js"></script>
-  <script src="/shared/js/views.js"></script>
   <script src="/shared/js/textChatStore.js"></script>
-  <script src="/shared/js/textChatView.js"></script>
-  <script src="/shared/js/urlRegExps.js"></script>
-  <script src="/shared/js/linkifiedTextView.js"></script>
   <script src="/shared/js/remoteCursorStore.js"></script>
 
+  <!-- Views -->
+  <script src="/shared/js/views.js"></script>
+  <script src="/shared/js/textChatView.js"></script>
+  <script src="/shared/js/linkifiedTextView.js"></script>
+
   <!-- Test scripts -->
-  <script src="models_test.js"></script>
   <script src="mixins_test.js"></script>
   <script src="utils_test.js"></script>
   <script src="crypto_test.js"></script>
-  <script src="views_test.js"></script>
   <script src="validate_test.js"></script>
   <script src="dispatcher_test.js"></script>
-  <script src="activeRoomStore_test.js"></script>
   <script src="otSdkDriver_test.js"></script>
   <script src="store_test.js"></script>
+  <script src="activeRoomStore_test.js"></script>
   <script src="textChatStore_test.js"></script>
+  <script src="remoteCursorStore_test.js"></script>
+  <script src="views_test.js"></script>
   <script src="textChatView_test.js"></script>
   <script src="linkifiedTextView_test.js"></script>
   <script src="loopapi-client_test.js"></script>
-  <script src="remoteCursorStore_test.js"></script>
 
   <script>
     LoopMochaUtils.addErrorCheckingTests();
     LoopMochaUtils.runTests();
   </script>
 </body>
 </html>
deleted file mode 100644
--- a/browser/extensions/loop/chrome/content/shared/test/models_test.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-describe("loop.shared.models", function() {
-  "use strict";
-
-  var expect = chai.expect;
-  var l10n = navigator.mozL10n || document.mozL10n;
-  var sharedModels = loop.shared.models;
-  var sandbox;
-
-  beforeEach(function() {
-    sandbox = sinon.sandbox.create();
-  });
-
-  afterEach(function() {
-    sandbox.restore();
-  });
-
-  describe("NotificationCollection", function() {
-    var collection;
-
-    beforeEach(function() {
-      collection = new sharedModels.NotificationCollection();
-      sandbox.stub(l10n, "get", function(x, y) {
-        return "translated:" + x + (y ? ":" + y : "");
-      });
-    });
-
-    describe("#warn", function() {
-      it("should add a warning notification to the stack", function() {
-        collection.warn("watch out");
-
-        expect(collection).to.have.length.of(1);
-        expect(collection.at(0).get("level")).eql("warning");
-        expect(collection.at(0).get("message")).eql("watch out");
-      });
-    });
-
-    describe("#warnL10n", function() {
-      it("should warn using a l10n string id", function() {
-        collection.warnL10n("fakeId");
-
-        expect(collection).to.have.length.of(1);
-        expect(collection.at(0).get("level")).eql("warning");
-        expect(collection.at(0).get("message")).eql("translated:fakeId");
-      });
-    });
-
-    describe("#error", function() {
-      it("should add an error notification to the stack", function() {
-        collection.error("wrong");
-
-        expect(collection).to.have.length.of(1);
-        expect(collection.at(0).get("level")).eql("error");
-        expect(collection.at(0).get("message")).eql("wrong");
-      });
-    });
-
-    describe("#errorL10n", function() {
-      it("should notify an error using a l10n string id", function() {
-        collection.errorL10n("fakeId");
-
-        expect(collection).to.have.length.of(1);
-        expect(collection.at(0).get("level")).eql("error");
-        expect(collection.at(0).get("message")).eql("translated:fakeId");
-      });
-
-      it("should notify an error using a l10n string id + l10n properties",
-        function() {
-          collection.errorL10n("fakeId", "fakeProp");
-
-          expect(collection).to.have.length.of(1);
-          expect(collection.at(0).get("level")).eql("error");
-          expect(collection.at(0).get("message")).eql("translated:fakeId:fakeProp");
-      });
-    });
-  });
-});
--- a/browser/extensions/loop/chrome/content/shared/test/remoteCursorStore_test.js
+++ b/browser/extensions/loop/chrome/content/shared/test/remoteCursorStore_test.js
@@ -61,17 +61,62 @@ describe("loop.store.RemoteCursorStore",
       sinon.assert.calledWith(fakeSdkDriver.sendCursorMessage, {
         type: CURSOR_MESSAGE_TYPES.POSITION,
         ratioX: fakeEvent.ratioX,
         ratioY: fakeEvent.ratioY
       });
     });
   });
 
+  describe("#sendCursorData", function() {
+    it("should do nothing if not a proper event", function() {
+      var fakeData = {
+        ratioX: 10,
+        ratioY: 10,
+        type: "not-a-position-event"
+      };
+
+      store.sendCursorData(new sharedActions.SendCursorData(fakeData));
+
+      sinon.assert.notCalled(fakeSdkDriver.sendCursorMessage);
+    });
+
+    it("should send cursor data through the sdk", function() {
+      var fakeData = {
+        ratioX: 10,
+        ratioY: 10,
+        type: CURSOR_MESSAGE_TYPES.POSITION
+      };
+
+      store.sendCursorData(new sharedActions.SendCursorData(fakeData));
+
+      sinon.assert.calledOnce(fakeSdkDriver.sendCursorMessage);
+      sinon.assert.calledWith(fakeSdkDriver.sendCursorMessage, {
+        name: "sendCursorData",
+        type: fakeData.type,
+        ratioX: fakeData.ratioX,
+        ratioY: fakeData.ratioY
+      });
+    });
+  });
+
   describe("#receivedCursorData", function() {
+
+    it("should do nothing if not a proper event", function() {
+      sandbox.stub(store, "setStoreState");
+
+      store.receivedCursorData(new sharedActions.ReceivedCursorData({
+        ratioX: 10,
+        ratioY: 10,
+        type: "not-a-position-event"
+      }));
+
+      sinon.assert.notCalled(store.setStoreState);
+    });
+
     it("should save the state", function() {
       store.receivedCursorData(new sharedActions.ReceivedCursorData({
         type: CURSOR_MESSAGE_TYPES.POSITION,
         ratioX: 10,
         ratioY: 10
       }));
 
       expect(store.getStoreState().remoteCursorPosition).eql({
--- a/browser/extensions/loop/chrome/content/shared/test/views_test.js
+++ b/browser/extensions/loop/chrome/content/shared/test/views_test.js
@@ -45,190 +45,236 @@ describe("loop.shared.views", function()
 
   describe("MediaControlButton", function() {
     it("should render an enabled local audio button", function() {
       var comp = TestUtils.renderIntoDocument(
         React.createElement(sharedViews.MediaControlButton, {
           scope: "local",
           type: "audio",
           action: function() {},
-          enabled: true
+          muted: false
         }));
 
       expect(comp.getDOMNode().classList.contains("muted")).eql(false);
     });
 
     it("should render a muted local audio button", function() {
       var comp = TestUtils.renderIntoDocument(
           React.createElement(sharedViews.MediaControlButton, {
           scope: "local",
           type: "audio",
           action: function() {},
-          enabled: false
+          muted: true
         }));
 
       expect(comp.getDOMNode().classList.contains("muted")).eql(true);
     });
 
     it("should render an enabled local video button", function() {
       var comp = TestUtils.renderIntoDocument(
           React.createElement(sharedViews.MediaControlButton, {
           scope: "local",
           type: "video",
           action: function() {},
-          enabled: true
+          muted: false
         }));
 
       expect(comp.getDOMNode().classList.contains("muted")).eql(false);
     });
 
     it("should render a muted local video button", function() {
       var comp = TestUtils.renderIntoDocument(
         React.createElement(sharedViews.MediaControlButton, {
           scope: "local",
           type: "video",
           action: function() {},
-          enabled: false
+          muted: true
         }));
 
       expect(comp.getDOMNode().classList.contains("muted")).eql(true);
     });
   });
 
+  describe("AudioMuteButton", function() {
+    it("should set the muted class when not enabled", function() {
+      var comp = TestUtils.renderIntoDocument(
+        React.createElement(sharedViews.AudioMuteButton, {
+          muted: true
+        }));
+
+      var node = comp.getDOMNode();
+      expect(node.classList.contains("muted")).eql(true);
+    });
+
+    it("should not set the muted class when enabled", function() {
+      var comp = TestUtils.renderIntoDocument(
+        React.createElement(sharedViews.AudioMuteButton, {
+          muted: false
+        }));
+
+      var node = comp.getDOMNode();
+      expect(node.classList.contains("muted")).eql(false);
+    });
+
+    it("should dispatch SetMute('audio', false) if clicked when audio is disabled",
+      function() {
+        var comp = TestUtils.renderIntoDocument(
+          React.createElement(sharedViews.AudioMuteButton, {
+            dispatcher: dispatcher,
+            muted: false
+          }));
+
+        TestUtils.Simulate.click(comp.getDOMNode());
+
+        sinon.assert.calledOnce(dispatcher.dispatch);
+        sinon.assert.calledWithExactly(dispatcher.dispatch,
+          new sharedActions.SetMute({ type: "audio", enabled: false })
+        );
+      });
+
+    it("should dispatch SetMute('audio', true) if clicked when audio is enabled",
+      function() {
+        var comp = TestUtils.renderIntoDocument(
+          React.createElement(sharedViews.AudioMuteButton, {
+            dispatcher: dispatcher,
+            muted: true
+          }));
+
+        TestUtils.Simulate.click(comp.getDOMNode());
+
+        sinon.assert.calledOnce(dispatcher.dispatch);
+        sinon.assert.calledWithExactly(dispatcher.dispatch,
+          new sharedActions.SetMute({ type: "audio", enabled: true })
+        );
+      });
+  });
+
+describe("VideoMuteButton", function() {
+    it("should set the muted class when not enabled", function() {
+      var comp = TestUtils.renderIntoDocument(
+        React.createElement(sharedViews.VideoMuteButton, {
+          muted: true
+        }));
+
+      var node = comp.getDOMNode();
+      expect(node.classList.contains("muted")).eql(true);
+    });
+
+    it("should not set the muted class when enabled", function() {
+      var comp = TestUtils.renderIntoDocument(
+        React.createElement(sharedViews.VideoMuteButton, {
+          muted: false
+        }));
+
+      var node = comp.getDOMNode();
+      expect(node.classList.contains("muted")).eql(false);
+    });
+
+    it("should dispatch SetMute('audio', false) if clicked when audio is disabled",
+      function() {
+        var comp = TestUtils.renderIntoDocument(
+          React.createElement(sharedViews.VideoMuteButton, {
+            dispatcher: dispatcher,
+            muted: false
+          }));
+
+        TestUtils.Simulate.click(comp.getDOMNode());
+
+        sinon.assert.calledOnce(dispatcher.dispatch);
+        sinon.assert.calledWithExactly(dispatcher.dispatch,
+          new sharedActions.SetMute({ type: "video", enabled: false })
+        );
+      });
+
+    it("should dispatch SetMute('audio', true) if clicked when audio is enabled",
+      function() {
+        var comp = TestUtils.renderIntoDocument(
+          React.createElement(sharedViews.VideoMuteButton, {
+            dispatcher: dispatcher,
+            muted: true
+          }));
+
+        TestUtils.Simulate.click(comp.getDOMNode());
+
+        sinon.assert.calledOnce(dispatcher.dispatch);
+        sinon.assert.calledWithExactly(dispatcher.dispatch,
+          new sharedActions.SetMute({ type: "video", enabled: true })
+        );
+      });
+  });
+
   describe("ConversationToolbar", function() {
-    var hangup, publishStream;
+    var hangup;
 
     function mountTestComponent(props) {
       props = _.extend({
         dispatcher: dispatcher
       }, props || {});
       return TestUtils.renderIntoDocument(
         React.createElement(sharedViews.ConversationToolbar, props));
     }
 
     beforeEach(function() {
       hangup = sandbox.stub();
-      publishStream = sandbox.stub();
     });
 
     it("should start no idle", function() {
       var comp = mountTestComponent({
         hangupButtonLabel: "foo",
-        hangup: hangup,
-        publishStream: publishStream
+        hangup: hangup
       });
       expect(comp.getDOMNode().classList.contains("idle")).eql(false);
     });
 
     it("should be on idle state after 6 seconds", function() {
       var comp = mountTestComponent({
         hangupButtonLabel: "foo",
-        hangup: hangup,
-        publishStream: publishStream
+        hangup: hangup
       });
       expect(comp.getDOMNode().classList.contains("idle")).eql(false);
 
       clock.tick(6001);
       expect(comp.getDOMNode().classList.contains("idle")).eql(true);
     });
 
     it("should remove idle state when the user moves the mouse", function() {
       var comp = mountTestComponent({
         hangupButtonLabel: "foo",
-        hangup: hangup,
-        publishStream: publishStream
+        hangup: hangup
       });
 
       clock.tick(6001);
       expect(comp.getDOMNode().classList.contains("idle")).eql(true);
 
       document.body.dispatchEvent(new CustomEvent("mousemove"));
 
       expect(comp.getDOMNode().classList.contains("idle")).eql(false);
     });
 
     it("should accept a showHangup optional prop", function() {
       var comp = mountTestComponent({
         showHangup: false,
-        hangup: hangup,
-        publishStream: publishStream
+        hangup: hangup
       });
 
       expect(comp.getDOMNode().querySelector(".btn-hangup-entry")).to.eql(null);
     });
 
     it("should hangup when hangup button is clicked", function() {
       var comp = mountTestComponent({
         hangup: hangup,
-        publishStream: publishStream,
         audio: { enabled: true }
       });
 
       TestUtils.Simulate.click(
         comp.getDOMNode().querySelector(".btn-hangup"));
 
       sinon.assert.calledOnce(hangup);
       sinon.assert.calledWithExactly(hangup);
     });
-
-    it("should unpublish audio when audio mute btn is clicked", function() {
-      var comp = mountTestComponent({
-        hangup: hangup,
-        publishStream: publishStream,
-        audio: { enabled: true }
-      });
-
-      TestUtils.Simulate.click(
-        comp.getDOMNode().querySelector(".btn-mute-audio"));
-
-      sinon.assert.calledOnce(publishStream);
-      sinon.assert.calledWithExactly(publishStream, "audio", false);
-    });
-
-    it("should publish audio when audio mute btn is clicked", function() {
-      var comp = mountTestComponent({
-        hangup: hangup,
-        publishStream: publishStream,
-        audio: { enabled: false }
-      });
-
-      TestUtils.Simulate.click(
-        comp.getDOMNode().querySelector(".btn-mute-audio"));
-
-      sinon.assert.calledOnce(publishStream);
-      sinon.assert.calledWithExactly(publishStream, "audio", true);
-    });
-
-    it("should unpublish video when video mute btn is clicked", function() {
-      var comp = mountTestComponent({
-        hangup: hangup,
-        publishStream: publishStream,
-        video: { enabled: true }
-      });
-
-      TestUtils.Simulate.click(
-        comp.getDOMNode().querySelector(".btn-mute-video"));
-
-      sinon.assert.calledOnce(publishStream);
-      sinon.assert.calledWithExactly(publishStream, "video", false);
-    });
-
-    it("should publish video when video mute btn is clicked", function() {
-      var comp = mountTestComponent({
-        hangup: hangup,
-        publishStream: publishStream,
-        video: { enabled: false }
-      });
-
-      TestUtils.Simulate.click(
-        comp.getDOMNode().querySelector(".btn-mute-video"));
-
-      sinon.assert.calledOnce(publishStream);
-      sinon.assert.calledWithExactly(publishStream, "video", true);
-    });
   });
 
   describe("NotificationListView", function() {
     var coll, view, testNotif;
 
     function mountTestComponent(props) {
       props = _.extend({
         key: 0
@@ -513,25 +559,33 @@ describe("loop.shared.views", function()
       TestUtils.Simulate.click(linkNode);
 
       sinon.assert.notCalled(dispatcher.dispatch);
     });
   });
 
   describe("MediaView", function() {
     var view;
+    var remoteCursorStore;
 
     function mountTestComponent(props) {
       props = _.extend({
         isLoading: false
       }, props || {});
       return TestUtils.renderIntoDocument(
         React.createElement(sharedViews.MediaView, props));
     }
 
+    beforeEach(function() {
+      remoteCursorStore = new loop.store.RemoteCursorStore(dispatcher, {
+        sdkDriver: {}
+      });
+      loop.store.StoreMixin.register({ remoteCursorStore: remoteCursorStore });
+    });
+
     it("should display an avatar view", function() {
       view = mountTestComponent({
         displayAvatar: true,
         mediaType: "local"
       });
 
       TestUtils.findRenderedComponentWithType(view,
         sharedViews.AvatarView);
@@ -575,35 +629,38 @@ describe("loop.shared.views", function()
           done(ex);
         }
       }, 10);
     });
 
     // We test this function by itself, as otherwise we'd be into creating fake
     // streams etc.
     describe("#attachVideo", function() {
-      var fakeViewElement, fakeVideoElement;
+      var fakeViewElement,
+          fakeVideoElement;
 
       beforeEach(function() {
         fakeVideoElement = {
           play: sinon.stub(),
           tagName: "VIDEO",
-          addEventListener: function() {}
+          addEventListener: sinon.stub()
         };
 
         fakeViewElement = {
           tagName: "DIV",
           querySelector: function() {
             return fakeVideoElement;
           }
         };
 
         view = mountTestComponent({
+          cursorStore: remoteCursorStore,
           displayAvatar: false,
           mediaType: "local",
+          shareCursor: true,
           srcMediaElement: {
             fake: 1
           }
         });
       });
 
       it("should not throw if no source object is specified", function() {
         expect(function() {
@@ -611,17 +668,18 @@ describe("loop.shared.views", function()
         }).to.not.Throw();
       });
 
       it("should not throw if the element is not a video object", function() {
         sinon.stub(view, "getDOMNode").returns({
           tagName: "DIV",
           querySelector: function() {
             return {
-              tagName: "DIV"
+              tagName: "DIV",
+              addEventListener: sinon.stub()
             };
           }
         });
 
         expect(function() {
           view.attachVideo({});
         }).to.not.Throw();
       });
@@ -633,16 +691,28 @@ describe("loop.shared.views", function()
 
         view.attachVideo({
           srcObject: { fake: 1 }
         });
 
         expect(fakeVideoElement.srcObject).eql({ fake: 1 });
       });
 
+      it("should attach events to the video", function() {
+        fakeVideoElement.srcObject = null;
+        sinon.stub(view, "getDOMNode").returns(fakeViewElement);
+        view.attachVideo({
+          src: { fake: 1 }
+        });
+
+        sinon.assert.calledTwice(fakeVideoElement.addEventListener);
+        sinon.assert.calledWith(fakeVideoElement.addEventListener, "loadeddata");
+        sinon.assert.calledWith(fakeVideoElement.addEventListener, "mousemove");
+      });
+
       it("should attach a video object for Firefox", function() {
         fakeVideoElement.mozSrcObject = null;
 
         sinon.stub(view, "getDOMNode").returns(fakeViewElement);
 
         view.attachVideo({
           mozSrcObject: { fake: 2 }
         });
@@ -700,20 +770,23 @@ describe("loop.shared.views", function()
           clientWidth: fakeVideoElement.clientWidth,
           clientHeight: fakeVideoElement.clientHeight
         });
       });
     });
   });
 
   describe("MediaLayoutView", function() {
-    var textChatStore, view;
+    var textChatStore,
+        remoteCursorStore,
+        view;
 
     function mountTestComponent(extraProps) {
       var defaultProps = {
+        cursorStore: remoteCursorStore,
         dispatcher: dispatcher,
         displayScreenShare: false,
         isLocalLoading: false,
         isRemoteLoading: false,
         isScreenShareLoading: false,
         localVideoMuted: false,
         matchMedia: window.matchMedia,
         renderRemoteVideo: false,
@@ -725,16 +798,19 @@ describe("loop.shared.views", function()
         React.createElement(sharedViews.MediaLayoutView,
           _.extend(defaultProps, extraProps)));
     }
 
     beforeEach(function() {
       textChatStore = new loop.store.TextChatStore(dispatcher, {
         sdkDriver: {}
       });
+      remoteCursorStore = new loop.store.RemoteCursorStore(dispatcher, {
+        sdkDriver: {}
+      });
 
       loop.store.StoreMixin.register({ textChatStore: textChatStore });
     });
 
     it("should mark the remote stream as the focus stream when not displaying screen share", function() {
       view = mountTestComponent({
         displayScreenShare: false
       });
--- a/browser/extensions/loop/chrome/locale/az/loop.properties
+++ b/browser/extensions/loop/chrome/locale/az/loop.properties
@@ -21,41 +21,60 @@ loopMenuItem_accesskey=t
 sign_in_again_title_line_one=Lütfən təkrar daxil olun
 sign_in_again_title_line_two2={{clientShortname2}} işlətməyə davam edə bilmək üçün
 sign_in_again_button=Daxil ol
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2={{clientSuperShortname}} səyyahını Qonaq kimi işlət
 
 panel_browse_with_friend_button=Bu səhifəni yoldaşınla gəz
-panel_stop_sharing_tabs_button=Vərəqlərinizi paylaşmağı durdurun
+panel_disconnect_button=Ayrıl
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Web səhifələri yoldaşlarınızla birlikdə gəzmək üçün Hello düyməsinə klikləyin.
+first_time_experience_subheading_button_above=Web səhifələri yoldaşlarınızla birlikdə gəzmək üçün yuxarıdakı düyməyə klikləyin.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Birlikdə planlayın, işləyin, əylənin.
+first_time_experience_content2=İşləri birlikdə görmək üçün işlədin: planlayın, gülün, işləyin.
 first_time_experience_button_label2=Necə işlədiyini görün
 
+## First Time Experience Slides
+fte_slide_1_title=Web səhifələrini yoldaşlarınızla birlikdə gəzin
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=İstər səyahət planlayın, istərsə də hədiyyə alın, {{clientShortname2}} daha tez seçim etməyinizə kömək edəcək.
+fte_slide_2_title=Eyni səhifədə olun
+fte_slide_2_copy=Daxili yazı və video söhbəti işlədərək fikirləri paylaşın, seçimləri qarşılaşdırın və razılığa gəlin.
+fte_slide_3_title=Keçid göndərməklə yoldaşınızı dəvət edin
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} əksər masaüstü səyyahları ilə işləyir. Hesabın olması vacib deyil və hər kəs pulsuz qoşula bilər.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Başlamaq üçün {{clientSuperShortname}} ikonunu tapın
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Müzakirə etmək istədiyiniz səhifəni tapdığınızda keçidi yaratmaq üçün {{brandShortname}} səyyahındakı ikona klikləyin. Daha sonra istədiyiniz yöntəmlə yoldaşınıza göndərin!
+
 invite_header_text_bold=Birilərini bu səhifəyi sizinlə gəzməyə dəvət edin!
+invite_header_text_bold2=Yoldaşınızı sizə qoşulmağa dəvət edin!
 invite_header_text3=Firefox Hello-nu işlətmək 2 addımdan ibarətdir, yoldaşınıza keçidi göndərin və Web-də bərabər səyahət edin!
+invite_header_text4=Keçidi paylaşın və Web-i birlikdə gəzməyə başlayın.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Keçidi köçür
 invite_copied_link_button=Köçürüldü!
 invite_email_link_button=Keçidi e-poçtla göndər
 invite_facebook_button3=Facebook
 invite_your_link=Keçidiniz:
 
-# Status text
-display_name_guest=Qonaq
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Seans başa çatdı. Daha əvvəl yaratdığınız və paylaşdığınız bütün ünvanlar artıq işləməyəcək.
 could_not_authenticate=Kimlik təsdiqlənə bilmədi
 password_changed_question=Şifrənizi dəyişdirdinizmi?
 try_again_later=Lütfən daha sonra tekrar yoxlayın
 could_not_connect=Serverə bağlanıla bilmədi
@@ -176,39 +195,26 @@ room_name_untitled_page=Adsız Səhifə
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Hələlik! Bu paylaşılmış sessiyaya istədiyiniz vaxt Hello panelindən qayıda bilərsiz.
 door_hanger_prompt_name=Rahat yadda qalan ad vermək istərdiniz? Hazırki adı:
 door_hanger_button=Tamam
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Yoldaşınız daxil olduqda üzərinə kliklədiyiniz hər bir vərəqi görəcəklər.
 infobar_screenshare_browser_message2=Vərəqlərinizi paylaşırsınız. Üzərinə kliklədiyiniz hər vərəq yoldaşlarınız tərəfindən görünəcək
-infobar_screenshare_paused_browser_message=Vərəq paylaşımına fasilə verildi
-infobar_button_gotit_label=Bildin!
-infobar_button_gotit_accesskey=G
-infobar_button_pause_label=Fasilə ver
-infobar_button_pause_accesskey=P
-infobar_button_restart_label=Yenidən başlat
+infobar_screenshare_browser_message3=Artıq vərəqlərinizi paylaşırsınız. Yoldaşınız üzərinə kliklədiyiniz hər bir vərəqi görə biləcək.
+infobar_screenshare_stop_sharing_message=Artıq vərəqlərinizi paylaşmırsınız
+infobar_button_restart_label2=Paylaşmanı yenidən başlat
 infobar_button_restart_accesskey=e
-infobar_button_resume_label=Davam et
-infobar_button_resume_accesskey=R
-infobar_button_stop_label=Dayandır
+infobar_button_stop_label2=Paylaşmanı dayandır
 infobar_button_stop_accesskey=S
-infobar_menuitem_dontshowagain_label=Bunu bir daha göstərmə
-infobar_menuitem_dontshowagain_accesskey=D
-
-# Context in conversation strings
-
-## LOCALIZATION NOTE(no_conversations_message_heading2): Title shown when user
-## has no conversations available.
-no_conversations_message_heading2=Hələlik söhbət yoxdur.
-## LOCALIZATION NOTE(no_conversations_start_message2): Subheading inviting the
-## user to start a new conversation.
-no_conversations_start_message2=Yenisini başlat!
+infobar_button_disconnect_label=Ayrıl
+infobar_button_disconnect_accesskey=D
 
 # E10s not supported strings
 
 e10s_not_supported_button_label=Yeni Pəncərə Aç
 e10s_not_supported_subheading={{brandShortname}} multi-proses pəncərədə işləmir.
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
@@ -241,15 +247,18 @@ retry_call_button=Təkrarla
 rooms_leave_button_label=Ayrıl
 
 rooms_panel_title=Söhbət seçin və ya yenisini başladın
 
 rooms_room_full_call_to_action_label={{clientShortname}} haqqında ətraflı öyrənin »
 rooms_room_full_call_to_action_nonFx_label=Öz söhbətinizi başlatmaq üçün {{brandShortname}} endirin
 rooms_room_full_label=Bu söhbətdə artıq 2 nəfər var.
 rooms_room_join_label=Söhbətə qoşul
-rooms_room_joined_label=Kimsə söhbətə qoşuldu!
+rooms_room_joined_owner_connected_label2=Yoldaşınız artıq qoşuludur və vərəqlərinizi görə biləcəklər.
+rooms_room_joined_owner_not_connected_label=Yoldaşınız {{roomURLHostname}} ünvanını sizində gəzmək üçün gözləyir.
 
 self_view_hidden_message=Özünü göstərmə gizlədilib amma hələ də göndərilir. göstərmək üçün pəncərə ölçülərini dəyişin
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} sizin ölkədə icazə verilmir.
+
+display_name_guest=Qonaq
--- a/browser/extensions/loop/chrome/locale/bg/loop.properties
+++ b/browser/extensions/loop/chrome/locale/bg/loop.properties
@@ -1,47 +1,59 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 # Panel Strings
 
+clientSuperShortname=Hello
 
 ## LOCALIZATION_NOTE(loopMenuItem_label): Label of the menu item that is placed
 ## inside the browser 'Tools' menu. Use the unicode ellipsis char, \u2026, or
 ## use "..." if \u2026 doesn't suit traditions in your locale.
 
 ## LOCALIZATION_NOTE(sign_in_again_title_line_one, sign_in_again_title_line_two2):
 ## These are displayed together at the top of the panel when a user is needed to
 ## sign-in again. The emphesis is on the first line to get the user to sign-in again,
 ## and this is displayed in slightly larger font. Please arrange as necessary for
 ## your locale.
 ## {{clientShortname2}} will be replaced by the brand name for either string.
+sign_in_again_button=Вписване
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 
+panel_disconnect_button=Изключване
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 
+## First Time Experience Slides
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 
-# Status text
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 
 ## LOCALIZATION NOTE(retry_button): Displayed when there is an error to retry
 ## the appropriate action.
+retry_button=Нов опит
 
 ## LOCALIZATION NOTE (share_email_body7): In this item, don't translate the
 ## part between {{..}} and leave the \n\n part alone
 ## LOCALIZATION NOTE (share_email_body_context3): In this item, don't translate
 ## the part between {{..}} and leave the \n\n part alone.
 ## LOCALIZATION NOTE (share_email_footer2): Common footer content for both email types
 ## LOCALIZATION NOTE (share_tweeet): In this item, don't translate the part
 ## between {{..}}. Please keep the text below 117 characters to make sure it fits
@@ -92,23 +104,18 @@ hangup_button_caption2=Изход
 ## an abusive user.
 
 
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 
 # Infobar strings
 
-
-# Context in conversation strings
-
-## LOCALIZATION NOTE(no_conversations_message_heading2): Title shown when user
-## has no conversations available.
-## LOCALIZATION NOTE(no_conversations_start_message2): Subheading inviting the
-## user to start a new conversation.
+infobar_button_disconnect_label=Изключване
+infobar_button_disconnect_accesskey=И
 
 # E10s not supported strings
 
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 ## LOCALIZATION NOTE: In this file, don't translate the part between {{..}}
@@ -139,15 +146,18 @@ retry_call_button=Нов опит
 rooms_leave_button_label=Напускане
 
 rooms_panel_title=Изберете разговор или започнете нов
 
 rooms_room_full_call_to_action_label=Научете още за {{clientShortname}} »
 rooms_room_full_call_to_action_nonFx_label=Изтеглете {{brandShortname}}, за да започнете свой
 rooms_room_full_label=Вече има двама души в този разговор.
 rooms_room_join_label=Включване в разговора
-rooms_room_joined_label=Някой се присъедини към разговора!
+rooms_room_joined_owner_connected_label2=Ваш приятел е вече свързан и може да вижда подпрозорците ви.
+rooms_room_joined_owner_not_connected_label=Ваш приятел ви чака да посетите {{roomURLHostname}} заедно.
 
 self_view_hidden_message=Какво виждат другите е скрито, но се изпраща; преоразмерете прозореца, за да го видите
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} е недостъпен във вашата държава.
+
+display_name_guest=Гост
--- a/browser/extensions/loop/chrome/locale/bn-BD/loop.properties
+++ b/browser/extensions/loop/chrome/locale/bn-BD/loop.properties
@@ -20,57 +20,82 @@ loopMenuItem_accesskey=t
 ## {{clientShortname2}} will be replaced by the brand name for either string.
 sign_in_again_title_line_one=অনুগ্রহ করে পুনরায় সাইন ইন করুন
 sign_in_again_title_line_two2=ব্যবহার অব্যহত রাখতে {{clientShortname2}}
 sign_in_again_button=সাইন ইন
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=অতিথি হিসেবে {{clientSuperShortname}} ব্যবহার করুন
 
+panel_browse_with_friend_button=বন্ধুর সাথে পাতাটি ব্রাউজ করুন।
+panel_disconnect_button=বিচ্ছিন্ন
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
+first_time_experience_subheading2=বন্ধুর সাথে ওয়েব পেজ ব্রাউজ করতে Hello বোতাম চাপুন।
+first_time_experience_subheading_button_above=বন্ধুর সাথে ওয়েব পেজ ব্রাউজ করতে Hello বোতাম চাপুন।
+
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
+## ways to use Hello project.
+first_time_experience_content=একসাথে পরিকল্পনা করতে, কাজ করতে, আনন্দ করতে - এটি ব্যবহার করুন।
+first_time_experience_content2=একসাথে পরিকল্পনা করতে, কাজ করতে, আনন্দ করতে - এটি ব্যবহার করুন।
+first_time_experience_button_label2=দেখুন এটা কিভাবে কাজ করে
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
-## ways to use Hello project.
+## First Time Experience Slides
+fte_slide_1_title=বন্ধুর সাথে পাতাটি ব্রাউজ করুন
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_2_title=একই পাতায় পেতে
+fte_slide_2_copy=কোন আইডিয়া শেয়ার করতে, বিকল্পগুলো তুলনা করছে এবং একটি সিধান্তে আসতে বিল্ট-ইন টেক্সট অথবা ভিডিও চ্যাট ব্যবহার করুন।
+fte_slide_3_title=লিঙ্ক শেয়ার করে বন্ধুদের আলাপে আমন্ত্রণ জানান
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
 
+invite_header_text_bold=আপনার সাথে এই পাতা ব্রাউজে যোগদানে কাউকে আমন্ত্রণ জানান!
+invite_header_text_bold2=কাউকে আমন্ত্রণ জানান আপনার সাথে যোগ দিতে ।
+invite_header_text3=ফায়ারফক্স হ্যালো ব্যবহার করতে দুজনের প্রয়োজন হয়, আপনার সাথে ওয়েব ব্রাউজ করতে আপনার বন্ধুকে লিঙ্ক পাঠান।
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=লিঙ্ক কপি করুন
 invite_copied_link_button=কপি করা হয়েছে!
 invite_email_link_button=ইমেইল লিঙ্ক
 invite_facebook_button3=ফেসবুক
 invite_your_link=আপনার লিঙ্ক:
 
-# Status text
-display_name_guest=অতিথি
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
+session_expired_error_description=সেশন মেয়াদ উত্তীর্ণ হয়েছে। পূর্বে আপনার তৈরী এবং শেয়ারকৃত সকল URLs আর কাজ করবে না।
+could_not_authenticate=প্রমাণ করা যায়নি
 password_changed_question=আপনি আপনার পাসওয়ার্ড পরিবর্তন করেছিলেন?
 try_again_later=অনুগ্রহ করে পরে আবার চেষ্টা করুন
 could_not_connect=সার্ভারে সংযোগ করা যাচ্ছেনা
 check_internet_connection=আপনার ইন্টারনেট সংযোগ পরীক্ষা করুন
 login_expired=আপনার লগইন মেয়াদ উত্তীর্ণ হয়েছে
 service_not_available=এই সময়ে পরিষেবা সেবাটি পাওয়া যাচ্ছে না
+problem_accessing_account=আপনার অ্যাকাউন্ট ব্যবহার করতে সমস্যা হয়েছে
 
 ## LOCALIZATION NOTE(retry_button): Displayed when there is an error to retry
 ## the appropriate action.
 retry_button=পুনরায় চেষ্টা করুন
 
 share_email_subject7=একসাথে ওয়েব ব্রাউজ করতে আপনার নিমন্ত্রণ
 ## LOCALIZATION NOTE (share_email_body7): In this item, don't translate the
 ## part between {{..}} and leave the \n\n part alone
 share_email_body7=ফায়ারফক্স হ্যালোতে আপনার কোন বন্ধু অপেক্ষা করছে। সংযুক্ত হতে এবং একসাথে ব্রাউজ করতে লিঙ্কটি ক্লিক করুনঃ {{callUrl}}
 ## LOCALIZATION NOTE (share_email_body_context3): In this item, don't translate
 ## the part between {{..}} and leave the \n\n part alone.
 share_email_body_context3=ফায়ারফক্স হ্যালোতে আপনার কোন বন্ধু অপেক্ষা করছে। সংযুক্ত হতে এবং একসাথে {{title}} ব্রাউজ করতে লিঙ্কটি ক্লিক করুনঃ {{callUrl}}
 ## LOCALIZATION NOTE (share_email_footer2): Common footer content for both email types
+share_email_footer2=\n\n____________\nFirefox Hello আপনাকে বন্ধুর সাথে মিলে ওয়েব ব্রাউজ করতে দেয়। এটি ব্যবহার করুন যা কিছু আপনি সম্পন্ন করতে : একত্রে পরিকল্পনা করুন, একত্রে কাজ করুন, একত্রে আনন্দ করুন। আরও জানতে দেখুন http://www.firefox.com/hello
 ## LOCALIZATION NOTE (share_tweeet): In this item, don't translate the part
 ## between {{..}}. Please keep the text below 117 characters to make sure it fits
 ## in a tweet.
 share_tweet={{clientShortname2}} এ একটি ভিডিও কথোপকথনের জন্য আমার সাথে যোগ দিন!
 
 share_add_service_button=একটি সার্ভিস যুক্ত করুন
 
 ## LOCALIZATION NOTE (copy_link_menuitem, email_link_menuitem, delete_conversation_menuitem):
@@ -122,53 +147,72 @@ contact_offline_title=এই ব্যক্তিটি অনলাইনে নেই
 ## when the call didn't go through.
 call_timeout_notification_text=আপনার কলটি হয়নি।
 
 ## LOCALIZATION NOTE (cancel_button):
 ## This button is displayed when a call has failed.
 cancel_button=বাতিল
 rejoin_button=আলাপে পুনরায় যুক্ত হন
 
+cannot_start_call_session_not_ready=কলটি শুরু করা যাবে না, সেশন প্রস্তুত নয়।
+network_disconnected=আকস্মিকভাবে নেটওয়ার্ক সংযোগটি বিচ্ছিন্ন হয়েছে।
+connection_error_see_console_notification=কল ব্যর্থ; বিস্তারিত জানতে কনসোল দেখুন।
+no_media_failure_message=কোন ক্যামেরা বা মাইক্রোফোন খুঁজে পাওয়া যায়নি।
+ice_failure_message=সংযোগে ব্যর্থ। আপনার ফায়ারওয়াল হয়তো কল ব্লক করছে।
 
 ## LOCALIZATION NOTE (legal_text_and_links3): In this item, don't translate the
 ## parts between {{..}} because these will be replaced with links with the labels
 ## from legal_text_tos and legal_text_privacy. clientShortname will be replaced
 ## by the brand name.
+legal_text_and_links3={{clientShortname}} ব্যবহার করে অাপনি {{terms_of_use}} অার {{privacy_notice}} সাথে একমত হবেন।
 legal_text_tos=ব্যবহারের শর্তাবলী
 legal_text_privacy=গোপনীয়তা ঘোষণা
 
 ## LOCALIZATION NOTE (powered_by_beforeLogo, powered_by_afterLogo):
 ## These 2 strings are displayed before and after a 'Telefonica'
 ## logo.
 powered_by_beforeLogo=নিবেদন করছে
 powered_by_afterLogo=
 
 ## LOCALIZATION_NOTE (feedback_rejoin_button): Displayed on the feedback form after
 ## a signed-in to signed-in user call.
 feedback_rejoin_button=পুনরায় যোগ দিন
 ## LOCALIZATION NOTE (feedback_report_user_button): Used to report a user in the case of
 ## an abusive user.
 feedback_report_user_button=ব্যবহারকারীকে রিপোর্ট করুন
+feedback_window_heading=কেমন ছিল আপনার আলাপ?
+feedback_request_button=মতামত প্রদান করুন
 
+tour_label=ভ্রমণ
 
+rooms_list_recently_browsed2=সম্প্রতি ব্রাউজকৃত
+rooms_list_currently_browsing2=বর্তমানে ব্রাউজরত
+rooms_signout_alert=উন্মুক্ত কথোপকথন বন্ধ করে দেওয়া হবে
+room_name_untitled_page=শিরোনামহীন পাতা
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
+door_hanger_return=আবার দেখা হবে! Hello প্যানেলের মাধ্যমে আপনি এই শেয়ারকৃত সেশনে যেকোন সময় ফিরে আসতে পারবেন।
+door_hanger_prompt_name=সহজভাবে মনে রাখার জন্য কোনো নাম দিতে চান? বর্তমান নাম:
+door_hanger_button=ঠিক আছে
 
 # Infobar strings
 
-
-# Context in conversation strings
-
-## LOCALIZATION NOTE(no_conversations_message_heading2): Title shown when user
-## has no conversations available.
-## LOCALIZATION NOTE(no_conversations_start_message2): Subheading inviting the
-## user to start a new conversation.
+infobar_screenshare_browser_message2=আপনি আপনার ট্যাব শেয়ার করছেন। যেকোনো ট্যাব ক্লিক করলে তা আপনার বন্ধু দেখতে পারবে।
+infobar_screenshare_stop_sharing_message=আপনি আপনার ট্যাব আর শেয়ার করছেন না
+infobar_button_restart_label2=শেয়ার করা পুনরায় শুরু করুন
+infobar_button_restart_accesskey=R
+infobar_button_stop_label2=শেয়ার করা বন্ধ করুন
+infobar_button_stop_accesskey=S
+infobar_button_disconnect_label=বিচ্ছিন্ন
+infobar_button_disconnect_accesskey=D
 
 # E10s not supported strings
 
+e10s_not_supported_button_label=নতুন উইন্ডো খুলুন
+e10s_not_supported_subheading={{brandShortname}} মাল্টি-প্রসেস উইন্ডোতে কাজ করে না।
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 ## LOCALIZATION NOTE: In this file, don't translate the part between {{..}}
 
 # Text chat strings
 chat_textbox_placeholder=এখানে টাইপ করুন…
@@ -196,15 +240,16 @@ retry_call_button=পুনরায় চেষ্টা করুন
 rooms_leave_button_label=ত্যাগ করুন
 
 rooms_panel_title=একটি আলাপন নির্বাচন করুন অথবা নতুন শুরু করুন
 
 rooms_room_full_call_to_action_label={{clientShortname}} সম্বন্ধে আরো জানুন »
 rooms_room_full_call_to_action_nonFx_label=আপনিও শুরু করতে ডাউনলোড করুন {{brandShortname}}
 rooms_room_full_label=এই আলাপে ইতিমধ্যে দুইজন ব্যক্তি আছেন।
 rooms_room_join_label=আালাপে যোগ দিন
-rooms_room_joined_label=কেউ একজন আলাপে যুক্ত হয়েছেন!
+rooms_room_joined_owner_connected_label2=আপনার বন্ধু এখন সংযুক্ত হয়েছেন এবং আপনার ট্যাব দেখতে পারবেন।
+rooms_room_joined_owner_not_connected_label=আপনার বন্ধু আপনার সাথে {{roomURLHostname}} ব্রাউজ করতে অপেক্ষা করছেন।
 
 self_view_hidden_message=সেলফ-ভিউ লুকানো কিন্তু এখনো ছবি পাঠাবে; দেখাতে উইন্ডোর আকার পরিবর্তন করুন
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} আপনার দেশের বিদ্যমান নয়।
--- a/browser/extensions/loop/chrome/locale/cs/loop.properties
+++ b/browser/extensions/loop/chrome/locale/cs/loop.properties
@@ -23,39 +23,47 @@ sign_in_again_title_line_two2=nadále používat {{clientShortname2}}
 sign_in_again_button=Přihlásit se
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Použít {{clientSuperShortname}} jako host
 
 panel_browse_with_friend_button=Prohlédnout si tuto stránku spolu s přítelem
 panel_disconnect_button=Odpojit
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Klepněte na tlačítko Hello a prohlížejte si web spolu s přítelem.
+first_time_experience_subheading_button_above=Klepněte na tlačítko výše a prohlížejte si web s přítelem.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Použijte jej pro společné plánování, práci i zábavu.
 first_time_experience_button_label2=Podívejte se, jak to funguje
 
+## First Time Experience Slides
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+
 invite_header_text_bold=Pozvěte někoho, kdo bude prohlížet tuto stránku s vámi!
 invite_header_text3=K používání Firefox Hello jsou potřeba dva, takže pošlete kamarádovi odkaz, aby si prohlížel web s vámi!
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Kopírovat odkaz
 invite_copied_link_button=Zkopírováno!
 invite_email_link_button=Poslat odkaz e-mailem
 invite_facebook_button3=Facebook
 invite_your_link=Váš odkaz:
 
-# Status text
-display_name_guest=Host
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Relace vypršela. Všechna URL, která jste dříve vytvořili a sdíleli, nyní nebudou fungovat.
 could_not_authenticate=Autentizace se nezdařila
 password_changed_question=Změnili jste své heslo?
 try_again_later=Zkuste to prosím znovu později
 could_not_connect=Nepodařilo se připojit k serveru
@@ -177,33 +185,39 @@ room_name_untitled_page=Stránka bez názvu
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Na viděnou! K této sdílené relaci se můžete kdykoliv vrátit pomocí panelu Hello.
 door_hanger_prompt_name=Chcete ji pro snazší zapamatování pojmenovat? Aktuální název:
 door_hanger_button=OK
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Jakmile se vaší přátelé připojí, budou moci vidět všechny panely, na které klepnete.
 infobar_screenshare_browser_message2=Sdílíte své panely. Jakýkoliv panel, na který klepnete, může být viděn vašimi přáteli
+infobar_screenshare_browser_message3=Nyní spolu sdílíte své panely. Váš přítel uvidí každý panel, na který klepnete.
+infobar_screenshare_stop_sharing_message=Už nadále nesdílíte své panely
+infobar_button_restart_label2=Restartovat sdílení
 infobar_button_restart_accesskey=e
+infobar_button_stop_label2=Zastavit sdílení
 infobar_button_stop_accesskey=s
 infobar_button_disconnect_label=Odpojit
+infobar_button_disconnect_accesskey=O
 
 # E10s not supported strings
 
 e10s_not_supported_button_label=Otevřít nové okno
 e10s_not_supported_subheading={{brandShortname}} nefunguje v multiprocesovém okně.
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 ## LOCALIZATION NOTE: In this file, don't translate the part between {{..}}
 
 # Text chat strings
-chat_textbox_placeholder=Pište zde…
+chat_textbox_placeholder=Pište sem…
 
 ## LOCALIZATION NOTE(clientShortname2): This should not be localized and
 ## should remain "Firefox Hello" for all locales.
 clientShortname2=Firefox Hello
 
 conversation_has_ended=Vaše konverzace byla ukončena.
 generic_failure_message=Vyskytly se nám technické potíže…
 
@@ -223,15 +237,16 @@ retry_call_button=Opakovat
 rooms_leave_button_label=Opustit
 
 rooms_panel_title=Volba konverzace nebo zahájení nové
 
 rooms_room_full_call_to_action_label=Zjistit více o {{clientShortname}} »
 rooms_room_full_call_to_action_nonFx_label=Stáhněte si {{brandShortname}} a začněte svou vlastní
 rooms_room_full_label=V této konverzaci jsou již dvě osoby.
 rooms_room_join_label=Připojit ke konverzaci
-rooms_room_joined_label=Někdo se připojil ke konverzaci!
+rooms_room_joined_owner_connected_label2=Váš přítel je nyní připojen a může tak vidět vaše panely.
+rooms_room_joined_owner_not_connected_label=Váš přítel čeká na prohlížení s vámi v místnosti {{roomURLHostname}}.
 
 self_view_hidden_message=Váš obraz byl skryt, ale je nadále odesílán; pro jeho zobrazení změňte velikost okna
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} není ve vaší zemi dostupný.
--- a/browser/extensions/loop/chrome/locale/da/loop.properties
+++ b/browser/extensions/loop/chrome/locale/da/loop.properties
@@ -5,17 +5,17 @@
 # Panel Strings
 
 clientSuperShortname=Hello
 
 ## LOCALIZATION_NOTE(loopMenuItem_label): Label of the menu item that is placed
 ## inside the browser 'Tools' menu. Use the unicode ellipsis char, \u2026, or
 ## use "..." if \u2026 doesn't suit traditions in your locale.
 loopMenuItem_label=Start en samtale…
-loopMenuItem_accesskey=t
+loopMenuItem_accesskey=a
 
 ## LOCALIZATION_NOTE(sign_in_again_title_line_one, sign_in_again_title_line_two2):
 ## These are displayed together at the top of the panel when a user is needed to
 ## sign-in again. The emphesis is on the first line to get the user to sign-in again,
 ## and this is displayed in slightly larger font. Please arrange as necessary for
 ## your locale.
 ## {{clientShortname2}} will be replaced by the brand name for either string.
 sign_in_again_title_line_one=Log ind igen
@@ -235,8 +235,10 @@ rooms_room_join_label=Vær med i samtalen
 rooms_room_joined_owner_connected_label2=Din ven har nu oprettet forbindelse og vil være i stand til at se dine faneblade.
 rooms_room_joined_owner_not_connected_label=Din ven venter på at besøge {{roomURLHostname}} sammen med dig.
 
 self_view_hidden_message=Billedet fra eget kamera er skjult, men sendes stadig til andre. Gør vinduet større for at få vist billedet fra dit kamera
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} er ikke tilgængelig i dit land.
+
+display_name_guest=Gæst
--- a/browser/extensions/loop/chrome/locale/de/loop.properties
+++ b/browser/extensions/loop/chrome/locale/de/loop.properties
@@ -23,39 +23,58 @@ sign_in_again_title_line_two2=um weiter 
 sign_in_again_button=Anmelden
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2={{clientSuperShortname}} als Gast verwenden
 
 panel_browse_with_friend_button=Seite mit einem Freund besuchen
 panel_disconnect_button=Verbindung trennen
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Klicken Sie auf die Hello-Schaltfläche, um Webseiten zusammen mit einem Freund zu besuchen.
+first_time_experience_subheading_button_above=Klicken Sie auf die obige Schaltfläche, um mit einem Freund zusammen Webseiten anzusehen.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Verwenden Sie die Funktion, um gemeinsam zu planen, zu arbeiten und zu lachen.
+first_time_experience_content2=Nutzen Sie es für gemeinsame Aktivitäten: gemeinsam planen, gemeinsam lachen, gemeinsam arbeiten.
 first_time_experience_button_label2=Sehen Sie sich an, wie es funktioniert
 
+## First Time Experience Slides
+fte_slide_1_title=Surfen Sie gemeinsam mit einem Freund
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Egal ob Sie eine Reise planen oder ein Geschenk einkaufen, mit {{clientShortname2}} können Sie schnellere Entscheidungen in Echtzeit treffen.
+fte_slide_2_title=Rufen Sie die gleiche Seite auf
+fte_slide_2_copy=Verwenden Sie den integrierten Text- oder Videochat, um Ideen auszutauschen, Optionen zu vergleichen und zu einer Einigung zu kommen.
+fte_slide_3_title=Laden Sie einen Freund ein, indem Sie ihm einen Link senden
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} funktioniert mit den meisten Desktop-Browsern. Es sind keine Benutzerkonten notwendig und die Nutzung ist kostenlos.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Über das {{clientSuperShortname}}-Symbol geht es los.
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Wenn Sie eine Seite gefunden haben, die Sie diskutieren möchten, klicken Sie auf das Symbol in {{brandShortname}}, um einen Link zu erstellen. Schicken Sie diesen dann auf beliebige Weise an Ihren Freund.
+
 invite_header_text_bold=Laden Sie jemanden dazu ein, gemeinsam mit Ihnen auf der Seite zu surfen!
+invite_header_text_bold2=Laden Sie einen Freund ein!
 invite_header_text3=Firefox Hello ist für die Nutzung durch zwei Personen, also senden Sie einem Freund einen Link, um gemeinsam im Web zu surfen!
+invite_header_text4=Teilen Sie diesen Link, damit Sie gemeinsam im Internet surfen können.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Link kopieren
 invite_copied_link_button=Kopiert
 invite_email_link_button=Link per E-Mail versenden
 invite_facebook_button3=Facebook
 invite_your_link=Ihr Link:
 
-# Status text
-display_name_guest=Gast
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Sitzung abgelaufen. Alle vorher von Ihnen erzeugten und weitergegebenen Adressen funktionieren nicht mehr.
 could_not_authenticate=Authentifizierung fehlgeschlagen
 password_changed_question=Haben Sie Ihr Passwort geändert?
 try_again_later=Bitte versuchen Sie es später erneut.
 could_not_connect=Verbindung mit dem Server fehlgeschlagen
@@ -177,17 +196,19 @@ room_name_untitled_page=Seite ohne Namen
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Bis später! Sie können jederzeit über die Hello-Ansicht in diese geteilte Sitzung zurückkehren.
 door_hanger_prompt_name=Wollen Sie Ihr einen einfacher zu merkenden Namen geben? Derzeitiger Name:
 door_hanger_button=OK
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Sobald Ihr Freund dabei ist, kann er jeden Tab sehen, den Sie anklicken.
 infobar_screenshare_browser_message2=Sie geben Ihre Tabs weiter. Jeder von Ihnen angeklickte Tab wird von Ihren Freunden gesehen.
+infobar_screenshare_browser_message3=Sie geben jetzt Ihre Tabs weiter. Ihr Freund kann alle Tabs sehen, die Sie anklicken.
 infobar_screenshare_stop_sharing_message=Sie geben Ihre Tabs nicht mehr weiter.
 infobar_button_restart_label2=Wieder weitergeben
 infobar_button_restart_accesskey=s
 infobar_button_stop_label2=Nicht mehr weitergeben
 infobar_button_stop_accesskey=b
 infobar_button_disconnect_label=Verbindung trennen
 infobar_button_disconnect_accesskey=t
 
@@ -235,8 +256,10 @@ rooms_room_join_label=Gespräch betreten
 rooms_room_joined_owner_connected_label2=Ihr Freund ist jetzt verbunden und kann Ihre Tabs sehen.
 rooms_room_joined_owner_not_connected_label=Ihr Freund wartet darauf, mit Ihnen {{roomURLHostname}} anzusehen.
 
 self_view_hidden_message=Eigenes Kamerabild ist ausgeblendet, wird aber gesendet. Passen Sie die Fenstergröße an, um es anzuzeigen.
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} ist in Ihrem Land nicht verfügbar.
+
+display_name_guest=Gast
--- a/browser/extensions/loop/chrome/locale/dsb/loop.properties
+++ b/browser/extensions/loop/chrome/locale/dsb/loop.properties
@@ -23,39 +23,58 @@ sign_in_again_title_line_two2=aby {{clientShortname2}} dalej wužywał
 sign_in_again_button=Pśizjawiś
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2={{clientSuperShortname}} ako gósć wužywaś
 
 panel_browse_with_friend_button=Toś ten bok se z pśijaśelom woglědaś
 panel_disconnect_button=Zwisk źěliś
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Klikniśo na tłocašk Hello, aby webboki z pśijaśelom pśeglědował.
+first_time_experience_subheading_button_above=Klikniśo na tłocašk, aby webboki z pśijaśelom pśeglědował.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Wužywajštej jen, aby gromaźe planowałej, gromaźe źěłałej, gromaźe se smjali.
+first_time_experience_content2=Wužywajštej jen, aby něco gromaźe cyniłej: planowaś, se smjaś, źěłaś.
 first_time_experience_button_label2=Woglědajśo se, kak funkcioněrujo
 
+## First Time Experience Slides
+fte_slide_1_title=Woglědajśo se webboki se z pśijaśelom
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Lěc drogowanje planujośo abo dar nakupujośo, {{clientShortname2}} wam pomaga, w napšawdnem casu malsnjej rozsuźiś.
+fte_slide_2_title=Buźćo togo samskego měnjenja
+fte_slide_2_copy=Wužywajśo zatwarjony tekst abo wideowy chat, aby ideje źělili, móžnosći pśirownali a něco dojadnali.
+fte_slide_3_title=Pósćelśo pśijaśeloju wótkaz, aby jogo pśepšosył
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} funkcioněrujo z nejwěcej desktopowymi wobglědowakami. Konta njejsu trěbne a kuždy zwisk jo dermotny.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Klikniśo na symbol {{clientSuperShortname}}, aby zachopił
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Gaž sćo bok namakał, wó kótaremž cośo diskutěrowaś, klikniśo na symbol {{brandShortname}}, aby wótkaz napórał. Pósćelśo jen pótom swójomu pśijaśeloju, wšojadno kak se wam spódoba!
+
 invite_header_text_bold=Pśepšosćo někogo, aby toś ten bok z wami pśeglědował!
+invite_header_text_bold2=Pśepšosćo pśijaśela, aby se wam pśizamknuł!
 invite_header_text3=Stej dwě wósobje trěbnej, aby Firefox Hello wužywałej, pósćelśo pótakem pśijaśeloju wótkaz, aby z wami web pśeglědował!
+invite_header_text4=Źělśo toś ten wótkaz, aby mógłej web zgromadnje pśeglědowaś.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Wótkaz kopěrowaś
 invite_copied_link_button=Kopěrowany!
 invite_email_link_button=Wótkaz e-mailowaś
 invite_facebook_button3=Facebook
 invite_your_link=Waš wótkaz:
 
-# Status text
-display_name_guest=Gósć
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Pósejźenje jo pśepadnuło. Wšykne URL, kótarež sćo pjerwjej napórał a źělił, wěcej njefunkcioněruju.
 could_not_authenticate=Awtentifikacija njejo móžno
 password_changed_question=Sćo swójo gronidło změnił?
 try_again_later=Pšosym wopytajśo pózdźej hyšći raz
 could_not_connect=Zwisk ze serwerom njejo móžno
@@ -176,17 +195,19 @@ room_name_untitled_page=Bok bźez titela
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Až do chyle! Móžośo se kuždy cas pśez wokno Hello k toś tomu źělonemu pósejźenjeju wrośiś.
 door_hanger_prompt_name=By wy pšosym mě pódał, kótarež dajo se sj lažčej spomnjeś? Aktualne mě:
 door_hanger_button=W pórěźe
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Gaž se waš pśijaśel pśizamkujo, móžotej rejtark wiźeś, na kótaryž kliknjośo.
 infobar_screenshare_browser_message2=Źěliśo swóje rejtarki. Waše pśijaśele mógu kuždy rejtark wiźeś, na kótaryž kliknjośo
+infobar_screenshare_browser_message3=Źělitej něnto swóje rejtarki. Waš pśijaśel buźo rejtark wiźeś, na kótaryž kliknjośo.
 infobar_screenshare_stop_sharing_message=Njeźěliśo wěcej swóje rejtarki
 infobar_button_restart_label2=Źělenje znowego startowaś
 infobar_button_restart_accesskey=n
 infobar_button_stop_label2=Źělenje zastajiś
 infobar_button_stop_accesskey=S
 infobar_button_disconnect_label=Zwisk źěliś
 infobar_button_disconnect_accesskey=Z
 
@@ -234,8 +255,10 @@ rooms_room_join_label=Rozgronoju se pśizamknuś
 rooms_room_joined_owner_connected_label2=Waš pśijaśel jo něnto zwězany a móžo waše rejtarki wiźeś.
 rooms_room_joined_owner_not_connected_label=Waš pśijaśel caka, aby {{roomURLHostname}} z wami pśeglědował.
 
 self_view_hidden_message=Samonaglěd schowany, ale sćelo se hyšći; změńśo wjelikosć wokna, kótarež ma se pokazaś
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} njestoj we wašom kraju k dispoziciji.
+
+display_name_guest=Gósć
--- a/browser/extensions/loop/chrome/locale/en-GB/loop.properties
+++ b/browser/extensions/loop/chrome/locale/en-GB/loop.properties
@@ -23,39 +23,58 @@ sign_in_again_title_line_two2=to continu
 sign_in_again_button=Sign In
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Use {{clientSuperShortname}} as a Guest
 
 panel_browse_with_friend_button=Browse this page with a friend
 panel_disconnect_button=Disconnect
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Click the Hello button to browse Web pages with a friend.
+first_time_experience_subheading_button_above=Click on the button above to browse Web pages with a friend.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Use it to plan together, work together, laugh together.
+first_time_experience_content2=Use it to get things done: plan together, laugh together, work together.
 first_time_experience_button_label2=See how it works
 
+## First Time Experience Slides
+fte_slide_1_title=Browse Web pages with a friend
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Whether you’re planning a trip or shopping for a gift, {{clientShortname2}} lets you make faster decisions in real time.
+fte_slide_2_title=Get on the same page
+fte_slide_2_copy=Use the built-in text or video chat to share ideas, compare options and come to an agreement.
+fte_slide_3_title=Invite a friend by sending a link
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} works with most desktop browsers. No accounts are necessary and everyone connects for free.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Find the {{clientSuperShortname}} icon to get started
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Once you’ve found a page you want to discuss, click the icon in {{brandShortname}} to create a link. Then send it to your friend however you like!
+
 invite_header_text_bold=Invite someone to browse this page with you!
+invite_header_text_bold2=Invite a friend to join you!
 invite_header_text3=It takes two to use Firefox Hello, so send a friend a link to browse the Web with you!
+invite_header_text4=Share this link so you can start browsing the Web together.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Copy Link
 invite_copied_link_button=Copied!
 invite_email_link_button=Email Link
 invite_facebook_button3=Facebook
 invite_your_link=Your link:
 
-# Status text
-display_name_guest=Guest
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Session expired. All URLs you have previously created and shared will no longer work.
 could_not_authenticate=Could Not Authenticate
 password_changed_question=Did you change your password?
 try_again_later=Please try again later
 could_not_connect=Could Not Connect To The Server
@@ -176,17 +195,19 @@ room_name_untitled_page=Untitled Page
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=See you later! You can return to this shared session at any time through the Hello panel.
 door_hanger_prompt_name=Would you like to give it a name that's easier to remember? Current name:
 door_hanger_button=OK
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=As soon as your friend joins, they will be able to see any tab you click on.
 infobar_screenshare_browser_message2=You are sharing your tabs. Any tab you click on can be seen by your friends
+infobar_screenshare_browser_message3=You are now sharing your tabs. Your friend will see any tab you click on.
 infobar_screenshare_stop_sharing_message=You are no longer sharing your tabs
 infobar_button_restart_label2=Restart sharing
 infobar_button_restart_accesskey=e
 infobar_button_stop_label2=Stop sharing
 infobar_button_stop_accesskey=S
 infobar_button_disconnect_label=Disconnect
 infobar_button_disconnect_accesskey=D
 
@@ -234,8 +255,10 @@ rooms_room_join_label=Join the conversat
 rooms_room_joined_owner_connected_label2=Your friend is now connected and will be able to see your tabs.
 rooms_room_joined_owner_not_connected_label=Your friend is waiting to browse {{roomURLHostname}} with you.
 
 self_view_hidden_message=Self-view hidden but still being sent; resize window \\\n to show
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} is not available in your country.
+
+display_name_guest=Guest
--- a/browser/extensions/loop/chrome/locale/en-US/loop.properties
+++ b/browser/extensions/loop/chrome/locale/en-US/loop.properties
@@ -23,39 +23,58 @@ sign_in_again_title_line_two2=to continu
 sign_in_again_button=Sign In
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Use {{clientSuperShortname}} as a Guest
 
 panel_browse_with_friend_button=Browse this page with a friend
 panel_disconnect_button=Disconnect
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Click the Hello button to browse Web pages with a friend.
+first_time_experience_subheading_button_above=Click on the button above to browse Web pages with a friend.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Use it to plan together, work together, laugh together.
+first_time_experience_content2=Use it to get things done: plan together, laugh together, work together.
 first_time_experience_button_label2=See how it works
 
+## First Time Experience Slides
+fte_slide_1_title=Browse Web pages with a friend
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Whether you’re planning a trip or shopping for a gift, {{clientShortname2}} lets you make faster decisions in real time.
+fte_slide_2_title=Get on the same page
+fte_slide_2_copy=Use the built-in text or video chat to share ideas, compare options and come to an agreement.
+fte_slide_3_title=Invite a friend by sending a link
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} works with most desktop browsers. No accounts are necessary and everyone connects for free.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Find the {{clientSuperShortname}} icon to get started
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Once you’ve found a page you want to discuss, click the icon in {{brandShortname}} to create a link. Then send it to your friend however you like!
+
 invite_header_text_bold=Invite someone to browse this page with you!
+invite_header_text_bold2=Invite a friend to join you!
 invite_header_text3=It takes two to use Firefox Hello, so send a friend a link to browse the Web with you!
+invite_header_text4=Share this link so you can start browsing the Web together.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Copy Link
 invite_copied_link_button=Copied!
 invite_email_link_button=Email Link
 invite_facebook_button3=Facebook
 invite_your_link=Your link:
 
-# Status text
-display_name_guest=Guest
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Session expired. All URLs you have previously created and shared will no longer work.
 could_not_authenticate=Could Not Authenticate
 password_changed_question=Did you change your password?
 try_again_later=Please try again later
 could_not_connect=Could Not Connect To The Server
@@ -176,17 +195,19 @@ room_name_untitled_page=Untitled Page
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=See you later! You can return to this shared session at any time through the Hello panel.
 door_hanger_prompt_name=Would you like to give it a name that's easier to remember? Current name:
 door_hanger_button=OK
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=As soon as your friend joins, they will be able to see any tab you click on.
 infobar_screenshare_browser_message2=You are sharing your tabs. Any tab you click on can be seen by your friends
+infobar_screenshare_browser_message3=You are now sharing your tabs. Your friend will see any tab you click on.
 infobar_screenshare_stop_sharing_message=You are no longer sharing your tabs
 infobar_button_restart_label2=Restart sharing
 infobar_button_restart_accesskey=R
 infobar_button_stop_label2=Stop sharing
 infobar_button_stop_accesskey=S
 infobar_button_disconnect_label=Disconnect
 infobar_button_disconnect_accesskey=D
 
@@ -234,8 +255,10 @@ rooms_room_join_label=Join the conversat
 rooms_room_joined_owner_connected_label2=Your friend is now connected and will be able to see your tabs.
 rooms_room_joined_owner_not_connected_label=Your friend is waiting to browse {{roomURLHostname}} with you.
 
 self_view_hidden_message=Self-view hidden but still being sent; resize window to show
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} is not available in your country.
+
+display_name_guest=Guest
--- a/browser/extensions/loop/chrome/locale/es-CL/loop.properties
+++ b/browser/extensions/loop/chrome/locale/es-CL/loop.properties
@@ -21,41 +21,60 @@ loopMenuItem_accesskey=t
 sign_in_again_title_line_one=Por favor, conéctate nuevamente
 sign_in_again_title_line_two2=para seguir usando {{clientShortname2}}
 sign_in_again_button=Conectarse
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Usar {{clientSuperShortname}} como invitado
 
 panel_browse_with_friend_button=Navegar por esta página con un amigo
-panel_stop_sharing_tabs_button=Dejar de compartir pestañas
+panel_disconnect_button=Desconectarse
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Haz clic en el botón Hello para navegar por páginas Web con un amigo.
+first_time_experience_subheading_button_above=Haz clic en el botón de arriba para navegar por páginas Web con un amigo.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Úsalo para planear, trabajar o reír con quien quieras.
+first_time_experience_content2=Úsalo para hacer cosas: planear, reír y trabajar en conjunto.
 first_time_experience_button_label2=Mira cómo funciona
 
+## First Time Experience Slides
+fte_slide_1_title=Navega por páginas Web con un amigo
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Si estás planeando un viaje o comprar un regalo, {{clientShortname2}} te permite tomar decisiones más rápido en tiempo real.
+fte_slide_2_title=Usa la misma página
+fte_slide_2_copy=Usa el chat de texto o video integrado para compartir ideas, comparar opiniones y llegar a un acuerdo.
+fte_slide_3_title=Invita un amigo enviándole un enlace
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} funciona con la mayoría de los navegadores de escritorio. No se requieren cuentas y todos se conectan gratis.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Encuentra el ícono de {{clientSuperShortname}} para empezar
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Una vez que has encontrado una página sobre la que quieras discutir, aprieta el ícono en {{brandShortname}} para crear un enlace. Luego, ¡envíalo a tu amigo de la forma en que desees!
+
 invite_header_text_bold=¡Invita a alguien a navegar esta página contigo!
+invite_header_text_bold2=¡Invita a un amigo a unirse!
 invite_header_text3=¡Se requieren dos para usar Firefox Hello, así que envía un enlace a un amigo para que navegue la Web contigo!
+invite_header_text4=Comparte este enlace para que puedan navegar la Web juntos.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Copiar enlace
 invite_copied_link_button=¡Copiado!
 invite_email_link_button=Enviar enlace
 invite_facebook_button3=Facebook
 invite_your_link=Tu enlace:
 
-# Status text
-display_name_guest=Invitado
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Sesión expirada. Todas las URLs que hayas creado y compartido previamente ya no funcionarán.
 could_not_authenticate=No se pudo autentificar
 password_changed_question=¿Cambiaste tu contraseña?
 try_again_later=Por favor, vuelve a intentarlo
 could_not_connect=No se pudo conectar al servidor
@@ -177,39 +196,26 @@ room_name_untitled_page=Página sin título
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=¡Hasta pronto! Puedes regresar a esta sesión compartida en cualquier momento a través del panel Hello.
 door_hanger_prompt_name=¿Quieres darle un nombre para que sea más fácil de recordar? Nombre actual:
 door_hanger_button=Aceptar
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Tan pronto como se una tu amigo, podrá ver cualquier pestaña en la que hagas clic.
 infobar_screenshare_browser_message2=Estás compartiendo sus pestañas. Cualquier pestaña en la que hagas clic podrá ser vista por tus amigos
-infobar_screenshare_paused_browser_message=La compartición de pestañas está pausada
-infobar_button_gotit_label=¡Entendido!
-infobar_button_gotit_accesskey=G
-infobar_button_pause_label=Pausar
-infobar_button_pause_accesskey=P
-infobar_button_restart_label=Reiniciar
-infobar_button_restart_accesskey=e
-infobar_button_resume_label=Continuar
-infobar_button_resume_accesskey=R
-infobar_button_stop_label=Detener
+infobar_screenshare_browser_message3=Ahora estás compartiendo tus pestañas. Tu amigo verá cualquier pestaña en la que hagas clic.
+infobar_screenshare_stop_sharing_message=Ya no estás compartiendo tus pestañas
+infobar_button_restart_label2=Reanudar la compartición
+infobar_button_restart_accesskey=R
+infobar_button_stop_label2=Dejar de compartir
 infobar_button_stop_accesskey=S
-infobar_menuitem_dontshowagain_label=No volver a mostrar este mensaje
-infobar_menuitem_dontshowagain_accesskey=D
-
-# Context in conversation strings
-
-## LOCALIZATION NOTE(no_conversations_message_heading2): Title shown when user
-## has no conversations available.
-no_conversations_message_heading2=Aún no tienes conversaciones
-## LOCALIZATION NOTE(no_conversations_start_message2): Subheading inviting the
-## user to start a new conversation.
-no_conversations_start_message2=¡Iniciar una!
+infobar_button_disconnect_label=Desconectarse
+infobar_button_disconnect_accesskey=D
 
 # E10s not supported strings
 
 e10s_not_supported_button_label=Lanzar nueva ventana
 e10s_not_supported_subheading={{brandShortname}} no funciona en ventanas multiproceso.
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
@@ -242,15 +248,18 @@ retry_call_button=Reintentar
 rooms_leave_button_label=Abandonar
 
 rooms_panel_title=Escoge una conversación o inicia una nueva
 
 rooms_room_full_call_to_action_label=Aprender más acerca de {{clientShortname}} »
 rooms_room_full_call_to_action_nonFx_label=Descargar {{brandShortname}} para iniciar la tuya
 rooms_room_full_label=Ya hay dos personas en esta conversación.
 rooms_room_join_label=Unirse a la conversación
-rooms_room_joined_label=¡Alguien se ha unido a la conversación!
+rooms_room_joined_owner_connected_label2=Tu amigo está ahora conectado y podrá ver tus pestañas.
+rooms_room_joined_owner_not_connected_label=Tu amigo está esperando para navegar {{roomURLHostname}} contigo.
 
 self_view_hidden_message=La vista local está oculta pero continúa siendo enviada; redimensione la ventana para mostrarla
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} no está disponible en tu país.
+
+display_name_guest=Invitado
--- a/browser/extensions/loop/chrome/locale/es-ES/loop.properties
+++ b/browser/extensions/loop/chrome/locale/es-ES/loop.properties
@@ -21,41 +21,60 @@ loopMenuItem_accesskey=t
 sign_in_again_title_line_one=Vuelve a iniciar sesión
 sign_in_again_title_line_two2=para continuar utilizando {{clientShortname2}}
 sign_in_again_button=Iniciar sesión
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Utiliza {{clientSuperShortname}} como Invitado
 
 panel_browse_with_friend_button=Navega por la página con un amigo
-panel_stop_sharing_tabs_button=Dejar de compartir tus pestañas
+panel_disconnect_button=Desconectar
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Haz clic en el botón de Hello para navegar por la Web con un amigo.
+first_time_experience_subheading_button_above=Pulse en el botón de arriba para navegar por páginas web con un amigo.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Utilízalo para hacer planes, trabajar y reír juntos.
+first_time_experience_content2=Úselo para llevar a cabo tareas; planear juntos, divertirse juntos, trabajar juntos.
 first_time_experience_button_label2=Aprende cómo funciona
 
+## First Time Experience Slides
+fte_slide_1_title=Navegue por páginas web con un amigo
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Tanto si está planeando un viaje o buscando un regalo para comprarlo, {{clientShortname2}} le permite tomar decisiones más rápidas en tiempo real.
+fte_slide_2_title=Reúnanse en la misma página
+fte_slide_2_copy=Use los chats incluidos de texto o vídeo para compartir ideas, comparar opciones o llegar a acuerdos.
+fte_slide_3_title=Invite a un amigo enviando un enlace
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortnae}} funciona con la mayoría de los navegadores de escritorio. No es necesario tener cuenta y todo el mundo se conecta gratuitamente.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Encuentre el icono de {{clientSuperShortname}} para comenzar
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Cuando encuentre una página sobre la que conversar, pulse el icono en {{brandShortname}} para crear un enlace. ¡Luego envíela a su amigo como mejor le parezca!
+
 invite_header_text_bold=¡Invita a alguien a navegar por la página contigo!
+invite_header_text_bold2=¡Invite a un amigo a unirse a usted!
 invite_header_text3=Se necesitan dos personas para utilizar Firefox Hello. ¡Envíale el enlace a un amigo y navegad juntos!
+invite_header_text4=Comparta este enlace para que puedan comenzar a navegar juntos por la web.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Copiar enlace
 invite_copied_link_button=¡Copiado!
 invite_email_link_button=Enviar enlace
 invite_facebook_button3=Facebook
 invite_your_link=Tu enlace:
 
-# Status text
-display_name_guest=Invitado
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Ha expirado la sesión. Ya no te funcionarán las URLs que hayas creado o compartido antes.
 could_not_authenticate=No se pudo autenticar
 password_changed_question=¿Has cambiado la contraseña?
 try_again_later=Por favor, vuelve a intentarlo luego
 could_not_connect=No se pudo conectar al servidor
@@ -176,39 +195,26 @@ room_name_untitled_page=Página sin título
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=¡Hasta luego! Puedes volver a esta sesión compartida cuando quieras en el panel Hello.
 door_hanger_prompt_name=¿Te gustaría darle un nombre más fácil de recordar? Nombre actual:
 door_hanger_button=Aceptar
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Tan pronto se una su amigo, podrá ver cualquier pestaña en la que pulse usted.
 infobar_screenshare_browser_message2=Estás compartiendo tus pestañas. Si haces clic en una de ellas, tus amigos también la verán
-infobar_screenshare_paused_browser_message=Has pausado la acción de compartir pestañas
-infobar_button_gotit_label=¡Conseguido!
-infobar_button_gotit_accesskey=G
-infobar_button_pause_label=Pausar
-infobar_button_pause_accesskey=P
-infobar_button_restart_label=Reiniciar
+infobar_screenshare_browser_message3=Ahora está compartiendo sus pestañas. Su amigo verá cualquier pestaña en la que pulse usted.
+infobar_screenshare_stop_sharing_message=Ya no compartes tus pestañas
+infobar_button_restart_label2=Volver a compartir
 infobar_button_restart_accesskey=e
-infobar_button_resume_label=Resumen
-infobar_button_resume_accesskey=R
-infobar_button_stop_label=Detener
+infobar_button_stop_label2=Dejar de compartir
 infobar_button_stop_accesskey=S
-infobar_menuitem_dontshowagain_label=No volver a mostrar
-infobar_menuitem_dontshowagain_accesskey=D
-
-# Context in conversation strings
-
-## LOCALIZATION NOTE(no_conversations_message_heading2): Title shown when user
-## has no conversations available.
-no_conversations_message_heading2=Aún no hay conversaciones.
-## LOCALIZATION NOTE(no_conversations_start_message2): Subheading inviting the
-## user to start a new conversation.
-no_conversations_start_message2=¡Inicia una nueva!
+infobar_button_disconnect_label=Desconectar
+infobar_button_disconnect_accesskey=D
 
 # E10s not supported strings
 
 e10s_not_supported_button_label=Ejecutar una nueva ventana
 e10s_not_supported_subheading={{brandShortname}} no funciona en ventanas multiproceso.
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
@@ -241,15 +247,18 @@ retry_call_button=Reintentar
 rooms_leave_button_label=Abandonar
 
 rooms_panel_title=Elige una conversación o inicia una nueva
 
 rooms_room_full_call_to_action_label=Obtén más información sobre {{clientShortname}} »
 rooms_room_full_call_to_action_nonFx_label=Descarga {{brandShortname}} para iniciar la tuya
 rooms_room_full_label=Ya hay dos personas en esta conversación.
 rooms_room_join_label=Únete a la conversación
-rooms_room_joined_label=¡Alguien se ha unido a la conversación!
+rooms_room_joined_owner_connected_label2=Tu amigo ya está conectado y podrá ver tus pestañas.
+rooms_room_joined_owner_not_connected_label=Tu amigo está esperando para navegar contigo por {{roomURLHostname}}.
 
 self_view_hidden_message=Se está enviando la vista propia aunque esté oculta; ajusta la ventana para verla
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} no está disponible en tu país.
+
+display_name_guest=Invitado
--- a/browser/extensions/loop/chrome/locale/es-MX/loop.properties
+++ b/browser/extensions/loop/chrome/locale/es-MX/loop.properties
@@ -23,39 +23,58 @@ sign_in_again_title_line_two2=para conti
 sign_in_again_button=Iniciar sesión
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Usar {{clientSuperShortname}} como un Invitado
 
 panel_browse_with_friend_button=Navegar esta página con un amigo
 panel_disconnect_button=Desconectar
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Haz clic en el botón de Hello para para navegar las páginas Web con un amigo.
+first_time_experience_subheading_button_above=Haz clic en el botón de arriba para navegar la Web con un amigo.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Úsalo para planear cosas juntos, trabajar juntos, reír juntos. 
+first_time_experience_content2=Úsalo para hacer las cosas bien: planear algo juntos, reír juntos, trabajar juntos.
 first_time_experience_button_label2=Ver como trabaja
 
+## First Time Experience Slides
+fte_slide_1_title=Navega páginas Web con un amigo
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Ya sea que estés planeando un viaje o comprar un regalo, {{clientShortname2}} te permite tomar decisiones más rápido en tiempo real.
+fte_slide_2_title=Estar en la misma página
+fte_slide_2_copy=Usa el texto incorporado o el videochat para compartir ideas, comparar opciones y llegar a acuerdos.
+fte_slide_3_title=Invita a un amigo enviándole un enlace
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} trabaja con la mayoría de los navegadores de escritorio. No se necesita cuentas y todos se pueden conectar gratis.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Encuentra el ícono de {{clientSuperShortname}} para comenzar
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Una vez que encuentres una página que quieras discutir, haz clic en el ícono de {{brandShortname}} para crear un enlace. ¡Entonces envíalo al amigo que quieras!
+
 invite_header_text_bold=Invita a alguien para navegar esta página contigo.
+invite_header_text_bold2=¡Invita a un amigo a unirse!
 invite_header_text3=Es muy fácil usar Firefox Hello, ¡simplemente envía a tu amigo un enlace para navegar la Web contigo!
+invite_header_text4=Compartir este enlace para que así puedan iniciar a navegar la Web juntos.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Copiar enlace
 invite_copied_link_button=¡Copiado!
 invite_email_link_button=Enviar enlace
 invite_facebook_button3=Facebook
 invite_your_link=Tu enlace:
 
-# Status text
-display_name_guest=Invitado
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=La sesión ha expirado. Todas las URLs que creaste con anterioridad y compartiste no funcionarán más.
 could_not_authenticate=No se puede autenticar
 password_changed_question=¿Cambiaste tu contraseña?
 try_again_later=Por favor, inténtalo de nuevo más tarde
 could_not_connect=No se puede conectar al servidor
@@ -176,17 +195,19 @@ room_name_untitled_page=Página sin título
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=¡Nos vemos luego! Puedes regresar a esta sesión compartida cuando quieras a través del panel de Hello.
 door_hanger_prompt_name=¿Te gustaría probar un nombre más sencillo para recordar? Nombre actual:
 door_hanger_button=Aceptar
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Tan pronto como tus amigos se vayan uniendo, serán capaces de ver cualquier pestaña en la que hagas clic.
 infobar_screenshare_browser_message2=Estás compartiendo tus pestañas. Cualquier pestaña en la que des clic puede ser vista por tus amigos
+infobar_screenshare_browser_message3=Estás compartiendo tus pestañas. Tu amigo podrá ver cualquier pestaña en la que hagas clic.
 infobar_screenshare_stop_sharing_message=Ya no estás compartiendo tus pestañas
 infobar_button_restart_label2=Volver a compartir
 infobar_button_restart_accesskey=e
 infobar_button_stop_label2=Dejar de compartir
 infobar_button_stop_accesskey=S
 infobar_button_disconnect_label=Desconectar
 infobar_button_disconnect_accesskey=D
 
@@ -234,8 +255,10 @@ rooms_room_join_label=Unirse a la conversación
 rooms_room_joined_owner_connected_label2=Tu amigo está ahora conectado y podrá ver tus pestañas.
 rooms_room_joined_owner_not_connected_label=Tu amigo está esperando para navegar {{roomURLHostname}} contigo.
 
 self_view_hidden_message=Auto-vista oculta pero enviándose; redimensiona ventana para mostrar
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} no está disponible en tu país.
+
+display_name_guest=Invitado
--- a/browser/extensions/loop/chrome/locale/et/loop.properties
+++ b/browser/extensions/loop/chrome/locale/et/loop.properties
@@ -21,17 +21,17 @@ loopMenuItem_accesskey=t
 sign_in_again_title_line_one=Palun logi uuesti sisse,
 sign_in_again_title_line_two2=et jätkata {{clientShortname2}}i kasutamist
 sign_in_again_button=Logi sisse
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Kasuta {{clientSuperShortname}}i külalisena
 
 panel_browse_with_friend_button=Lehitse seda lehte koos sõbraga
-panel_stop_sharing_tabs_button=Lõpeta kaartide jagamine
+panel_disconnect_button=Lõpeta ühendus
 
 ## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Veebilehtede sirvimiseks koos sõbraga klõpsa Hello nupul.
 
 ## LOCALIZATION_NOTE(first_time_experience_content): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Kasuta seda ühiseks plaanimiseks, töötamiseks ja naermiseks.
@@ -178,38 +178,23 @@ room_name_untitled_page=Nimeta leht
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Näeme hiljem! Saad sellesse jagatud sessiooni naasta mis tahes ajal Hello paneeli kaudu.
 door_hanger_prompt_name=Kas soovid sellele nime anda, et oleks kergem meeles pidada? Praegune nimi:
 door_hanger_button=Olgu
 
 # Infobar strings
 
 infobar_screenshare_browser_message2=Jagad enda kaarte. Sinu sõbrad näevad kaarti, mille oled valinud.
-infobar_screenshare_paused_browser_message=Kaartide jagamine on peatatud.
-infobar_button_gotit_label=Selge!
-infobar_button_gotit_accesskey=S
-infobar_button_pause_label=Peata
-infobar_button_pause_accesskey=P
-infobar_button_restart_label=Taaskäivita
+infobar_screenshare_stop_sharing_message=Sa ei jaga enam kaarte.
+infobar_button_restart_label2=Alusta jagamist uuesti
 infobar_button_restart_accesskey=s
-infobar_button_resume_label=Jätka
-infobar_button_resume_accesskey=J
-infobar_button_stop_label=Lõpeta
+infobar_button_stop_label2=Lõpeta jagamine
 infobar_button_stop_accesskey=L
-infobar_menuitem_dontshowagain_label=Rohkem seda teadet ei kuvata
-infobar_menuitem_dontshowagain_accesskey=R
-
-# Context in conversation strings
-
-## LOCALIZATION NOTE(no_conversations_message_heading2): Title shown when user
-## has no conversations available.
-no_conversations_message_heading2=Vestlusi pole veel.
-## LOCALIZATION NOTE(no_conversations_start_message2): Subheading inviting the
-## user to start a new conversation.
-no_conversations_start_message2=Alusta uuega!
+infobar_button_disconnect_label=Lõpeta ühendus
+infobar_button_disconnect_accesskey=L
 
 # E10s not supported strings
 
 e10s_not_supported_button_label=Ava uus aken
 e10s_not_supported_subheading={{brandShortname}} ei tööta mitme protsessiga aknas.
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
@@ -242,15 +227,16 @@ retry_call_button=Proovi uuesti
 rooms_leave_button_label=Lahku
 
 rooms_panel_title=Vestluse valimine või uue alustamine
 
 rooms_room_full_call_to_action_label=Rohkem teavet {{clientShortname}} kohta »
 rooms_room_full_call_to_action_nonFx_label=Enda vestluse alustamiseks laadi alla {{brandShortname}}
 rooms_room_full_label=Selles vestluses on juba kaks inimest.
 rooms_room_join_label=Liitu vestlusega
-rooms_room_joined_label=Keegi liitus vestlusega!
+rooms_room_joined_owner_connected_label2=Sinu sõbraga on ühendus olemas ja ta saab sinu kaarte näha.
+rooms_room_joined_owner_not_connected_label=Sinu sõber ootab, et sinuga {{roomURLHostname}} sirvida.
 
 self_view_hidden_message=Sinu pilti edastatakse, kuid see on praegu peidetud. Pildi kuvamiseks muuda akna suurust.
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} pole sinu riigis saadaval.
--- a/browser/extensions/loop/chrome/locale/fr/loop.properties
+++ b/browser/extensions/loop/chrome/locale/fr/loop.properties
@@ -20,42 +20,61 @@ loopMenuItem_accesskey=L
 ## {{clientShortname2}} will be replaced by the brand name for either string.
 sign_in_again_title_line_one=Veuillez vous connecter à nouveau
 sign_in_again_title_line_two2=pour continuer à utiliser {{clientShortname2}}
 sign_in_again_button=Se connecter
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Utiliser {{clientSuperShortname}} en tant qu'invité
 
-panel_browse_with_friend_button=Consulter cette page avec un ami
-panel_stop_sharing_tabs_button=Arrêter de partager les onglets
+panel_browse_with_friend_button=Consulter cette page avec une autre personne
+panel_disconnect_button=Déconnexion
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
-first_time_experience_subheading2=Cliquez sur le bouton Hello pour consulter des pages web avec un ami.
+first_time_experience_subheading2=Cliquez sur le bouton Hello pour consulter des pages web avec une autre personne.
+first_time_experience_subheading_button_above=Cliquez sur le bouton ci-dessus pour naviguer sur le Web avec une autre personne.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Utilisez-le pour vous organiser, travailler et rire ensemble.
+first_time_experience_content2=Utilisez vous pour réaliser vos projets : vous organiser, travailler et rire ensemble.
 first_time_experience_button_label2=Principe de fonctionnement
 
+## First Time Experience Slides
+fte_slide_1_title=Naviguer sur le Web avec une autre personne
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Que ce soit pour planifier un voyage ou l'achat d'un cadeau, {{clientShortname2}} vous permet de prendre des décisions plus rapidement.
+fte_slide_2_title=Sur la même page au même moment
+fte_slide_2_copy=Utilisez la conversation texte ou vidéo pour partager vos idées, comparer vos choix et vous mettre d'accord.
+fte_slide_3_title=Invitez votre interlocuteur en lui envoyant un lien
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} fonctionne avec la plupart des navigateurs de bureau. Aucun compte n'est nécessaire et tout le monde peut l'utiliser gratuitement.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Cherchez l'icône {{clientSuperShortname}} pour commencer
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Une fois sur la page à propos de laquelle vous souhaitez discuter, cliquez sur l'icône dans {{brandShortname}} pour créer un lien. Vous pouvez alors l'envoyer à votre interlocuteur de la manière que vous voulez.
+
 invite_header_text_bold=Invitez quelqu'un à consulter cette page avec vous !
-invite_header_text3=Vous devez être deux pour utiliser Firefox Hello, alors envoyez un lien à un ami pour naviguer sur le Web ensemble !
+invite_header_text_bold2=Invitez quelqu'un à vous rejoindre !
+invite_header_text3=Utiliser Firefox Hello est très simple, envoyez simplement un lien à votre interlocuteur et vous pourrez naviguer sur le Web ensemble !
+invite_header_text4=Partagez ce lien pour surfer sur le Web ensemble.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Copier le lien
 invite_copied_link_button=Copié
 invite_email_link_button=Envoyer le lien
 invite_facebook_button3=Facebook
 invite_your_link=Votre lien :
 
-# Status text
-display_name_guest=Invité
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Session expirée. Toutes les URL précédemment créées et partagées ne fonctionneront plus.
 could_not_authenticate=Authentification impossible
 password_changed_question=Avez-vous modifié votre mot de passe ?
 try_again_later=Veuillez réessayer plus tard
 could_not_connect=Connexion au serveur impossible
@@ -63,25 +82,25 @@ check_internet_connection=Veuillez vérifier votre connexion Internet
 login_expired=Votre identifiant a expiré
 service_not_available=Service actuellement indisponible
 problem_accessing_account=Une erreur s'est produite lors de l'accès à votre compte
 
 ## LOCALIZATION NOTE(retry_button): Displayed when there is an error to retry
 ## the appropriate action.
 retry_button=Réessayer
 
-share_email_subject7=Invitation à naviguer sur une page web avec un ami
+share_email_subject7=Votre invitation à naviguer sur le Web avec une autre personne
 ## LOCALIZATION NOTE (share_email_body7): In this item, don't translate the
 ## part between {{..}} and leave the \n\n part alone
-share_email_body7=Un ami vous attend sur Firefox Hello. Cliquez sur le lien pour vous connecter et naviguer sur une page web ensemble : {{callUrl}}
+share_email_body7=Une autre personne vous attend sur Firefox Hello. Cliquez sur le lien pour vous connecter et naviguer sur une page web ensemble : {{callUrl}}
 ## LOCALIZATION NOTE (share_email_body_context3): In this item, don't translate
 ## the part between {{..}} and leave the \n\n part alone.
-share_email_body_context3=Un ami vous attend sur Firefox Hello. Cliquez sur le lien pour vous connecter et naviguer sur {{title}} ensemble : {{callUrl}}
+share_email_body_context3=Une autre personne vous attend sur Firefox Hello. Cliquez sur le lien pour vous connecter et naviguer sur {{title}} ensemble : {{callUrl}}
 ## LOCALIZATION NOTE (share_email_footer2): Common footer content for both email types
-share_email_footer2=\n\n____________\nFirefox Hello vous permet de naviguer sur le Web avec vos amis. Utilisez-le lorsque vous voulez faire des choses comme : planifier quelque chose ensemble, travailler ensemble, rire ensemble. Apprenez-en davantage sur http://www.firefox.com/hello
+share_email_footer2=\n\n____________\nFirefox Hello vous permet de naviguer sur le Web avec vos amis. Vous pouvez faire des tas de choses : planifier, travailler ou rire ensemble. Apprenez-en davantage sur http://www.firefox.com/hello
 ## LOCALIZATION NOTE (share_tweeet): In this item, don't translate the part
 ## between {{..}}. Please keep the text below 117 characters to make sure it fits
 ## in a tweet.
 share_tweet=Rejoignez-moi pour une conversation vidéo sur {{clientShortname2}} !
 
 share_add_service_button=Ajouter un service
 
 ## LOCALIZATION NOTE (copy_link_menuitem, email_link_menuitem, delete_conversation_menuitem):
@@ -177,39 +196,26 @@ room_name_untitled_page=Page sans titre
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=À bientôt ! Vous pouvez accéder à cette session partagée à n'importe quel moment depuis le panneau Hello.
 door_hanger_prompt_name=Voulez-vous lui donner un nom pour la mémoriser plus facilement ? Nom actuel :
 door_hanger_button=OK
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Dès que l'autre personne suivra le lien, elle pourra voir tous les onglets sur lesquels vous cliquerez.
 infobar_screenshare_browser_message2=Vous partagez vos onglets. Vos amis pourront voir tous les onglets sur lesquels vous cliquez.
-infobar_screenshare_paused_browser_message=Le partage d'onglets a été mis en pause
-infobar_button_gotit_label=J'ai compris
-infobar_button_gotit_accesskey=J
-infobar_button_pause_label=Pause
-infobar_button_pause_accesskey=P
-infobar_button_restart_label=Redémarrer
+infobar_screenshare_browser_message3=Vous partagez à présent vos onglets. Votre contact verra tous les onglets sur lesquels vous cliquerez.
+infobar_screenshare_stop_sharing_message=Vous ne partagez plus vos onglets
+infobar_button_restart_label2=Recommencer à partager
 infobar_button_restart_accesskey=e
-infobar_button_resume_label=Reprendre
-infobar_button_resume_accesskey=R
-infobar_button_stop_label=Arrêter
+infobar_button_stop_label2=Arrêter le partage
 infobar_button_stop_accesskey=A
-infobar_menuitem_dontshowagain_label=Ne plus afficher à l'avenir
-infobar_menuitem_dontshowagain_accesskey=N
-
-# Context in conversation strings
-
-## LOCALIZATION NOTE(no_conversations_message_heading2): Title shown when user
-## has no conversations available.
-no_conversations_message_heading2=Aucune conversation pour l'instant.
-## LOCALIZATION NOTE(no_conversations_start_message2): Subheading inviting the
-## user to start a new conversation.
-no_conversations_start_message2=Lancez-en une nouvelle !
+infobar_button_disconnect_label=Déconnexion
+infobar_button_disconnect_accesskey=D
 
 # E10s not supported strings
 
 e10s_not_supported_button_label=Ouvrir une nouvelle fenêtre
 e10s_not_supported_subheading={{brandShortname}} ne fonctionne pas dans les fenêtres multi-processus.
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
@@ -221,17 +227,17 @@ chat_textbox_placeholder=Écrivez ici…
 
 ## LOCALIZATION NOTE(clientShortname2): This should not be localized and
 ## should remain "Firefox Hello" for all locales.
 clientShortname2=Firefox Hello
 
 conversation_has_ended=Votre conversation est terminée.
 generic_failure_message=Nous rencontrons des problèmes techniques…
 
-generic_failure_no_reason2=Voulez-vous essayer à nouveau ?
+generic_failure_no_reason2=Voulez-vous réessayer ?
 
 help_label=Aide
 
 mute_local_audio_button_title=Couper votre micro
 unmute_local_audio_button_title=Réactiver votre micro
 mute_local_video_button_title2=Désactiver la vidéo
 unmute_local_video_button_title2=Activer la vidéo
 
@@ -242,15 +248,18 @@ retry_call_button=Réessayer
 rooms_leave_button_label=Quitter
 
 rooms_panel_title=Sélectionnez une conversation ou démarrez-en une nouvelle
 
 rooms_room_full_call_to_action_label=En savoir plus sur {{clientShortname}} »
 rooms_room_full_call_to_action_nonFx_label=Téléchargez {{brandShortname}} pour lancer la vôtre
 rooms_room_full_label=Il y a deux personnes dans cette conversation.
 rooms_room_join_label=Rejoindre la conversation
-rooms_room_joined_label=Quelqu'un a rejoint la conversation.
+rooms_room_joined_owner_connected_label2=Votre interlocuteur est connecté et peut à présent voir vos onglets.
+rooms_room_joined_owner_not_connected_label=Votre interlocuteur attend pour parcourir {{roomURLHostname}} avec vous.
 
 self_view_hidden_message=Retour vidéo masqué, mais la vidéo est toujours transmise. Redimensionnez la fenêtre pour l'afficher.
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} n'est pas disponible dans votre pays.
+
+display_name_guest=Invité
--- a/browser/extensions/loop/chrome/locale/fy-NL/loop.properties
+++ b/browser/extensions/loop/chrome/locale/fy-NL/loop.properties
@@ -23,39 +23,58 @@ sign_in_again_title_line_two2=om {{clientShortname2}} brûke te bliuwen
 sign_in_again_button=Oanmelde
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2={{clientSuperShortname}} as gast brûke
 
 panel_browse_with_friend_button=Dizze side mei in freon besjen
 panel_disconnect_button=Ferbining ferbrekke
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Klik op de Hello-knop om websites te besjen mei in freon.
+first_time_experience_subheading_button_above=Klik op de boppesteande knop om websiden mei in freon te besjen.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Brûk it om tegearre te plannen, te wurkjen en te laitsjen.
+first_time_experience_content2=Brûk it om saken dien te krijen: tegearre planne, tegearre laitsje, tegearre wurkje.
 first_time_experience_button_label2=Besjoch hoe't it wurket
 
+## First Time Experience Slides
+fte_slide_1_title=Besjoch websiden mei in freon
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Oft jo no in reis planne of in kado sykje, mei {{clientShortname2}} meitsje jo yn realtime fluggere beslissingen.
+fte_slide_2_title=Besjoch deselde side
+fte_slide_2_copy=Brûk de ynboude tekst- of fideochat om ideeën út te wikseljen, opsjes te fergelykjen en oerienstimming te berikjen.
+fte_slide_3_title=Noegje in freon út troch in keppeling te dielen
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} wurket mei de measte desktopbrowsers. Der binne gjin accounts nedich en eltsenien makket fergees ferbining.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Sykje it {{clientSuperShortname}}-piktogram om te begjinnen
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=As jo in side fûn hawwe dy't jo besprekke wolle, klikke jo op it piktogram yn {{brandShortname}} om in keppeling te meitsjen. Stjoer dizze dêrnei nei jo freon lykas jo wolle!
+
 invite_header_text_bold=Noegje ien út om tegearre dizze website te besjen!
+invite_header_text_bold2=Noegje in freon út om diel te nimmen!
 invite_header_text3=Der binne twa nedich om Firefox Hello te brûken, dus stjoer in freon in keppeling om tegearre op it web te sneupjen!
+invite_header_text4=Diel dizze keppeling, sadat jo tegearre it web besjen kinne.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Keppeling kopiearje
 invite_copied_link_button=Kopiearre!
 invite_email_link_button=Keppeling e-maile
 invite_facebook_button3=Facebook
 invite_your_link=Jo keppeling:
 
-# Status text
-display_name_guest=Gast
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Sesje ferrûn. Alle URL's dy't jo earder makke en dield hawwe sille net langer wurkje.
 could_not_authenticate=Autentikaasje net slagge
 password_changed_question=Hawwe jo jo wachtwurd wizige?
 try_again_later=Probearje letter opnij
 could_not_connect=Koe gjin ferbining meitsje mei de tsjinner
@@ -176,20 +195,22 @@ room_name_untitled_page=Titelleaze side
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Oant letter! Jo kinne hjir altyd wer nei dizze dield sesje weromkeare fia it Hello-paniel.
 door_hanger_prompt_name=Wolle jo it in makliker te ûnthâlden namme jaan? Aktuele namme:
 door_hanger_button=OK
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Sa gau as jo freon dielnimt, kin dizze elts ljepblêd sjen wêrop jo klikke.
 infobar_screenshare_browser_message2=Jo diele jo ljepblêden. Elts ljepblêd dat jo oanklikke kin sjoen wurde troch jo freonen
+infobar_screenshare_browser_message3=Jo diele no jo ljepblêden. Jo freon sjocht elts ljepblêd wêrop jo klikke.
 infobar_screenshare_stop_sharing_message=Jo diele net langer jo ljepblêden
 infobar_button_restart_label2=Dielen ferfetsje
-infobar_button_restart_accesskey=O
+infobar_button_restart_accesskey=D
 infobar_button_stop_label2=Dielen stopje
 infobar_button_stop_accesskey=S
 infobar_button_disconnect_label=Ferbining ferbrekke
 infobar_button_disconnect_accesskey=F
 
 # E10s not supported strings
 
 e10s_not_supported_button_label=Nij finster iepenje
@@ -234,8 +255,10 @@ rooms_room_join_label=Dielnimme oan it p
 rooms_room_joined_owner_connected_label2=Jo freon(din) is no ferbûn en kin jo ljepblêden sjen.
 rooms_room_joined_owner_not_connected_label=Jo freon(din) wachtet om mei jo nei {{roomURLHostname}} te sjen.
 
 self_view_hidden_message=Eigen werjefte ferburgen, mar wurdt noch hieltyd ferstjoerd; wizigje finsterformaat om te toanen
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} is net beskikber yn jo lân.
+
+display_name_guest=Gast
--- a/browser/extensions/loop/chrome/locale/fy/loop.properties
+++ b/browser/extensions/loop/chrome/locale/fy/loop.properties
@@ -23,39 +23,58 @@ sign_in_again_title_line_two2=om {{clientShortname2}} brûke te bliuwen
 sign_in_again_button=Oanmelde
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2={{clientSuperShortname}} as gast brûke
 
 panel_browse_with_friend_button=Dizze side mei in freon besjen
 panel_disconnect_button=Ferbining ferbrekke
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Klik op de Hello-knop om websites te besjen mei in freon.
+first_time_experience_subheading_button_above=Klik op de boppesteande knop om websiden mei in freon te besjen.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Brûk it om tegearre te plannen, te wurkjen en te laitsjen.
+first_time_experience_content2=Brûk it om saken dien te krijen: tegearre planne, tegearre laitsje, tegearre wurkje.
 first_time_experience_button_label2=Besjoch hoe't it wurket
 
+## First Time Experience Slides
+fte_slide_1_title=Besjoch websiden mei in freon
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Oft jo no in reis planne of in kado sykje, mei {{clientShortname2}} meitsje jo yn realtime fluggere beslissingen.
+fte_slide_2_title=Besjoch deselde side
+fte_slide_2_copy=Brûk de ynboude tekst- of fideochat om ideeën út te wikseljen, opsjes te fergelykjen en oerienstimming te berikjen.
+fte_slide_3_title=Noegje in freon út troch in keppeling te dielen
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} wurket mei de measte desktopbrowsers. Der binne gjin accounts nedich en eltsenien makket fergees ferbining.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Sykje it {{clientSuperShortname}}-piktogram om te begjinnen
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=As jo in side fûn hawwe dy't jo besprekke wolle, klikke jo op it piktogram yn {{brandShortname}} om in keppeling te meitsjen. Stjoer dizze dêrnei nei jo freon lykas jo wolle!
+
 invite_header_text_bold=Noegje ien út om tegearre dizze website te besjen!
+invite_header_text_bold2=Noegje in freon út om diel te nimmen!
 invite_header_text3=Der binne twa nedich om Firefox Hello te brûken, dus stjoer in freon in keppeling om tegearre op it web te sneupjen!
+invite_header_text4=Diel dizze keppeling, sadat jo tegearre it web besjen kinne.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Keppeling kopiearje
 invite_copied_link_button=Kopiearre!
 invite_email_link_button=Keppeling e-maile
 invite_facebook_button3=Facebook
 invite_your_link=Jo keppeling:
 
-# Status text
-display_name_guest=Gast
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Sesje ferrûn. Alle URL's dy't jo earder makke en dield hawwe sille net langer wurkje.
 could_not_authenticate=Autentikaasje net slagge
 password_changed_question=Hawwe jo jo wachtwurd wizige?
 try_again_later=Probearje letter opnij
 could_not_connect=Koe gjin ferbining meitsje mei de tsjinner
@@ -176,20 +195,22 @@ room_name_untitled_page=Titelleaze side
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Oant letter! Jo kinne hjir altyd wer nei dizze dield sesje weromkeare fia it Hello-paniel.
 door_hanger_prompt_name=Wolle jo it in makliker te ûnthâlden namme jaan? Aktuele namme:
 door_hanger_button=OK
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Sa gau as jo freon dielnimt, kin dizze elts ljepblêd sjen wêrop jo klikke.
 infobar_screenshare_browser_message2=Jo diele jo ljepblêden. Elts ljepblêd dat jo oanklikke kin sjoen wurde troch jo freonen
+infobar_screenshare_browser_message3=Jo diele no jo ljepblêden. Jo freon sjocht elts ljepblêd wêrop jo klikke.
 infobar_screenshare_stop_sharing_message=Jo diele net langer jo ljepblêden
 infobar_button_restart_label2=Dielen ferfetsje
-infobar_button_restart_accesskey=O
+infobar_button_restart_accesskey=D
 infobar_button_stop_label2=Dielen stopje
 infobar_button_stop_accesskey=S
 infobar_button_disconnect_label=Ferbining ferbrekke
 infobar_button_disconnect_accesskey=F
 
 # E10s not supported strings
 
 e10s_not_supported_button_label=Nij finster iepenje
@@ -234,8 +255,10 @@ rooms_room_join_label=Dielnimme oan it p
 rooms_room_joined_owner_connected_label2=Jo freon(din) is no ferbûn en kin jo ljepblêden sjen.
 rooms_room_joined_owner_not_connected_label=Jo freon(din) wachtet om mei jo nei {{roomURLHostname}} te sjen.
 
 self_view_hidden_message=Eigen werjefte ferburgen, mar wurdt noch hieltyd ferstjoerd; wizigje finsterformaat om te toanen
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} is net beskikber yn jo lân.
+
+display_name_guest=Gast
--- a/browser/extensions/loop/chrome/locale/hsb/loop.properties
+++ b/browser/extensions/loop/chrome/locale/hsb/loop.properties
@@ -23,39 +23,58 @@ sign_in_again_title_line_two2=zo byšće {{clientShortname2}} dale wužiwał
 sign_in_again_button=Přizjewić
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2={{clientSuperShortname}} jako hósć wužiwać
 
 panel_browse_with_friend_button=Tutu stronu z přećelom přehladować
 panel_disconnect_button=Zwisk dźělić
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Klikńće na tłóčatko Hello, zo byšće webstrony z přećelom přehladował.
+first_time_experience_subheading_button_above=Klikńće na tłóčatko, zo byšće webstrony z přećelom přehladował.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Wužiwajtej jón, zo byštej zhromadnje planowałoj, dźěłałoj a so smjałoj.
+first_time_experience_content2=Wužiwajtej jón, zo byštej zhromadnje činiłoj: planować, so smjeć a dźěłać.
 first_time_experience_button_label2=Hladajće, kak wón funguje
 
+## First Time Experience Slides
+fte_slide_1_title=Tutu stronu z přećelom přehladować
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Hač pućowanje planujeće abo dar nakupujeće, {{clientShortname2}} wam pomha, we woprawdźitym času spěšnišo rozsudźić.
+fte_slide_2_title=Budźće samsneho měnjenja
+fte_slide_2_copy=Wužiwajće zatwarjeny tekst abo widejowy chat, zo byšće ideje dźělili, móžnosće přirunali a něšto dojednali.
+fte_slide_3_title=Pósćelće přećelej wotkaz, zo byšće jeho přeprosył
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} z najwjace desktopowymi wobhladowakami funguje. Konta trěbne njejsu a kóždy zwisk je darmotny.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Klikńće na symbol {{clientSuperShortname}}, zo byšće započał
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Hdyž sće stronu namakał, wo kotrejž chceće diskutować, klikńće na symbol {{brandShortname}}, zo byšće wotkaz wutworił. Pósćelće jón potom swojemu přećelej, wšojedne kak so wam spodoba!
+
 invite_header_text_bold=Přeprošće někoho, zo by z wami tutu stronu přehladował!
+invite_header_text_bold2=Přeprošće přećela, zo by so wam přidružił!
 invite_header_text3=Stej dwě wosobje trěbnej, zo byštej Firefox Hello wužiwałoj, pósćelće tuž přećelej wotkaz, zo by z wami web přehladował!
+invite_header_text4=Dźělće tutón wotkaz, zo byštaj móhłoj web zhromadnje přehladować.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Wotkaz kopěrować
 invite_copied_link_button=Kopěrowany!
 invite_email_link_button=Wotkaz e-mejlować
 invite_facebook_button3=Facebook
 invite_your_link=Waš wotkaz:
 
-# Status text
-display_name_guest=Hósć
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Posedźenje je so spadnyło. Wšě URL, kotrež sće do toho wutworił a dźělił, njebudu hižo fungować.
 could_not_authenticate=Awtentifikacija njemóžno
 password_changed_question=Sće swoje hesło změnił?
 try_again_later=Prošu spytajće pozdźišo hišće raz
 could_not_connect=Zwisk ze serwerom móžno njeje
@@ -176,17 +195,19 @@ room_name_untitled_page=Strona bjez titu
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Hač potom! Móžeće so k tutomu zhromadnemu posedźenju přez wokno Hello kóždy čas wróćić.
 door_hanger_prompt_name=Byšće prošu mjeno podać, kotrež da so sej lóšo spomjatkować? Aktualne mjeno:
 door_hanger_button=W porjadku
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Tak ruče kaž so waš přećel přidruža, móžetaj rajtark widźeć, na kotryž kliknjeće.
 infobar_screenshare_browser_message2=Dźěliće swoje rajtarki. Waši přećeljo móža kóždy rajtark widźeć, na kotryž kliknjeće
+infobar_screenshare_browser_message3=Dźělitaj nětko swoje rajtarki. Waš přećel budźe rajtark widźeć, na kotryž kliknjeće.
 infobar_screenshare_stop_sharing_message=Hižo swoje rajtarki njedźěliće
 infobar_button_restart_label2=Dźělenje znowa startować
 infobar_button_restart_accesskey=n
 infobar_button_stop_label2=Dźělenje zastajić
 infobar_button_stop_accesskey=S
 infobar_button_disconnect_label=Zwisk dźělić
 infobar_button_disconnect_accesskey=Z
 
@@ -234,8 +255,10 @@ rooms_room_join_label=Rozmołwje so přidružić
 rooms_room_joined_owner_connected_label2=Waš přećel je nětko zwjazany a móže waše rajtarki widźeć.
 rooms_room_joined_owner_not_connected_label=Waš přećel čaka, zo by {{roomURLHostname}} z wami přehladował.
 
 self_view_hidden_message=Samonapohlad schowany, ale sćele so hišće; změńće wulkosć wokna, kotrež ma so pokazać
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} we wašim kraju k dispoziciji njesteji.
+
+display_name_guest=Hósć
--- a/browser/extensions/loop/chrome/locale/hy-AM/loop.properties
+++ b/browser/extensions/loop/chrome/locale/hy-AM/loop.properties
@@ -23,39 +23,58 @@ sign_in_again_title_line_two2=և շարունակել {{clientShortname2}}-ի օգտագործումը
 sign_in_again_button=Մուտք գործել
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Օգտագործել {{clientSuperShortname}}-ը որպես Հյուր
 
 panel_browse_with_friend_button=Դիտել էջը ընկերոջ հետ
 panel_disconnect_button=Կապախզել
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Սեղմեք Hello կոճակը՝ վեբ էջերը ընկեոջ հետ դիտելու համար
+first_time_experience_subheading_button_above=Սեղմեք կոճակը՝ վեբ ընկերոջ հետ դիտարկելու համար:
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Օգտագործեք այն՝ միասին պլանավորելու, աշխատելու և ծիծաղելու համար:
+first_time_experience_content2=Օգտագործեք այն՝ միասին պլանավորելու, միասին ծիծաղելու, միասին աշխատելու համար:
 first_time_experience_button_label2=Տեսեք, թե ինչպես է աշխատում
 
+## First Time Experience Slides
+fte_slide_1_title=Դիտարկել վեբ էջերը ընկերների հետ
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Անկախ նրանից, թե պլանավորում եք ուղևորություն կամ գնումներ նվերի համար՝ {{clientShortname2}}-ը կօգնի արագ որոշումներ կայացնել իրական ժամանակում:
+fte_slide_2_title=Ստանալ նույն էջում
+fte_slide_2_copy=Օգտագործեք ներկառուցված տեքստային զրույց կամ տեսազանգ՝ մտքեր փոխանակելու, ընտրանքներ համեմատելու և համաձայնության գալու համար:
+fte_slide_3_title=Հրավիրեք ընկերոջը՝ ուղարկելով հղումը
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}}-ը աշխատում է գրեթե բոլոր դիտարկիչների հետ: Հաշիվ պետք չէ և անվճար է:
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Գտեք {{clientSuperShortname}} պատկերակը՝ սկսելու համար:
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Երբ գտնեք այն էջը, որ ցանկանում եք քննարկել՝ սեղմեք {{brandShortname}}-ի պատկերակին՝ հղում ստեղծելու համար: Ուղարկեք այն ձեր ընկերներին:
+
 invite_header_text_bold=Հրավիրել որևէ մեկին՝ դիտարկելու էջը ձեզ հետ:
+invite_header_text_bold2=Հրավիրել ընկերոջը միանալու ձեզ:
 invite_header_text3=Այն զբաղեցնում է երկու՝ օգտագործելու Firefox Hello-ն և ուղարկելու ընկերներին հղում` վեբը ձեզ հետ դիտարկելու համար:
+invite_header_text4=Համաօգտագործեք այս հղումը, որպեսզի կարողանաք դիտարկել այս էջը միասին:
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Պատճենել հղումը
 invite_copied_link_button=Պատճենված
 invite_email_link_button=Ուղարկել հղումը
 invite_facebook_button3=Facebook
 invite_your_link=Ձեր հղումը.
 
-# Status text
-display_name_guest=Հյուր
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Աշխատաշրջանը սպառված է: Ձեր ստեղծած և համաօգտագործած բոլոր URL-ները այլևս չեն աշխատի:
 could_not_authenticate=Հնարավոր չէ իսկորոշել
 password_changed_question=Փոխե՞լ եք ձեր գաղտնաբառը
 try_again_later=Կրկին փորձեք
 could_not_connect=Հնարավոր չէ կապակցվել սպասարկիչին
@@ -176,17 +195,19 @@ room_name_untitled_page=Անանուն էջ
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Առայժմ: Կարող եք ցանկացած ժամանակ վերադառնալ համաօգտագործվող այս աշխատաշրջան՝ Hello վահանակի միջոցով:
 door_hanger_prompt_name=Ցանկանու՞մ եք տալ անուն, որ հեշտ հիշվի: Ընթացիկ անունը՝
 door_hanger_button=Լավ
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Երբ ձեր ընկերը միանա՝ կկարողանա տեսնել բոլոր այն ներդիրները, որոնց դուք կսեղմեք:
 infobar_screenshare_browser_message2=Դուք համաօգտագործում եք ձեր ներդիրները: Ցանկացած ներդիր, որ սեղմում եք կտեսնեն ձեր ընկերները:
+infobar_screenshare_browser_message3=Այժմ դուք համաօգտագործում եք ձեր ներդիրները: Ձեր ընկերը կտեսնի բոլոր այն ներդիրները, որոնց դուք կսեղմեք:
 infobar_screenshare_stop_sharing_message=Դուք այլևս չեք համաօգտագործում ձեր ներդիրները
 infobar_button_restart_label2=Վերսկսել համաօգտագործումը
 infobar_button_restart_accesskey=e
 infobar_button_stop_label2=Կանգնեցնել համաօգտագործումը
 infobar_button_stop_accesskey=S
 infobar_button_disconnect_label=Կապախզել
 infobar_button_disconnect_accesskey=D
 
@@ -226,15 +247,18 @@ retry_call_button=Կրկնել
 rooms_leave_button_label=Լքել
 
 rooms_panel_title=Ընտրեք զրույց կամ սկսեք նորը
 
 rooms_room_full_call_to_action_label=Իմանալ ավելին {{clientShortname}}-ի մասին »
 rooms_room_full_call_to_action_nonFx_label=Ներբեռնեք {{brandShortname}}-ը՝ սկսելու համար ձեր սեփականը
 rooms_room_full_label=Արդեն երկու անձ կա զրույցում:
 rooms_room_join_label=Միանալ զրույցի
-rooms_room_joined_label=Ինչ-որ մեկը միացել է ձեր զրույցին:
+rooms_room_joined_owner_connected_label2=Ձեր ընկերը արդեն կապակցված է և կկարողանա տեսնել ձեր ներդիրները:
+rooms_room_joined_owner_not_connected_label=Ձեր ընկերը սպասում է՝ {{roomURLHostname}}-ը ձեզ հետ դիտարկելու համար:
 
 self_view_hidden_message=Ինքնադիտումը թաքցված է, բայց դեռ ուղարկվում է. չափափոխել պատուհանը՝ ցուցադրելու համար
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}}-ը հասանելի չէ ձեր երկրում:
+
+display_name_guest=Հյուր
--- a/browser/extensions/loop/chrome/locale/it/loop.properties
+++ b/browser/extensions/loop/chrome/locale/it/loop.properties
@@ -21,41 +21,47 @@ loopMenuItem_accesskey=u
 sign_in_again_title_line_one=Accedi nuovamente
 sign_in_again_title_line_two2=per continuare a utilizzare {{clientShortname2}}
 sign_in_again_button=Accedi
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Utilizza {{clientSuperShortname}} come ospite
 
 panel_browse_with_friend_button=Naviga in questa pagina insieme a un amico
-panel_stop_sharing_tabs_button=Interrompi la condivisione delle schede
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Fai clic sul pulsante Hello per navigare sul Web con un amico.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Utilizzalo per fare progetti, lavorare o semplicemente fare una risata in compagnia.
 first_time_experience_button_label2=Scopri come funziona
 
+## First Time Experience Slides
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+
 invite_header_text_bold=Invita un amico e visita questa pagina insieme a lui.
 invite_header_text3=Servono due persone per utilizzare Firefox Hello: invita un amico e naviga sul Web insieme a lui!
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Copia link
 invite_copied_link_button=Copiato
 invite_email_link_button=Invia link per email
 invite_facebook_button3=Facebook
 invite_your_link=Link:
 
-# Status text
-display_name_guest=Ospite
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Sessione scaduta. Tutti gli URL creati e condivisi in precedenza non saranno più validi.
 could_not_authenticate=Impossibile autenticarsi
 password_changed_question=È stata cambiata la password?
 try_again_later=Riprovare più tardi
 could_not_connect=Impossibile connettersi al server
@@ -177,38 +183,18 @@ room_name_untitled_page=Pagina senza tit
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Ci vediamo più tardi! È possibile ritornare a questa sessione condivisa in qualunque momento attraverso il pannello di Hello.
 door_hanger_prompt_name=Assegnare un nome più semplice da ricordare? Nome corrente:
 door_hanger_button=OK
 
 # Infobar strings
 
 infobar_screenshare_browser_message2=Le schede sono attualmente condivise. Seleziona una qualsiasi delle schede per condividerla
-infobar_screenshare_paused_browser_message=La condivisione schede è in pausa
-infobar_button_gotit_label=Ricevuto!
-infobar_button_gotit_accesskey=c
-infobar_button_pause_label=Pausa
-infobar_button_pause_accesskey=P
-infobar_button_restart_label=Riavvia
 infobar_button_restart_accesskey=v
-infobar_button_resume_label=Riprendi
-infobar_button_resume_accesskey=R
-infobar_button_stop_label=Interrompi
 infobar_button_stop_accesskey=I
-infobar_menuitem_dontshowagain_label=Non mostrare nuovamente
-infobar_menuitem_dontshowagain_accesskey=N
-
-# Context in conversation strings
-
-## LOCALIZATION NOTE(no_conversations_message_heading2): Title shown when user
-## has no conversations available.
-no_conversations_message_heading2=Nessuna conversazione disponibile
-## LOCALIZATION NOTE(no_conversations_start_message2): Subheading inviting the
-## user to start a new conversation.
-no_conversations_start_message2=Avviane una nuova
 
 # E10s not supported strings
 
 e10s_not_supported_button_label=Apri una nuova finestra
 e10s_not_supported_subheading={{brandShortname}} non è compatibile con la modalità multiprocesso.
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
--- a/browser/extensions/loop/chrome/locale/ja/loop.properties
+++ b/browser/extensions/loop/chrome/locale/ja/loop.properties
@@ -23,39 +23,58 @@ sign_in_again_title_line_two2=再度ログインしてください
 sign_in_again_button=ログイン
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=ゲストとして {{clientSuperShortname}} を使用
 
 panel_browse_with_friend_button=このページを友だちと一緒に見る
 panel_disconnect_button=接続中止
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Web ページを友だちと一緒に見るには Hello ボタンをクリックしてください。
+first_time_experience_subheading_button_above=上のボタンをクリックして、友達と Web ページをブラウズしましょう。
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Hello を使って、一緒に計画を立てたり、作業をしたり、おしゃべりしたりしましょう。
+first_time_experience_content2=このアドオンは、一緒に計画を立てたり、おしゃべりしたり、仕事したり、様々なことに活用できます。
 first_time_experience_button_label2=使い方を見る
 
+## First Time Experience Slides
+fte_slide_1_title=友達と Web ページをブラウズ
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=旅行の計画を立てるときも、何かプレゼントを買うときも、{{clientShortname2}} を使えばリアルタイムにより速く物事を決められます。
+fte_slide_2_title=同じページを見る
+fte_slide_2_copy=組み込みのテキスト・動画チャットを使って、アイデアを共有したり、意見を比較したり、話し合いをまとめたりしましょう。
+fte_slide_3_title=リンクを送って友達を招待
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} はほとんどのデスクトップ向けブラウザに対応しています。アカウント不要で、誰とでも無料で会話できます。
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=始めるには {{clientSuperShortname}} アイコンを見つけてください
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=話し合いたいページを見つけたら、{{brandShortname}} 内のアイコンをクリックしてリンクを作成します。それからそのリンクを好きな友達に送りましょう。
+
 invite_header_text_bold=このページを一緒に見る友だちを招待しましょう!
+invite_header_text_bold2=会話に参加する友達を招待しましょう!
 invite_header_text3=Firefox Hello は 2 人で使うので、友だちにリンクを送って一緒に Web をブラウズしましょう!
+invite_header_text4=このリンクを送って、一緒に Web ブラウジングを始めましょう。
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=リンクをコピー
 invite_copied_link_button=コピー完了!
 invite_email_link_button=リンクをメールで送る
 invite_facebook_button3=Facebook
 invite_your_link=あなたのリンク:
 
-# Status text
-display_name_guest=ゲスト
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=セッションが期限切れとなりました。あなたがこれまでに作成、共有した URL はすべて使用できなくなります。
 could_not_authenticate=認証できませんでした
 password_changed_question=パスワードを変更しましたか?
 try_again_later=再度お試しください
 could_not_connect=サーバへ接続できませんでした
@@ -176,17 +195,19 @@ room_name_untitled_page=タイトルのないページ
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=また後で会いましょう! Hello パネルを通じていつでもこの共有セッションに戻れます。
 door_hanger_prompt_name=何か覚えやすい名前を付けますか? 現在の名前:
 door_hanger_button=OK
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=友達が参加すると、その友達はあなたがクリックしたタブを見ることができます。
 infobar_screenshare_browser_message2=あなたはウィンドウを共有しています。開いているタブはすべて友だちによって見られます
+infobar_screenshare_browser_message3=あなたはタブを共有しています。友達はあなたがクリックしたタブを見ることができます。
 infobar_screenshare_stop_sharing_message=タブの共有を中止しました
 infobar_button_restart_label2=共有を再開
 infobar_button_restart_accesskey=e
 infobar_button_stop_label2=共有を中止
 infobar_button_stop_accesskey=S
 infobar_button_disconnect_label=接続中止
 infobar_button_disconnect_accesskey=D
 
@@ -234,8 +255,10 @@ rooms_room_join_label=会話に参加
 rooms_room_joined_owner_connected_label2=あなたの友人が接続し、あなたのタブを見られるようになりました。
 rooms_room_joined_owner_not_connected_label=友人があなたと {{roomURLHostname}} を見るために待っています。
 
 self_view_hidden_message=セルフビューは隠れていますが送信されています。表示するにはウィンドウの大きさを変更してください
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} はあなたがお住まいの国では利用できません。
+
+display_name_guest=ゲスト
--- a/browser/extensions/loop/chrome/locale/kk/loop.properties
+++ b/browser/extensions/loop/chrome/locale/kk/loop.properties
@@ -4,74 +4,128 @@
 
 # Panel Strings
 
 clientSuperShortname=Hello
 
 ## LOCALIZATION_NOTE(loopMenuItem_label): Label of the menu item that is placed
 ## inside the browser 'Tools' menu. Use the unicode ellipsis char, \u2026, or
 ## use "..." if \u2026 doesn't suit traditions in your locale.
+loopMenuItem_label=Сөйлесуді бастау…
+loopMenuItem_accesskey=т
 
 ## LOCALIZATION_NOTE(sign_in_again_title_line_one, sign_in_again_title_line_two2):
 ## These are displayed together at the top of the panel when a user is needed to
 ## sign-in again. The emphesis is on the first line to get the user to sign-in again,
 ## and this is displayed in slightly larger font. Please arrange as necessary for
 ## your locale.
 ## {{clientShortname2}} will be replaced by the brand name for either string.
+sign_in_again_title_line_one=Жүйеге қайта кіріңіз
+sign_in_again_title_line_two2={{clientShortname2}} қолдануды жалғастыру үшін
+sign_in_again_button=Кіру
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
-
+sign_in_again_use_as_guest_button2={{clientSuperShortname}} қоңақ ретінде қолдану
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+panel_browse_with_friend_button=Бұл парақты досыңызбен бірге шолу
+panel_disconnect_button=Байланысты үзу
+
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
+first_time_experience_subheading2=Веб парақтарды достармен бірге қарау үшін Hello батырмасын басыңыз.
+first_time_experience_subheading_button_above=Веб парақтарды достармен бірге қарау үшін жоғарыдағы батырманы басыңыз.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
+first_time_experience_content=Оны достармен бірге жоспарлау, жұмыс жасау және бірге күлу үшін қолданыңыз.
+first_time_experience_content2=Оны істерді бітіру үшін қолданыңыз: достармен бірге жоспарлау, жұмыс жасау және бірге күлу.
+first_time_experience_button_label2=Бұл қалай жұмыс жасайтынын қарау
 
+## First Time Experience Slides
+fte_slide_1_title=Веб парақтарды досыңызбен бірге шолу
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+
+invite_header_text_bold=Біреуді бұл парақты сізбен бірге шолуға шақырыңыз!
+invite_header_text3=Firefox Hello қолдану үшін екі адам керек, сондықтан, досыңызға интернетті бірге шолуға сілтемені жіберіңіз!
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
-
-# Status text
+invite_copy_link_button=Сілтемені көшіріп алу
+invite_copied_link_button=Көшірілген!
+invite_email_link_button=Сілтемені эл. поштамен жіберу
+invite_facebook_button3=Facebook
+invite_your_link=Сіздің сілтемеңіз:
 
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
+session_expired_error_description=Сессия мерзімі аяқталған. Алдында жасалған және бөліскен барлық сілтемелер енді жасамайды.
+could_not_authenticate=Аутентификация мүмкін емес
+password_changed_question=Пароліңізді өзгерттіңіз бе?
+try_again_later=Кейінірек қайталап көріңіз
 
 ## LOCALIZATION NOTE(retry_button): Displayed when there is an error to retry
 ## the appropriate action.
 
 ## LOCALIZATION NOTE (share_email_body7): In this item, don't translate the
 ## part between {{..}} and leave the \n\n part alone
 ## LOCALIZATION NOTE (share_email_body_context3): In this item, don't translate
 ## the part between {{..}} and leave the \n\n part alone.
 ## LOCALIZATION NOTE (share_email_footer2): Common footer content for both email types
 ## LOCALIZATION NOTE (share_tweeet): In this item, don't translate the part
 ## between {{..}}. Please keep the text below 117 characters to make sure it fits
 ## in a tweet.
 
+share_add_service_button=Қызметті қосу
 
 ## LOCALIZATION NOTE (copy_link_menuitem, email_link_menuitem, delete_conversation_menuitem):
 ## These menu items are displayed from a panel's context menu for a conversation.
+copy_link_menuitem=Сілтемені көшіріп алу
+email_link_menuitem=Сілтемені эл. поштамен жіберу
+delete_conversation_menuitem2=Өшіру
 
+panel_footer_signin_or_signup_link=Кіру немесе тіркелгіні жасау
 
+settings_menu_item_account=Тіркелгі
+settings_menu_item_settings=Баптаулар
+settings_menu_item_signout=Шығу
+settings_menu_item_signin=Кіру
+settings_menu_item_turnnotificationson=Хабарламаларды іске қосу
+settings_menu_item_turnnotificationsoff=Хабарламаларды сөндіру
+settings_menu_item_feedback=Кері байланыс хабарламасын жіберу
+settings_menu_button_tooltip=Баптаулар
 
 
 # Conversation Window Strings
 
+initiate_call_button_label2=Сөйлесуді бастауға дайынсыз ба?
+incoming_call_title2=Сөйлесуге сұраным
+incoming_call_block_button=Блоктау
 hangup_button_title=Іле салу
 hangup_button_caption2=Шығу
 
 
 ## LOCALIZATION NOTE (call_with_contact_title): The title displayed
 ## when calling a contact. Don't translate the part between {{..}} because
 ## this will be replaced by the contact's name.
+call_with_contact_title={{contactName}} контактымен сөйлесу
 
 # Outgoing conversation
 
+outgoing_call_title=Сөйлесуді бастау керек пе?
+initiate_audio_video_call_button2=Бастау
+initiate_audio_video_call_tooltip2=Видео сөйлесуін бастау
+initiate_audio_call_button2=Дауыстық сөйлесу
 
 
 ## LOCALIZATION NOTE (contact_offline_title): Title which is displayed when the
 ## contact is offline.
 ## LOCALIZATION NOTE (call_timeout_notification_text): Title which is displayed
 ## when the call didn't go through.
 
 ## LOCALIZATION NOTE (cancel_button):
@@ -94,23 +148,16 @@ hangup_button_caption2=Шығу
 
 
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 
 # Infobar strings
 
 
-# Context in conversation strings
-
-## LOCALIZATION NOTE(no_conversations_message_heading2): Title shown when user
-## has no conversations available.
-## LOCALIZATION NOTE(no_conversations_start_message2): Subheading inviting the
-## user to start a new conversation.
-
 # E10s not supported strings
 
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 ## LOCALIZATION NOTE: In this file, don't translate the part between {{..}}
 
@@ -140,15 +187,18 @@ retry_call_button=Қайталап көру
 rooms_leave_button_label=Шығу
 
 rooms_panel_title=Сөйлесуді таңдаңыз немесе жаңасын жасаңыз
 
 rooms_room_full_call_to_action_label={{clientShortname}} туралы көбірек біліңіз »
 rooms_room_full_call_to_action_nonFx_label=Өз сөйлесуіңізді бастау үшін {{brandShortname}} жүктеп алыңыз
 rooms_room_full_label=Бұл сөйлесуге екі адам қатысуда.
 rooms_room_join_label=Сөйлесуге қосылу
-rooms_room_joined_label=Біреу сөйлесуге қосылды!
+rooms_room_joined_owner_connected_label2=Сіздің досыңыз енді байланысқан, және сіздің браузер беттерін көре алады.
+rooms_room_joined_owner_not_connected_label=Сіздің досыңыз {{roomURLHostname}} сайтын бірге қарауға сізді күтіп тұр.
 
 self_view_hidden_message=Өздік көрініс жасырылған, бірақ, жіберілуде; көрсету үшін терезе өлшемін өзгертіңіз
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} сіздің еліңізде қолжетерсіз.
+
+display_name_guest=Қонақ
--- a/browser/extensions/loop/chrome/locale/nl/loop.properties
+++ b/browser/extensions/loop/chrome/locale/nl/loop.properties
@@ -21,41 +21,60 @@ loopMenuItem_accesskey=s
 sign_in_again_title_line_one=Meld u opnieuw aan
 sign_in_again_title_line_two2=om {{clientShortname2}} te blijven gebruiken
 sign_in_again_button=Aanmelden
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2={{clientSuperShortname}} als gast gebruiken
 
 panel_browse_with_friend_button=Deze pagina met een vriend bekijken
-panel_stop_sharing_tabs_button=Delen van uw tabbladen stoppen
+panel_disconnect_button=Verbreken
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Klik op de Hello-knop om webpagina’s met een vriend te bekijken.
+first_time_experience_subheading_button_above=Klik op de bovenstaande knop om webpagina’s met een vriend te bekijken.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Gebruik het om samen te plannen, samen te werken en samen te lachen.
+first_time_experience_content2=Gebruik het om dingen gedaan te krijgen: samen plannen, samen lachen, samen werken.
 first_time_experience_button_label2=Zien hoe het werkt
 
+## First Time Experience Slides
+fte_slide_1_title=Bekijk webpagina’s met een vriend
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Of u nu een reis plant of een cadeau zoekt, met {{clientShortname2}} maakt u in realtime snellere beslissingen.
+fte_slide_2_title=Bekijk dezelfde pagina
+fte_slide_2_copy=Gebruik de ingebouwde tekst- of videochat om ideeën uit te wisselen, opties te vergelijken en overeenstemming te bereiken.
+fte_slide_3_title=Nodig een vriend uit door een koppeling te delen
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} werkt met de meeste desktopbrowsers. Er zijn geen accounts nodig en iedereen maakt gratis verbinding.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Zoek het {{clientSuperShortname}}-pictogram om te beginnen
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Als u een pagina hebt gevonden die u wilt bespreken, klikt u op het pictogram in {{brandShortname}} om een koppeling te maken. Stuur deze daarna naar uw vriend zoals u wilt!
+
 invite_header_text_bold=Nodig iemand uit om deze pagina met u te bekijken!
+invite_header_text_bold2=Nodig een vriend uit om deel te nemen!
 invite_header_text3=Er zijn twee personen nodig om Firefox Hello te gebruiken, dus stuur een koppeling naar een vriend om samen op het web te bladeren!
+invite_header_text4=Deel deze koppeling, zodat u samen het web kunt bekijken.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Koppeling kopiëren
 invite_copied_link_button=Gekopieerd!
 invite_email_link_button=Koppeling e-mailen
 invite_facebook_button3=Facebook
 invite_your_link=Uw koppeling:
 
-# Status text
-display_name_guest=Gast
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Sessie verlopen. Alle eerder aangemaakte en gedeelde URL’s zullen niet meer werken.
 could_not_authenticate=Authenticatie niet gelukt
 password_changed_question=Hebt u uw wachtwoord gewijzigd?
 try_again_later=Probeer het later opnieuw
 could_not_connect=Kon niet verbinden met de server
@@ -176,39 +195,26 @@ room_name_untitled_page=Pagina zonder ti
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Tot later! U kunt op elk gewenst moment naar deze gedeelde sessie terugkeren via het Hello-paneel.
 door_hanger_prompt_name=Wilt u de sessie een naam geven die eenvoudiger is te onthouden? Huidige naam:
 door_hanger_button=OK
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Zodra uw vriend deelneemt, kan deze elk tabblad zien waarop u klikt.
 infobar_screenshare_browser_message2=U deelt uw tabbladen. Tabbladen waarop u klikt kunnen door uw vrienden worden gezien
-infobar_screenshare_paused_browser_message=Tabbladen delen is gepauzeerd
-infobar_button_gotit_label=Begrepen!
-infobar_button_gotit_accesskey=e
-infobar_button_pause_label=Pauzeren
-infobar_button_pause_accesskey=P
-infobar_button_restart_label=Herstarten
+infobar_screenshare_browser_message3=U deelt nu uw tabbladen. Uw vriend ziet elk tabblad waarop u klikt.
+infobar_screenshare_stop_sharing_message=Uw tabbladen worden niet meer gedeeld
+infobar_button_restart_label2=Delen herstarten
 infobar_button_restart_accesskey=e
-infobar_button_resume_label=Hervatten
-infobar_button_resume_accesskey=r
-infobar_button_stop_label=Stoppen
-infobar_button_stop_accesskey=S
-infobar_menuitem_dontshowagain_label=Dit niet meer tonen
-infobar_menuitem_dontshowagain_accesskey=D
-
-# Context in conversation strings
-
-## LOCALIZATION NOTE(no_conversations_message_heading2): Title shown when user
-## has no conversations available.
-no_conversations_message_heading2=Nog geen gesprekken.
-## LOCALIZATION NOTE(no_conversations_start_message2): Subheading inviting the
-## user to start a new conversation.
-no_conversations_start_message2=Begin een nieuw gesprek!
+infobar_button_stop_label2=Delen stoppen
+infobar_button_stop_accesskey=s
+infobar_button_disconnect_label=Verbreken
+infobar_button_disconnect_accesskey=v
 
 # E10s not supported strings
 
 e10s_not_supported_button_label=Nieuw venster openen
 e10s_not_supported_subheading={{brandShortname}} werkt niet in een multi-process-venster.
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
@@ -241,15 +247,18 @@ retry_call_button=Nogmaals proberen
 rooms_leave_button_label=Verlaten
 
 rooms_panel_title=Kies of begin een nieuw gesprek
 
 rooms_room_full_call_to_action_label=Meer info over {{clientShortname}} »
 rooms_room_full_call_to_action_nonFx_label=Download {{brandShortname}} om zelf een gesprek te beginnen
 rooms_room_full_label=Er zijn al twee personen in dit gesprek.
 rooms_room_join_label=Deelnemen aan het gesprek
-rooms_room_joined_label=Iemand neemt deel aan het gesprek!
+rooms_room_joined_owner_connected_label2=Uw vriend is nu verbonden en kan uw tabbladen zien.
+rooms_room_joined_owner_not_connected_label=Uw vriend wacht en wil samen met u {{roomURLHostname}} bekijken.
 
 self_view_hidden_message=Eigen weergave verborgen maar wordt nog steeds verzonden; wijzig vensterformaat om te tonen
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} is niet in uw land beschikbaar.
+
+display_name_guest=Gast
--- a/browser/extensions/loop/chrome/locale/pl/loop.properties
+++ b/browser/extensions/loop/chrome/locale/pl/loop.properties
@@ -1,57 +1,175 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
-initiate_call_button_label2=Gotowi do rozmowy?
+clientSuperShortname=Firefox Hello
+
+loopMenuItem_label=Rozpocznij rozmowę…
+loopMenuItem_accesskey=R
+
+sign_in_again_title_line_one=Zaloguj się ponownie,
+sign_in_again_title_line_two2=aby dalej używać {{clientShortname2}}
+sign_in_again_button=Zaloguj się
+
+sign_in_again_use_as_guest_button2=Używaj {{clientSuperShortname}} jako gość
+
+panel_browse_with_friend_button=Udostępnij rozmówcy obraz tej karty
+panel_disconnect_button=Rozłącz
+
+first_time_experience_subheading2=Kliknij przycisk Hello, aby przeglądać strony ze znajomymi.
+first_time_experience_subheading_button_above=Kliknij przycisk powyżej, aby przeglądać strony WWW ze znajomymi.
+first_time_experience_content=Używaj Firefox Hello do wspólnego planowania, pracy i zabawy.
+first_time_experience_content2=Używaj Firefox Hello do wspólnego planowania, pracy i zabawy.
+first_time_experience_button_label2=Przekonaj się, jak to działa
+
+fte_slide_1_title=Przeglądaj strony WWW wspólnie ze znajomymi
+fte_slide_1_copy=Niezależnie czy planujesz wycieczkę, zakup prezentu, {{clientShortname2}} pozwala podejmować decyzje szybciej.
+fte_slide_2_title=Przeglądaj tę samą stronę
+fte_slide_2_copy=Wbudowany czat tekstowy i wideo umożliwia łatwe dzielenie się pomysłami, porównywanie opcji i podejmowanie decyzji.
+fte_slide_3_title=Zaproś znajomego wysyłając odnośnik
+fte_slide_3_copy={{clientSuperShortname}} działa w większości przeglądarek na komputery. Nie jest wymagane zakładnie kont i wszyscy łączą się bez opłat.
+fte_slide_4_title=Odszukaj ikonę {{clientSuperShortname}}, aby rozpocząć
+fte_slide_4_copy=Po znalezieniu strony do omówienia, kliknij ikonę w {{brandShortname}}, aby utworzyć odnośnik. Wyślij go znajomemu jakkolwiek chcesz!
+
+invite_header_text_bold=Zaproś kogoś do wspólnego przeglądania strony
+invite_header_text_bold2=Zaproś znajomego, aby dołączył do Ciebie!
+invite_header_text3=Do używania Firefox Hello potrzeba dwóch osób, prześlij znajomemu odnośnik do wspólnego przeglądania sieci.
+invite_header_text4=Udostępnij ten odnośnik, aby przeglądać wspólnie sieć.
+invite_copy_link_button=Kopiuj odnośnik
+invite_copied_link_button=Skopiowano
+invite_email_link_button=Wyślij odnośnik
+invite_facebook_button3=Udostępnij na Facebooku
+invite_your_link=Odnośnik:
+
+session_expired_error_description=Sesja wygasła. Żadne adresy URL utworzone wcześniej nie będą działać.
+could_not_authenticate=Uwierzytelnianie nie powiodło się
+password_changed_question=Może hasło zostało zmienione?
+try_again_later=Proszę spróbować ponownie
+could_not_connect=Nie można połączyć z serwerem
+check_internet_connection=Proszę sprawdzić połączenie z Internetem
+login_expired=Sesja wygasła
+service_not_available=Serwis tymczasowo niedostępny
+problem_accessing_account=Wystąpił problem z dostępem do konta
+retry_button=Spróbuj ponownie
+
+share_email_subject7=Zaproszenie do wspólnego przeglądania sieci
+share_email_body7=Ktoś czeka, aby połączyć się z Tobą poprzez Firefox Hello. Kliknij odnośnik, aby wspólnie przeglądać sieć: {{callUrl}}
+share_email_body_context3=Ktoś czeka, aby połączyć się z Tobą poprzez Firefox Hello. Kliknij odnośnik, aby przeglądać „{{title}}” razem: {{callUrl}}
+share_email_footer2=\n\n____________\nFirefox Hello pozwala przeglądać sieć ze znajomymi. Użyj go, gdy chcesz coś wspólnie załatwić, zaplanować, popracować czy pośmiać się. Więcej informacji można znaleźć pod adresem https://www.firefox.com/hello
+
+share_tweet=Dołącz do rozmowy wideo ze mną, używając {{clientShortname2}}!
+share_add_service_button=Dodaj serwis
+copy_link_menuitem=Kopiuj odnośnik
+email_link_menuitem=Wyślij odnośnik
+delete_conversation_menuitem2=Usuń
+
+panel_footer_signin_or_signup_link=Zaloguj się lub utwórz konto
+
+settings_menu_item_account=Konto
+settings_menu_item_settings=Ustawienia
+settings_menu_item_signout=Wyloguj się
+settings_menu_item_signin=Zaloguj się
+settings_menu_item_turnnotificationson=Włącz powiadomienia
+settings_menu_item_turnnotificationsoff=Wyłącz powiadomienia
+settings_menu_item_feedback=Prześlij swoją opinię…
+settings_menu_button_tooltip=Ustawienia
+
+initiate_call_button_label2=Rozpocząć rozmowę?
+incoming_call_title2=Rozmowa przychodząca
+incoming_call_block_button=Zablokuj
 hangup_button_title=Rozłącz
-hangup_button_caption2=Rozłącz
+hangup_button_caption2=Zakończ rozmowę
 
-call_with_contact_title=Połączenie z {{incomingCallIdentity}}
+call_with_contact_title=Rozmowa z {{incomingCallIdentity}}
 
 outgoing_call_title=Rozpocząć rozmowę?
-initiate_audio_video_call_button2=Zacznij
-initiate_audio_video_call_tooltip2=Zacznij wideorozmowę
-initiate_audio_call_button2=Rozmowa
+initiate_audio_video_call_button2=Rozpocznij
+initiate_audio_video_call_tooltip2=Rozpocznij (dźwięk i obraz)
+initiate_audio_call_button2=Rozpocznij (tylko dźwięk)
 
 peer_ended_conversation2=Rozmówca się rozłączył.
 restart_call=Połącz ponownie
 
-call_timeout_notification_text=Połączenie nieudane.
+contact_offline_title=Kontakt offline
+call_timeout_notification_text=Nieudane połączenie.
+
+cancel_button=Anuluj
+rejoin_button=Połącz ponownie
 
-network_disconnected=Połączenie sieciowe nagle rozłączone.
-connection_error_see_console_notification=Rozmowa przerwana; sprawdź szczegóły w konsoli.
+cannot_start_call_session_not_ready=Nie można rozpocząć rozmowy, sesja nie jest gotowa.
+network_disconnected=Połączenie sieciowe niespodziewanie zakończone.
+connection_error_see_console_notification=Nieudane połączenie (szczegóły można znaleźć w konsoli).
+no_media_failure_message=Nie znaleziono kamery ani mikrofonu.
+ice_failure_message=Nieudane połączenie. Zapora sieciowa może blokować połączenia.
 
-feedback_rejoin_button=Połącz
+legal_text_and_links3=Używając {{clientShortname}}, zgadzasz się na {{terms_of_use}} oraz {{privacy_notice}}.
+legal_text_tos=warunki korzystania z usługi
+legal_text_privacy=politykę prywatności
+powered_by_beforeLogo=Obsługiwane przez
+powered_by_afterLogo=
+
+feedback_rejoin_button=Połącz ponownie
 feedback_report_user_button=Zgłoś użytkownika
+feedback_window_heading=Jak oceniasz rozmowę?
+feedback_request_button=Prześlij swoją opinię
 
 tour_label=Przewodnik
+
+rooms_list_recently_browsed2=Ostatnio otwierane
+rooms_list_currently_browsing2=Obecnie aktywne
+rooms_signout_alert=Otwarte rozmowy zostaną zamknięte
+room_name_untitled_page=Strona bez tytułu
+
+door_hanger_return=Do zobaczenia! Do tej współdzielonej sesji można zawsze wrócić przez panel Hello.
+door_hanger_prompt_name=Czy nadać jej nazwę ułatwiającą jej zapamiętanie? Obecna nazwa to:
+door_hanger_button=OK
+
+infobar_screenshare_no_guest_message=Jak tylko znajomy dołączy, będzie mógł oglądać zawartość każdej karty, którą klikniesz.
+infobar_screenshare_browser_message2=Udostępniasz obraz kart. Rozmówcy mogą oglądać zawartość każdej karty, którą klikniesz.
+infobar_screenshare_browser_message3=Udostępniasz obraz kart. Rozmówcy mogą oglądać zawartość każdej karty, którą klikniesz.
+infobar_screenshare_stop_sharing_message=Udostępnianie obrazu kart zostało wstrzymane
+infobar_button_restart_label2=Wznów udostępnianie
+infobar_button_restart_accesskey=W
+infobar_button_stop_label2=Nie udostępniaj dłużej
+infobar_button_stop_accesskey=N
+infobar_button_disconnect_label=Rozłącz
+infobar_button_disconnect_accesskey=R
+
+e10s_not_supported_button_label=Otwórz nowe okno
+e10s_not_supported_subheading={{brandShortname}} nie działa w oknach wieloprocesowych.
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
-chat_textbox_placeholder=Wiadomość
+chat_textbox_placeholder=Wprowadź tekst wiadomości
 
 clientShortname2=Firefox Hello
 
-conversation_has_ended=Rozmowa zakończona.
+conversation_has_ended=Rozmowa zakończona
 
+generic_failure_message=Wystąpiły problemy techniczne…
 generic_failure_no_reason2=Spróbować ponownie?
 
 help_label=Pomoc
 
-mute_local_audio_button_title=Wycisz audio
-unmute_local_audio_button_title=Włącz audio
+mute_local_audio_button_title=Wycisz
+unmute_local_audio_button_title=Włącz dźwięk
+mute_local_video_button_title2=Wyłącz wysyłanie obrazu
+unmute_local_video_button_title2=Włącz wysyłanie obrazu
 
-retry_call_button=Połącz ponownie
-
-rooms_leave_button_label=Opuść
+retry_call_button=Spróbuj ponownie
 
-rooms_panel_title=Wybierz lub zacznij rozmowę
+rooms_leave_button_label=Rozłącz
+rooms_panel_title=Wybierz rozmowę lub rozpocznij nową
+rooms_room_full_call_to_action_label=Więcej informacji o {{clientShortname}} »
+rooms_room_full_call_to_action_nonFx_label=Pobierz program {{brandShortname}}, aby rozpocząć własną
+rooms_room_full_label=Dwoje innych uczestników bierze już udział w tej rozmowie
+rooms_room_join_label=Dołącz do rozmowy
+rooms_room_joined_owner_connected_label2=Zestawiono połączenie, druga osoba będzie od teraz mogła widzieć Twoje karty.
+rooms_room_joined_owner_not_connected_label=Ktoś czeka, aby wspólnie przeglądać {{roomURLHostname}}.
 
-rooms_room_full_call_to_action_label=Dowiedz się więcej o {{clientShortname}} »
-rooms_room_full_call_to_action_nonFx_label=Ściągnij {{brandShortname}} i zacznij własne rozmowy
-rooms_room_full_label=Dwie inne osoby już tu są.
-rooms_room_join_label=Dołącz do rozmowy
-rooms_room_joined_label=Ktoś właśnie dołączył do rozmowy!
+self_view_hidden_message=Obraz z kamery jest ukryty ale nadal wysyłany (powiększenie okna ukaże go)
 
-self_view_hidden_message=Obraz z własnej kamery ukryty, ale nadal wysyłany; aby go zobaczyć, zmień rozmiar okna
+tos_failure_message=Usługa {{clientShortname}} nie jest dostępna w tym kraju.
+
+display_name_guest=Gość
--- a/browser/extensions/loop/chrome/locale/pt-BR/loop.properties
+++ b/browser/extensions/loop/chrome/locale/pt-BR/loop.properties
@@ -23,39 +23,50 @@ sign_in_again_title_line_two2=para conti
 sign_in_again_button=Entrar
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Usar o {{clientSuperShortname}} como um convidado
 
 panel_browse_with_friend_button=Navegue nesta página com um amigo
 panel_disconnect_button=Desconectar
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Clique no botão Hello para navegar com um amigo.
+first_time_experience_subheading_button_above=Clique no botão acima para navegar na web com um amigo.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Use para planejar junto, trabalhar junto, rir junto.
+first_time_experience_content2=Use para fazer coisas: planejar juntos, rir juntos, trabalhar juntos.
 first_time_experience_button_label2=Veja como funciona
 
+## First Time Experience Slides
+fte_slide_1_title=Navegue na web com um amigo
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Se está planejando uma viagem ou comprar um presente, {{clientShortname2}} te deixa tomar decisões mais rápidas em tempo real.
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+
 invite_header_text_bold=Convide alguém para navegar nessa página com você!
 invite_header_text3=É preciso de dois para usar o Firefox Hello, então envie um link para um amigo navegar na web com você!
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Copiar Link
 invite_copied_link_button=Copiado!
 invite_email_link_button=Enviar link por email
 invite_facebook_button3=Facebook
 invite_your_link=Seu link:
 
-# Status text
-display_name_guest=Convidado
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Sessão expirada. Todos os URL criados e partilhados deixarão de funcionar.
 could_not_authenticate=Não foi possível autenticar
 password_changed_question=Você alterou sua senha?
 try_again_later=Por favor, tente mais tarde
 could_not_connect=Não foi possível conectar ao servidor
@@ -234,8 +245,10 @@ rooms_room_join_label=Entre na conversa
 rooms_room_joined_owner_connected_label2=Seu amigo agora está conectado e será capaz de ver suas abas.
 rooms_room_joined_owner_not_connected_label=Seu amigo está esperando para navegar em {{roomURLHostname}} com você.
 
 self_view_hidden_message=A visualização da sua câmera está oculta, mas ainda é transmitida; redimensione a janela para visualizá-la novamente
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} não está disponível no seu país.
+
+display_name_guest=Convidado
--- a/browser/extensions/loop/chrome/locale/pt-PT/loop.properties
+++ b/browser/extensions/loop/chrome/locale/pt-PT/loop.properties
@@ -23,39 +23,58 @@ sign_in_again_title_line_two2=para conti
 sign_in_again_button=Iniciar sessão
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Utilizar {{clientSuperShortname}} como um Convidado
 
 panel_browse_with_friend_button=Navegue nesta página com um amigo
 panel_disconnect_button=Desligar
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Clique no botão Hello para navegar páginas Web com um amigo.
+first_time_experience_subheading_button_above=Clique no botão acima para navegar em páginas Web com um amigo.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Use-o para planear, trabalhar e rir em conjunto.
+first_time_experience_content2=Use-o para fazer coisas: planear em conjunto, rir em conjunto, trabalhar em conjunto.
 first_time_experience_button_label2=Ver como funciona
 
+## First Time Experience Slides
+fte_slide_1_title=Navegue em páginas Web com um amigo
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Se estiver a planear uma viagem ou a fazer compras para um presente, o {{clientShortname2}} deixa-o fazer decisões mais rápidas em tempo real.
+fte_slide_2_title=Esteja na mesma página
+fte_slide_2_copy=Utilize o texto embutido ou conversa por vídeo para partilhar ideias, comparar opções e chegar a um acordo.
+fte_slide_3_title=Convide um amigo ao enviar esta ligação
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy=O {{clientSuperShortname}} funciona com a maioria dos navegadores de computador. Não são necessárias contas e todos se ligam de graça.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Encontre o ícone {{clientSuperShortname}} para começar
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Assim que encontrar uma página que queira discutir, clique no ícone no {{brandShortname}} para criar uma ligação. Depois, envie-a a um amigo como quiser!
+
 invite_header_text_bold=Convide alguém para navegar nesta página consigo!
+invite_header_text_bold2=Convide um amigo para se juntar a si!
 invite_header_text3=São necessárias duas pessoas para utilizar o Firefox Hello, pelo que, envie uma ligação a um amigo para navegar na Web consigo!
+invite_header_text4=Partilhe esta ligação para que possa começar a navegar na Web em conjunto.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Copiar ligação
 invite_copied_link_button=Copiada!
 invite_email_link_button=Enviar por email
 invite_facebook_button3=Facebook
 invite_your_link=A sua ligação:
 
-# Status text
-display_name_guest=Convidado
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Sessão expirada. Todos os URL criados e partilhados deixarão de funcionar.
 could_not_authenticate=Não foi possível autenticar
 password_changed_question=Alterou a sua palavra-passe?
 try_again_later=Por favor, tente mais tarde
 could_not_connect=Não foi possível ligar ao servidor
@@ -176,17 +195,19 @@ room_name_untitled_page=Página sem título
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Até logo! Pode voltar a esta sessão partilhada a qualquer momento através do painel do Hello.
 door_hanger_prompt_name=Gostaria de dar um nome que seja mais fácil de memorizar? Nome atual:
 door_hanger_button=OK
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Assim que o seu amigo se juntar, o mesmo poderá ver qualquer separador que você clique.
 infobar_screenshare_browser_message2=Está a partilhar os seus separadores. Qualquer separador que clicar poderá será ser visto pelos seus amigos
+infobar_screenshare_browser_message3=Está agora a partilhar os seus separadores. O seu amigo poderá ver qualquer separador que você clicar.
 infobar_screenshare_stop_sharing_message=Já não está a partilhar os seus separadores
 infobar_button_restart_label2=Reiniciar a partilha
 infobar_button_restart_accesskey=e
 infobar_button_stop_label2=Parar de partilhar
 infobar_button_stop_accesskey=r
 infobar_button_disconnect_label=Desligar
 infobar_button_disconnect_accesskey=D
 
@@ -234,8 +255,10 @@ rooms_room_join_label=Junte-se à conversa
 rooms_room_joined_owner_connected_label2=O seu amigo está agora ligado e poderá ver os seus separadores.
 rooms_room_joined_owner_not_connected_label=O seu amigo está à espera para navegar em {{roomURLHostname}} consigo.
 
 self_view_hidden_message=Vista própria oculta mas ainda a ser enviada; redimensione a janela para mostrar
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} não está disponível no seu país.
+
+display_name_guest=Visitante
--- a/browser/extensions/loop/chrome/locale/rm/loop.properties
+++ b/browser/extensions/loop/chrome/locale/rm/loop.properties
@@ -21,17 +21,17 @@ loopMenuItem_accesskey=t
 sign_in_again_title_line_one=T'annunzia p.pl. danovamain
 sign_in_again_title_line_two2=per cuntinuar dad utilisar {{clientShortname2}}
 sign_in_again_button=S'annunziar
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Utilisar {{clientSuperShortname}} sco giast
 
 panel_browse_with_friend_button=Navigar cun in ami en questa pagina
-panel_stop_sharing_tabs_button=Chalar da cundivider tes tabs
+panel_disconnect_button=Deconnectar
 
 ## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Clicca sin il buttun da Hello per navigar cun in ami en il web.
 
 ## LOCALIZATION_NOTE(first_time_experience_content): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Fa diever da la funcziun per planisar ensemen, lavurar ensemen, rir ensemen.
@@ -178,38 +178,23 @@ room_name_untitled_page=Pagina senza tit
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=A pli tard! Ti pos turnar da tut temp a questa sessiun cundividida via la panela da Hello.
 door_hanger_prompt_name=Vuls ti dar in num che ti pos tegnair endament pli simpel? Il num actual:
 door_hanger_button=OK
 
 # Infobar strings
 
 infobar_screenshare_browser_message2=Ti cundividas tes tabs. Mintga tab che ti avras vesan era tes amis
-infobar_screenshare_paused_browser_message=La cundivisiun da tabs paussa
-infobar_button_gotit_label=Chapì!
-infobar_button_gotit_accesskey=C
-infobar_button_pause_label=Pausa
-infobar_button_pause_accesskey=P
-infobar_button_restart_label=Reaviar
+infobar_screenshare_stop_sharing_message=Ti na cundividas betg pli tes tabs
+infobar_button_restart_label2=Puspè cundivider
 infobar_button_restart_accesskey=e
-infobar_button_resume_label=Cuntinuar
-infobar_button_resume_accesskey=r
-infobar_button_stop_label=Stop
+infobar_button_stop_label2=Chalar da cundivider
 infobar_button_stop_accesskey=S
-infobar_menuitem_dontshowagain_label=Betg pli mussar
-infobar_menuitem_dontshowagain_accesskey=p
-
-# Context in conversation strings
-
-## LOCALIZATION NOTE(no_conversations_message_heading2): Title shown when user
-## has no conversations available.
-no_conversations_message_heading2=Anc naginas conversaziuns.
-## LOCALIZATION NOTE(no_conversations_start_message2): Subheading inviting the
-## user to start a new conversation.
-no_conversations_start_message2=Cumenza uss ina nova!
+infobar_button_disconnect_label=Deconnectar
+infobar_button_disconnect_accesskey=D
 
 # E10s not supported strings
 
 e10s_not_supported_button_label=Avrir ina nova fanestra
 e10s_not_supported_subheading={{brandShortname}} na funcziuna betg en ina fanestra da plirs process.
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
@@ -242,15 +227,16 @@ retry_call_button=Repeter
 rooms_leave_button_label=Bandunar
 
 rooms_panel_title=Tscherna ina conversaziun u cumenza ina nova
 
 rooms_room_full_call_to_action_label=Ulteriuras infurmaziuns davart {{clientShortname}} »
 rooms_room_full_call_to_action_nonFx_label=Telechargiar {{brandShortname}} per cumenzar in'atgna
 rooms_room_full_label=Igl ha gia duas persunas en questa conversaziun.
 rooms_room_join_label=Entrar en la conversaziun
-rooms_room_joined_label=Insatgi è entrà en la conversaziun!
+rooms_room_joined_owner_connected_label2=Tia amia u tes ami è ussa connectà e po vesair tes tabs.
+rooms_room_joined_owner_not_connected_label=Tia amia u tes ami spetga per navigar cun tai sin {{roomURLHostname}}.
 
 self_view_hidden_message=Tes video è zuppentà, ma vegn anc adina transmess; engrondir la fanestra per al mussar
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} n'è betg disponibel en tes pajais.
--- a/browser/extensions/loop/chrome/locale/ru/loop.properties
+++ b/browser/extensions/loop/chrome/locale/ru/loop.properties
@@ -21,41 +21,60 @@ loopMenuItem_accesskey=е
 sign_in_again_title_line_one=Пожалуйста, войдите снова
 sign_in_again_title_line_two2=чтобы продолжить использовать {{clientShortname2}}
 sign_in_again_button=Войти
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Использовать {{clientSuperShortname}} как Гость
 
 panel_browse_with_friend_button=Просмотрите эту страницу со своим другом
-panel_stop_sharing_tabs_button=Прекратить доступ к вашим вкладкам
+panel_disconnect_button=Отсоединить
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Щёлкните по кнопке Hello, чтобы вместе с другом посёрфить по Интернету.
+first_time_experience_subheading_button_above=Щёлкните на кнопку ниже, чтобы просмотреть веб-страницы с другом.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Используйте это, чтобы вместе планировать, вместе работать, вместе смеяться.
+first_time_experience_content2=Используйте, чтобы добиться цели: планируйте вместе, смейтесь вместе, работайте вместе.
 first_time_experience_button_label2=Посмотреть, как это работает
 
+## First Time Experience Slides
+fte_slide_1_title=Просматривайте веб-страницы с другом
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Бу то планирование поездки или покупка подарка, {{clientShortname2}} позволяет вам принимать решения быстрее в реальном времени.
+fte_slide_2_title=Смотрите одну страницу
+fte_slide_2_copy=Используйте встроенные текстовые и видео чаты для обмена идеями, сравнения мнений и прихода к соглашению.
+fte_slide_3_title=Пригласите друга, отправив ему ссылку
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} работает с множеством настольных браузеров. Не нужны аккаунты и каждый может подключаться бесплатно.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Найдите иконку {{clientSuperShortname}}, чтобы начать
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Когда вы найдете страницу, которую захотите обсудить, нажмите иконку {{brandShortname}}, чтобы создать ссылку. Затем отправьте её другу, любым удобным для вас способом!
+
 invite_header_text_bold=Пригласите кого-нибудь, чтобы посмотреть эту страницу вместе!
+invite_header_text_bold2=Пригласить друга присоединиться к вам!
 invite_header_text3=Firefox Hello создан для общения, так что отправьте другу ссылку, чтобы вместе посёрфить по Интернету!
+invite_header_text4=Поделитесь этой ссылкой и вы сможете просматривать Веб вместе.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Скопировать ссылку
 invite_copied_link_button=Скопировано!
 invite_email_link_button=Послать ссылку по эл. почте
 invite_facebook_button3=Фейсбук
 invite_your_link=Ваша ссылка:
 
-# Status text
-display_name_guest=Гость
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Срок действия сессии истёк. Все ранее созданные и отправленные вами URL более работать не будут.
 could_not_authenticate=Не удалось аутентифицироваться
 password_changed_question=Вы сменили свой пароль?
 try_again_later=Подождите и попробуйте снова
 could_not_connect=Не удалось соединиться с сервером
@@ -177,39 +196,26 @@ room_name_untitled_page=Безымянная страница
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Увидимся позже! Вы можете вернуться к этой общей сессии в любое время с помощью панели Hello.
 door_hanger_prompt_name=Вы хотите дать ему имя, которое легче запомнить? Текущее имя:
 door_hanger_button=OK
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Как только ваши друзья присоединятся, они смогут увидеть любую текущую вкладку.
 infobar_screenshare_browser_message2=Вы делитесь своими вкладками. Ваши друзья могут видеть содержимое любой вкладки, по которой вы щёлкнули.
-infobar_screenshare_paused_browser_message=Доступ к вкладкам приостановлен
-infobar_button_gotit_label=Понятно!
-infobar_button_gotit_accesskey=о
-infobar_button_pause_label=Приостановить
-infobar_button_pause_accesskey=и
-infobar_button_restart_label=Перезапустить
+infobar_screenshare_browser_message3=Сейчас вы делитесь своими вкладками. Ваш друг увидит любую вкладку, на которую вы нажмёте.
+infobar_screenshare_stop_sharing_message=Вы больше не можете обмениваться своими вкладками
+infobar_button_restart_label2=Перезапустить обмен
 infobar_button_restart_accesskey=е
-infobar_button_resume_label=Возобновить
-infobar_button_resume_accesskey=о
-infobar_button_stop_label=Остановить
+infobar_button_stop_label2=Остановить обмен
 infobar_button_stop_accesskey=н
-infobar_menuitem_dontshowagain_label=Не показывать в следующий раз
-infobar_menuitem_dontshowagain_accesskey=ы
-
-# Context in conversation strings
-
-## LOCALIZATION NOTE(no_conversations_message_heading2): Title shown when user
-## has no conversations available.
-no_conversations_message_heading2=Пока звонков не было
-## LOCALIZATION NOTE(no_conversations_start_message2): Subheading inviting the
-## user to start a new conversation.
-no_conversations_start_message2=Сделайте звонок!
+infobar_button_disconnect_label=Отсоединить
+infobar_button_disconnect_accesskey=о
 
 # E10s not supported strings
 
 e10s_not_supported_button_label=Запустить новое окно
 e10s_not_supported_subheading={{brandShortname}} не работает в мультипроцессном окне.
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
@@ -242,15 +248,18 @@ retry_call_button=Повторить
 rooms_leave_button_label=Уйти
 
 rooms_panel_title=Выберите звонок или сделайте новый
 
 rooms_room_full_call_to_action_label=Узнайте больше о {{clientShortname}} »
 rooms_room_full_call_to_action_nonFx_label=Загрузите {{brandShortname}}, чтобы сделать звонок
 rooms_room_full_label=В этом звонке уже участвуют два человека.
 rooms_room_join_label=Присоединиться к звонку
-rooms_room_joined_label=Кто-то присоединился к звонку!
+rooms_room_joined_owner_connected_label2=Ваш друг сейчас подключен и сможет увидеть ваши вкладки.
+rooms_room_joined_owner_not_connected_label=Ваш друг ожидает просмотра {{roomURLHostname}} с вами.
 
 self_view_hidden_message=Вид самого себя скрыт, но всё же отправляется; измените размер окна для показа
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} не доступен в вашей стране.
+
+display_name_guest=Гость
--- a/browser/extensions/loop/chrome/locale/sk/loop.properties
+++ b/browser/extensions/loop/chrome/locale/sk/loop.properties
@@ -21,41 +21,60 @@ loopMenuItem_accesskey=Z
 sign_in_again_title_line_one=Ak chcete pokračovať v používaní {{clientShortname2}},
 sign_in_again_title_line_two2=musíte sa znova prihlásiť
 sign_in_again_button=Prihlásiť sa
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Používať {{clientSuperShortname}} ako hosť
 
 panel_browse_with_friend_button=Prehliadať túto stránku s priateľom
-panel_stop_sharing_tabs_button=Ukončiť zdieľanie vašich kariet
+panel_disconnect_button=Odpojiť
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Kliknite na tlačidlo Hello a prehliadajte webové stránky spolu s priateľom.
+first_time_experience_subheading_button_above=Kliknite na tlačidlo Hello a prehliadajte webové stránky spolu s priateľom.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Používajte ho na spoločné plánovanie, spoločnú prácu a spoločnú zábavu.
+first_time_experience_content2=Používajte ho, aby sa veci pohli: plánujte spolu, pracujte spolu, zabávajte sa spolu.
 first_time_experience_button_label2=Pozrite sa, ako to funguje
 
+## First Time Experience Slides
+fte_slide_1_title=Prehliadajte webové stránky s priateľom
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Či plánujete cestu alebo nakupujete darček, {{clientShortname2}} vám umožní sa rýchlejšie rozhodnúť.
+fte_slide_2_title=Ujasnite si to
+fte_slide_2_copy=Použite zabudovaný textový alebo video rozhovor a zdieľajte svoje nápady, porovnávajte možnosti a dospejte k dohode.
+fte_slide_3_title=Pozvite priateľa odoslaním odkazu
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} funguje s väčšinou prehliadačov pre počítače. Nie sú potrebné žiadne registrácie, pre všetkých je to zadarmo.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Nájdite ikonu {{clientSuperShortname}} a začnite
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Keď nájdete stránku, o ktorej sa chcete porozprávať, kliknite na ikonu v prehliadači {{brandShortname}} a vytvorí sa odkaz. Tento následne doručte vášmu priateľovi.
+
 invite_header_text_bold=Pozvite niekoho na spoločné prehliadanie tejto stránky!
+invite_header_text_bold2=Pozvite priateľa, aby sa k vám pripojil
 invite_header_text3=Na používanie Firefox Hello treba dvoch, takže pošlite kamarátovi odkaz, aby si web prehliadal s vami!
+invite_header_text4=Zdieľajte tento odkaz, aby ste mohli začať prehliadať web spolu.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Skopírovať odkaz
 invite_copied_link_button=Skopírovaný!
 invite_email_link_button=Odoslať odkaz
 invite_facebook_button3=Facebook
 invite_your_link=Váš odkaz:
 
-# Status text
-display_name_guest=Hosť
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Relácia vypršala. Všetky predtým vytvorené a zdieľané adresy už viac nebudú fungovať.
 could_not_authenticate=Overenie nebolo možné
 password_changed_question=Nezmenili ste svoje heslo?
 try_again_later=Skúste to znova neskôr
 could_not_connect=Nebolo možné pripojiť sa k serveru
@@ -177,39 +196,26 @@ room_name_untitled_page=Bez názvu
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Dovidenia! K tejto zdieľanej relácii sa môžete kedykoľvek vrátiť pomocou panelu Hello.
 door_hanger_prompt_name=Chcete ju pre lepšie zapamätanie pomenovať? Aktuálny názov:
 door_hanger_button=OK
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Akonáhle sa váš priateľ pripojí, bude môcť vidieť akúkoľvek kartu, na ktorú kliknete.
 infobar_screenshare_browser_message2=Zdieľajte svoje karty. Akúkoľvek kartu prehliadača, na ktorú kliknete, môžu vidieť vaši priatelia
-infobar_screenshare_paused_browser_message=Zdieľanie karty je pozastavené
-infobar_button_gotit_label=Rozumiem
-infobar_button_gotit_accesskey=o
-infobar_button_pause_label=Pozastaviť
-infobar_button_pause_accesskey=P
-infobar_button_restart_label=Reštartovať
+infobar_screenshare_browser_message3=Práve zdieľate svoje karty. Váš priateľ uvidí každú kartu, na ktorú kliknete.
+infobar_screenshare_stop_sharing_message=Svoje karty už viac nezdieľate
+infobar_button_restart_label2=Znova spustiť zdieľanie
 infobar_button_restart_accesskey=R
-infobar_button_resume_label=Pokračovať
-infobar_button_resume_accesskey=P
-infobar_button_stop_label=Zastaviť
+infobar_button_stop_label2=Zastaviť zdieľanie
 infobar_button_stop_accesskey=Z
-infobar_menuitem_dontshowagain_label=Nabudúce nezobrazovať
-infobar_menuitem_dontshowagain_accesskey=N
-
-# Context in conversation strings
-
-## LOCALIZATION NOTE(no_conversations_message_heading2): Title shown when user
-## has no conversations available.
-no_conversations_message_heading2=Zatiaľ žiadne rozhovory
-## LOCALIZATION NOTE(no_conversations_start_message2): Subheading inviting the
-## user to start a new conversation.
-no_conversations_start_message2=Začnite nový rozhovor
+infobar_button_disconnect_label=Odpojiť
+infobar_button_disconnect_accesskey=O
 
 # E10s not supported strings
 
 e10s_not_supported_button_label=Spustiť nové okno
 e10s_not_supported_subheading={{brandShortname}} nefunguje v okne režimu viacerých procesov.
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
@@ -242,15 +248,18 @@ retry_call_button=Znova
 rooms_leave_button_label=Odísť
 
 rooms_panel_title=Výber konverzácie, alebo zahájenie novej
 
 rooms_room_full_call_to_action_label=Zistiť viac o {{clientShortname}} »
 rooms_room_full_call_to_action_nonFx_label=Prevezmite si {{brandShortname}} a začnite svoju vlastnú
 rooms_room_full_label=V tejto konverzácii sú už dve osoby.
 rooms_room_join_label=Pripojiť ku konverzácii
-rooms_room_joined_label=Niekto sa pripojil ku konverzácii!
+rooms_room_joined_owner_connected_label2=Váš priateľ je teraz pripojený a môže vidieť vaše karty.
+rooms_room_joined_owner_not_connected_label=Váš priateľ čaká na prehľadávanie {{roomURLHostname}} s vami.
 
 self_view_hidden_message=Záber z kamery je skrytý, napriek tomu sa stále odosiela; pre zobrazenie upravte veľkosť okna
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} nie je vo vašej krajine dostupný.
+
+display_name_guest=Hosť
--- a/browser/extensions/loop/chrome/locale/sq/loop.properties
+++ b/browser/extensions/loop/chrome/locale/sq/loop.properties
@@ -21,41 +21,60 @@ loopMenuItem_accesskey=F
 sign_in_again_title_line_one=Ju lutemi, hyni sërish
 sign_in_again_title_line_two2=që të vazhdoni përdorimin e {{clientShortname2}}-së
 sign_in_again_button=Hyni
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Përdoreni {{clientSuperShortname}}-në si I ftuar
 
 panel_browse_with_friend_button=Shfletojeni këtë faqe me një shok
-panel_stop_sharing_tabs_button=Reshtni së ndari me të tjerët skedat tuaja
+panel_disconnect_button=Shkëputuni
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Klikoni butonin Hello që të shfletoni faqe Web me një shok.
+first_time_experience_subheading_button_above=Klikoni butonin më sipër që të shfletoni faqen në Internet tok me një shok.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Përdoreni që të planifikoni së bashku, punoni tok, të qeshni tok.
+first_time_experience_content2=Përdoreni që të mbaroni punë: planifikoni tok, qeshni tok, punoni tok.
 first_time_experience_button_label2=Shihni se si funksionon
 
+## First Time Experience Slides
+fte_slide_1_title=Shfletoni faqe në Internet me një shok
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Qoftë kur bëni plane për një udhëtim apo për të blerë një dhuratë, {{clientShortname2}} ju lejon të merrni vendime më shpejt, aty për aty.
+fte_slide_2_title=Merruni me të njëjtën faqe
+fte_slide_2_copy=Përdorni fjalosjen me tekst ose video, të vetë programit, për të ndarë me të tjerët ide, për të krahasuar mundësi të ndryshme dhe për të arritur në të njëjtin mendim.
+fte_slide_3_title=Ftoni një shok duke i dërguar një lidhje
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} funksionon me shumicën e shfletuesve për desktop. S’ka nevojë për llogari dhe gjithkush mund të lidhet falas.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Që t’ia filloni, gjeni ikonën {{clientSuperShortname}}
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Pasi të keni gjetur një faqe mbi të cilën doni të diskutoni, klikoni mbi ikonën te {{brandShortname}} që të krijoni një lidhje. Mandej dërgojani shokut tuaj kur të doni!
+
 invite_header_text_bold=Ftoni dikë ta shfletojë këtë faqe tok me ju!
+invite_header_text_bold2=Ftoni të vijë një shok!
 invite_header_text3=Duhen dy vetë që të përdorni Firefox Hello-në, ndaj dërgojini një shoku një lidhje që të shfletoni Web-in së bashku!
+invite_header_text4=Ndajeni me ta këtë lidhje që të filloni të shfletoni në internet tok.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Kopjoje Lidhjen
 invite_copied_link_button=U kopjua!
 invite_email_link_button=Dërgojeni Lidhjen Me Email
 invite_facebook_button3=Facebook
 invite_your_link=Lidhja juaj:
 
-# Status text
-display_name_guest=I ftuar
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Sesioni skadoi. Krejt URL-të që keni krijuar dhe ndarë me të tjerët më parë nuk do të funksionojnë më.
 could_not_authenticate=Nuk u Bë Dot Mirëfilltësimi
 password_changed_question=Ndryshuat gjë fjalëkalimin tuaj?
 try_again_later=Ju lutemi, riprovoni më vonë
 could_not_connect=Nuk u Lidh Dot Me Shërbyesin
@@ -177,39 +196,26 @@ room_name_untitled_page=Faqe Pa Titull
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Shëndet një herë për një herë! Përmes panelit të Hello-së mund të ktheheni te ky sesion i përbashkët kurdo.
 door_hanger_prompt_name=Doni t’i jepni një emër, për ta kujtuar më lehtë? Emri i tanishëm:
 door_hanger_button=OK
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Sapo të vijnë, shokët tuaj do të jenë në gjendje të shohin cilëndo skedë mbi të cilën klikoni.
 infobar_screenshare_browser_message2=Po ndani skeda me të tjerët. Çfarëdo skede mbi të cilën klikoni mund të shihet nga shokët tuaj
-infobar_screenshare_paused_browser_message=Ndarja e skedave me të tjerët është e ndalur
-infobar_button_gotit_label=E mora vesh!
-infobar_button_gotit_accesskey=v
-infobar_button_pause_label=Pushim
-infobar_button_pause_accesskey=P
-infobar_button_restart_label=Rinise
+infobar_screenshare_browser_message3=Tani jeni duke ndarë skeda me të tjerët. Shoku juaj do të shohë cilëndo skedë mbi të cilën klikoni.
+infobar_screenshare_stop_sharing_message=S’jeni më duke ndarë skedat tuaja
+infobar_button_restart_label2=Rinisni ndarjen me të tjerë
 infobar_button_restart_accesskey=e
-infobar_button_resume_label=Rimerre
-infobar_button_resume_accesskey=R
-infobar_button_stop_label=Ndale
+infobar_button_stop_label2=Reshtni së ndari me të tjerë
 infobar_button_stop_accesskey=N
-infobar_menuitem_dontshowagain_label=Mos e shfaq më këtë
-infobar_menuitem_dontshowagain_accesskey=M
-
-# Context in conversation strings
-
-## LOCALIZATION NOTE(no_conversations_message_heading2): Title shown when user
-## has no conversations available.
-no_conversations_message_heading2=Ende pa biseda.
-## LOCALIZATION NOTE(no_conversations_start_message2): Subheading inviting the
-## user to start a new conversation.
-no_conversations_start_message2=Filloni një të re!
+infobar_button_disconnect_label=Shkëputuni
+infobar_button_disconnect_accesskey=S
 
 # E10s not supported strings
 
 e10s_not_supported_button_label=Hap Dritare të Re
 e10s_not_supported_subheading={{brandShortname}} s’funksionon në dritare shumëprocesëshe.
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
@@ -242,15 +248,18 @@ retry_call_button=Riprovoni
 rooms_leave_button_label=Braktiseni
 
 rooms_panel_title=Zgjidhni një nga bisedat ose nisni një të re
 
 rooms_room_full_call_to_action_label=Mësoni më tepër rreth {{clientShortname}}-së »
 rooms_room_full_call_to_action_nonFx_label=Shkarkoni {{brandShortname}}-in që të filloni tuajën
 rooms_room_full_label=Ka tashmë dy vetë në këtë bisedë.
 rooms_room_join_label=Hyni në bisedë
-rooms_room_joined_label=Dikush erdhi në bisedë!
+rooms_room_joined_owner_connected_label2=Shoku juaj tani është i lidhur dhe do të jetë në gjendje të shohë skedat tuaja.
+rooms_room_joined_owner_not_connected_label=Shoku juaj po pret të shfletojë {{roomURLHostname}} me ju.
 
 self_view_hidden_message=I vetëfshehur, por prapë i dukshëm; ripërmasoni dritaren që të shfaqet
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} s’është i passhëm në vendin tuaj.
+
+display_name_guest=Mysafir
--- a/browser/extensions/loop/chrome/locale/sv-SE/loop.properties
+++ b/browser/extensions/loop/chrome/locale/sv-SE/loop.properties
@@ -23,39 +23,58 @@ sign_in_again_title_line_two2=för att fortsätta använda {{clientShortname2}}
 sign_in_again_button=Logga in
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Använd {{clientSuperShortname}} som gäst
 
 panel_browse_with_friend_button=Surfa på denna sida med en vän
 panel_disconnect_button=Koppla från
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Klicka på knappen Hello för att surfa på webben med en vän.
+first_time_experience_subheading_button_above=Klicka på knappen ovan för att surfa webbsidor tillsammans med en vän.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Använd den för att planera tillsammans, arbeta tillsammans, skratta tillsammans.
+first_time_experience_content2=Använd den för att få saker gjorda: planera tillsammans, skratta tillsammans, arbeta tillsammans.
 first_time_experience_button_label2=Se hur det fungerar
 
+## First Time Experience Slides
+fte_slide_1_title=Surfa på hemsidor med en vän
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Vare sig du planerar en resa eller letar efter en present, låter {{clientShortname2}} dig fatta snabbare beslut i realtid.
+fte_slide_2_title=Hamna på samma sida
+fte_slide_2_copy=Använd den inbyggda text eller videochatten för att utbyta idéer, jämföra olika alternativ och komma överens.
+fte_slide_3_title=Bjuda in en vän genom att skicka en länk
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} fungerar med de flesta webbläsare. Inga konton är nödvändiga och alla ansluter gratis.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Hitta ikonen för {{clientSuperShortname}} för att komma igång
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=När du har hittat en sida som du vill diskutera, klicka på ikonen för {{brandShortname}} för att skapa en länk. Skicka det sen till din vän hur du vill!
+
 invite_header_text_bold=Bjud in någon att surfa på sidan med dig!
+invite_header_text_bold2=Bjud in en kompis att delta!
 invite_header_text3=Det krävs två för att använda Firefox Hello, så skicka en länk till en vän för att surfa på webben med dig!
+invite_header_text4=Dela denna länken så att ni kan börja surfa på Webben tillsammans.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Kopiera länk
 invite_copied_link_button=Kopierad!
 invite_email_link_button=E-posta länk
 invite_facebook_button3=Facebook
 invite_your_link=Din länk:
 
-# Status text
-display_name_guest=Gäst
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Session har upphört. Alla webbadresser du tidigare har skapat och delat kommer inte längre fungera.
 could_not_authenticate=Det gick inte att autentisera
 password_changed_question=Har du ändrat ditt lösenord?
 try_again_later=Försök igen senare
 could_not_connect=Kunde inte ansluta till servern
@@ -176,17 +195,19 @@ room_name_untitled_page=Namnlös sida
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Vi ses senare! Du kan återvända till denna gemensamma session när som helst genom panelen Hello.
 door_hanger_prompt_name=Vill du ge den ett namn som är lättare att komma ihåg? Nuvarande namn:
 door_hanger_button=Ok
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Så fort din kompis ansluter sig, kommer de att se vilka flikar du klickar på.
 infobar_screenshare_browser_message2=Du delar dina flikar. Alla flik du klickar på kan ses av dina vänner
+infobar_screenshare_browser_message3=Du delar nu dina flikar. Din vän kommer se alla flikar som du klickar på.
 infobar_screenshare_stop_sharing_message=Du delar inte längre dina flikar
 infobar_button_restart_label2=Starta om delning
 infobar_button_restart_accesskey=d
 infobar_button_stop_label2=Sluta dela
 infobar_button_stop_accesskey=S
 infobar_button_disconnect_label=Koppla från
 infobar_button_disconnect_accesskey=f
 
@@ -234,8 +255,10 @@ rooms_room_join_label=Delta i konversati
 rooms_room_joined_owner_connected_label2=Din vän är nu ansluten och kommer att kunna se dina flikar.
 rooms_room_joined_owner_not_connected_label=Din vän väntar på att surfa {{roomURLHostname}} tillsammans med dig.
 
 self_view_hidden_message=Själv-vy dold, men skickas ändå; ändra fönsterstorlek för att visa
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} är inte tillgänglig i ditt land.
+
+display_name_guest=Gäst
--- a/browser/extensions/loop/chrome/locale/tr/loop.properties
+++ b/browser/extensions/loop/chrome/locale/tr/loop.properties
@@ -21,40 +21,60 @@ loopMenuItem_accesskey=t
 sign_in_again_title_line_one={{clientShortname2}}'i kullanmaya devam etmek için
 sign_in_again_title_line_two2=lütfen yeniden giriş yapın
 sign_in_again_button=Giriş yap
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2={{clientSuperShortname}}'yu konuk olarak kullan
 
 panel_browse_with_friend_button=Bu sayfayı arkadaşınızla birlikte gezin
-panel_stop_sharing_tabs_button=Sekmeleri paylaşmayı durdur
+panel_disconnect_button=Bağlantıyı kes
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Web sayfalarını bir arkadaşınızla birlikte gezmek için Hello düğmesine tıklayın.
+first_time_experience_subheading_button_above=Web sayfalarını bir arkadaşınızla birlikte gezmek için yukarıdaki düğmeye tıklayın.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
+first_time_experience_content=Birlikte plan yapın, birlikte çalışın, birlikte gülün.
+first_time_experience_content2=İnternet birlikte güzel: Birlikte plan yapın, birlikte çalışın, birlikte gülün.
 first_time_experience_button_label2=Nasıl çalıştığını görün
 
+## First Time Experience Slides
+fte_slide_1_title=Web sayfalarını bir arkadaşınızla gezin
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=İster bir seyahat planlıyor olun ister hediye seçiyor, {{clientShortname2}} daha çabuk karar vermenize yardımcı olacak.
+fte_slide_2_title=Aynı sayfada buluşun
+fte_slide_2_copy=Fikirlerinizi paylaşmak, seçenekleri karşılaştırmak ve karara varmak için yazılı ve görüntülü sohbet edebilirsiniz.
+fte_slide_3_title=Bir bağlantı göndererek arkadaşınızı davet edin
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} çoğu masaüstü web tarayıcısıyla uyumludur. Hesap açmanız gerekmez ve herkes ücretsiz bağlanabilir.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Başlamak için {{clientSuperShortname}} simgesini bulun
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Üzerinde konuşmak istediğiniz sayfayı bulunca bir bağlantı oluşturmak için {{brandShortname}}'taki simgeye tıklayın. Ardından bu bağlantıyı arkadaşınızı gönderin.
+
 invite_header_text_bold=Bu sayfayı birlikte gezmek için birini davet edin!
+invite_header_text_bold2=Size katılması için arkadaşınızı davet edin!
 invite_header_text3=Firefox Hello'yu kullanmak için iki kişi gerekiyor. Web'i birlikte gezmek istediğiniz arkadaşınıza bir bağlantı gönderin!
+invite_header_text4=Web'de birlikte dolaşmaya başlamak için bu bağlantıyı paylaşın.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Bağlantıyı kopyala
 invite_copied_link_button=Kopyalandı!
 invite_email_link_button=Bağlantıyı e-postala
 invite_facebook_button3=Facebook
 invite_your_link=Bağlantınız:
 
-# Status text
-display_name_guest=Konuk
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Oturum zaman aşımına uğradı. Daha önce oluşturduğunuz ve paylaştığınız tüm adresler artık çalışmayacak.
 could_not_authenticate=Kimlik doğrulanamadı
 password_changed_question=Parolanızı mı değiştirdiniz?
 try_again_later=Lütfen daha sonra tekrar deneyin
 could_not_connect=Sunucuya bağlanılamadı
@@ -70,16 +90,17 @@ retry_button=Yeniden dene
 share_email_subject7=Web'i birlikte gezme davetiniz
 ## LOCALIZATION NOTE (share_email_body7): In this item, don't translate the
 ## part between {{..}} and leave the \n\n part alone
 share_email_body7=Bir arkadaşınız Firefox Hello'da sizi bekliyor. Bağlanmak ve web'de birlikte dolaşmak için bağlantıya tıklayın: {{callUrl}}
 ## LOCALIZATION NOTE (share_email_body_context3): In this item, don't translate
 ## the part between {{..}} and leave the \n\n part alone.
 share_email_body_context3=Bir arkadaşınız Firefox Hello'da sizi bekliyor. Bağlanmak ve {{title}} sitesinde birlikte dolaşmak için bağlantıya tıklayın: {{callUrl}}
 ## LOCALIZATION NOTE (share_email_footer2): Common footer content for both email types
+share_email_footer2=\n\n____________\nFirefox Hello web'de arkadaşlarınızla birlikte gezinmenizi sağlar. Birlikte plan yapmak, birlikte çalışmak veya birlikte gülmek istediğinizde onu kullanabilirsiniz. Daha fazla bilgi için: http://www.firefox.com/hello
 ## LOCALIZATION NOTE (share_tweeet): In this item, don't translate the part
 ## between {{..}}. Please keep the text below 117 characters to make sure it fits
 ## in a tweet.
 share_tweet=Benimle {{clientShortname2}} üzerinde görüntülü görüşmeye katıl!
 
 share_add_service_button=Servis ekle
 
 ## LOCALIZATION NOTE (copy_link_menuitem, email_link_menuitem, delete_conversation_menuitem):
@@ -174,43 +195,31 @@ room_name_untitled_page=Başlıksız sayfa
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Görüşürüz! İstediğiniz zaman Hello panelinden bu paylaşılan oturuma geri dönebilirsiniz.
 door_hanger_prompt_name=Hatırlaması daha kolay bir ad vermek ister misiniz? Şu anki ad:
 door_hanger_button=Tamam
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Arkadaşınız katıldıktan sonra tıkladığınız her sekmeyi görebilecek.
 infobar_screenshare_browser_message2=Sekmelerinizi paylaşıyorsunuz. Tıkladığınız her sekme arkadaşlarınız tarafından görülebilir
-infobar_screenshare_paused_browser_message=Sekme paylaşımı duraklatıldı
-infobar_button_gotit_label=Anladım!
-infobar_button_gotit_accesskey=A
-infobar_button_pause_label=Duraklat
-infobar_button_pause_accesskey=D
-infobar_button_restart_label=Yeniden başlat
-infobar_button_restart_accesskey=e
-infobar_button_resume_label=Sürdür
-infobar_button_resume_accesskey=S
-infobar_button_stop_label=Durdur
-infobar_button_stop_accesskey=D
-infobar_menuitem_dontshowagain_label=Bunu bir daha gösterme
-infobar_menuitem_dontshowagain_accesskey=B
-
-# Context in conversation strings
-
-## LOCALIZATION NOTE(no_conversations_message_heading2): Title shown when user
-## has no conversations available.
-no_conversations_message_heading2=Henüz hiç kişi yok.
-## LOCALIZATION NOTE(no_conversations_start_message2): Subheading inviting the
-## user to start a new conversation.
-no_conversations_start_message2=Yeni bir görüşme başlatın!
+infobar_screenshare_browser_message3=Şu an sekmelerinizi paylaşıyorsunuz. Arkadaşınız, tıkladığınız her sekmeyi görecek.
+infobar_screenshare_stop_sharing_message=Artık sekmelerinizi paylaşmıyorsunuz
+infobar_button_restart_label2=Paylaşmayı yeniden başlat
+infobar_button_restart_accesskey=b
+infobar_button_stop_label2=Paylaşmayı durdur
+infobar_button_stop_accesskey=d
+infobar_button_disconnect_label=Bağlantıyı kes
+infobar_button_disconnect_accesskey=B
 
 # E10s not supported strings
 
 e10s_not_supported_button_label=Yeni pencere aç
+e10s_not_supported_subheading={{brandShortname}} çok işlemli pencerede çalışmaz.
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 ## LOCALIZATION NOTE: In this file, don't translate the part between {{..}}
 
 # Text chat strings
 chat_textbox_placeholder=Buraya yazın…
@@ -238,15 +247,18 @@ retry_call_button=Yeniden dene
 rooms_leave_button_label=Ayrıl
 
 rooms_panel_title=Bir görüşme seçin veya yeni bir tane başlatın
 
 rooms_room_full_call_to_action_label={{clientShortname}} hakkında bilgi alın »
 rooms_room_full_call_to_action_nonFx_label=Kendi görüşmenizi başlatmak için {{brandShortname}} indirin
 rooms_room_full_label=Bu görüşmede zaten iki kişi var.
 rooms_room_join_label=Görüşmeye katıl
-rooms_room_joined_label=Birisi görüşmeye katıldı!
+rooms_room_joined_owner_connected_label2=Arkadaşınız bağlandı ve artık sekmelerinizi görebilecek.
+rooms_room_joined_owner_not_connected_label=Arkadaşınız sizinle birlikte {{roomURLHostname}} sitesinde gezmek için bekliyor.
 
 self_view_hidden_message=Kendi görünümünüz gizlendi ama hâlâ gönderiliyor. Görmek için pencereyi boyutlandırın
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} ülkenizde kullanılamıyor.
+
+display_name_guest=Misafir
--- a/browser/extensions/loop/chrome/locale/uk/loop.properties
+++ b/browser/extensions/loop/chrome/locale/uk/loop.properties
@@ -23,39 +23,58 @@ sign_in_again_title_line_two2=щоб продовжити використання {{clientShortname2}}
 sign_in_again_button=Увійти
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=Використовувати {{clientSuperShortname}}, як гість
 
 panel_browse_with_friend_button=Переглянути цю сторінку з другом
 panel_disconnect_button=Від'єднатися
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=Натисніть кнопку Hello для перегляду веб-сторінок з друзями.
+first_time_experience_subheading_button_above=Натисніть кнопку внизу для перегляду веб-сторінок з друзями.
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=Використовуйте його для спільного планування, роботи й розваг.
+first_time_experience_content2=Використовуйте його для спільного планування, роботи й розваг.
 first_time_experience_button_label2=Дивитись, як це працює
 
+## First Time Experience Slides
+fte_slide_1_title=Переглядайте веб-сторінки з друзями
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=Плануєте ви подорож чи покупку подарунку, {{clientShortname2}} дозволяє вам приймати швидші рішення в реальному часі.
+fte_slide_2_title=Переглядайте одну й ту саму сторінку
+fte_slide_2_copy=Використовуйте вбудований текстовий чи відео чат для обміну ідеями, порівнянням можливостей і спільного узгодження.
+fte_slide_3_title=Запрошуйте друзів, надсилаючи їм посилання
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} працює з більшістю настільних браузерів. Не потрібні облікові записи і кожен з'єднується безплатно.
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=Знайдіть піктограму {{clientSuperShortname}} щоб почати
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=Як тільки ви знайшли сторінку, яку хочете обговорити, натисніть піктограму в {{brandShortname}}, щоб створити посилання. Потім надішліть його друзям будь-яким бажаним способом!
+
 invite_header_text_bold=Запросіть когось для перегляду цієї сторінки разом з вами!
+invite_header_text_bold2=Запросіть друзів приєднатися!
 invite_header_text3=Для користування Firefox Hello потрібно двоє осіб, тож надішліть посилання другу для спільного перегляду Інтернету!
+invite_header_text4=Поділіться цим посиланням, щоб ви змогли почати перегляд в Інтернеті разом.
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=Копіювати посилання
 invite_copied_link_button=Скопійовано!
 invite_email_link_button=Надіслати посилання
 invite_facebook_button3=Facebook
 invite_your_link=Ваше посилання:
 
-# Status text
-display_name_guest=Гість
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=Термін дії сеансу завершився. Всі попередньо створені і відправлені URL більше не працюватимуть.
 could_not_authenticate=Не вдалося перевірити
 password_changed_question=Ви змінили свій пароль?
 try_again_later=Спробуйте знову пізніше
 could_not_connect=Не вдалося з’єднатись із сервером
@@ -177,17 +196,19 @@ room_name_untitled_page=Сторінка без заголовка
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=Побачимося пізніше! Ви можете повернутися до цього спільного сеансу в будь який час через панель Hello.
 door_hanger_prompt_name=Чи бажаєте вказати ім’я, яке легше запам’ятати? Поточне ім’я:
 door_hanger_button=OK
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=Як тільки ваші друзі приєднаються, вони зможуть бачити будь-яку вашу поточну вкладку.
 infobar_screenshare_browser_message2=Ви ділитеся своїми вкладками. Ваші друзі можуть побачити вміст будь-якої вкладки, на яку ви перейшли.
+infobar_screenshare_browser_message3=Тепер ви ділитеся своїми вкладками. Ваші друзі побачать будь-яку вашу поточну вкладку.
 infobar_screenshare_stop_sharing_message=Ви більше не ділитеся своїми вкладками
 infobar_button_restart_label2=Перезапустити обмін
 infobar_button_restart_accesskey=з
 infobar_button_stop_label2=Припинити обмін
 infobar_button_stop_accesskey=и
 infobar_button_disconnect_label=Від'єднатися
 infobar_button_disconnect_accesskey=В
 
@@ -235,8 +256,10 @@ rooms_room_join_label=Долучитися до розмови
 rooms_room_joined_owner_connected_label2=Ваш друг тепер під'єднаний і зможе бачити ваші вкладки.
 rooms_room_joined_owner_not_connected_label=Ваш друг чекає на спільний перегляд {{roomURLHostname}}.
 
 self_view_hidden_message=Вигляд самого себе прихований, але все ще відправляється; змініть розмір вікна для показу
 
 ## LOCALIZATION NOTE (tos_failure_message): Don't translate {{clientShortname}}
 ## as this will be replaced by clientShortname2.
 tos_failure_message={{clientShortname}} недоступний у вашій країні.
+
+display_name_guest=Гість
--- a/browser/extensions/loop/chrome/locale/zh-CN/loop.properties
+++ b/browser/extensions/loop/chrome/locale/zh-CN/loop.properties
@@ -23,39 +23,58 @@ sign_in_again_title_line_two2=以继续使用 {{clientShortname2}}
 sign_in_again_button=登录
 ## LOCALIZATION_NOTE(sign_in_again_use_as_guest_button2): {{clientSuperShortname}}
 ## will be replaced by the super short brandname.
 sign_in_again_use_as_guest_button2=以访客身份使用 {{clientSuperShortname}}
 
 panel_browse_with_friend_button=与朋友一同浏览此页面
 panel_disconnect_button=断开连接
 
-## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
+## LOCALIZATION_NOTE(first_time_experience_subheading2, first_time_experience_subheading_button_above): Message inviting the
 ## user to create his or her first conversation.
 first_time_experience_subheading2=点击 Hello 按钮,与朋友一起浏览网页。
+first_time_experience_subheading_button_above=点击上面的按钮,与一名好友共同浏览网页。
 
-## LOCALIZATION_NOTE(first_time_experience_content): Message describing
+## LOCALIZATION_NOTE(first_time_experience_content, first_time_experience_content2): Message describing
 ## ways to use Hello project.
 first_time_experience_content=用它一同策划,一同工作,一同欢笑。
+first_time_experience_content2=使用它可以做到:一起协同,一起工作,一起欢笑。
 first_time_experience_button_label2=它如何工作
 
+## First Time Experience Slides
+fte_slide_1_title=与一名好友共同浏览网页
+## LOCALIZATION_NOTE(fte_slide_1_copy): {{clientShortname2}}
+## will be replaced by the short name 2.
+fte_slide_1_copy=无论是计划旅途还是礼品购买,{{clientShortname2}} 都可以让您更快地实时完成决策。
+fte_slide_2_title=在同一个页面上
+fte_slide_2_copy=使用内置的文字或视频聊天来分享想法,比较选择,以及达成一致。
+fte_slide_3_title=发送一个链接来邀请好友
+## LOCALIZATION_NOTE(fte_slide_3_copy): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_3_copy={{clientSuperShortname}} 可以在大多数桌面浏览器上运行。无需账号,并且所有连接都是免费的。
+## LOCALIZATION_NOTE(fte_slide_4_title): {{clientSuperShortname}}
+## will be replaced by the super short brand name.
+fte_slide_4_title=找到 {{clientSuperShortname}} 图标开始使用
+## LOCALIZATION_NOTE(fte_slide_4_copy): {{brandShortname}}
+## will be replaced by the brand short name.
+fte_slide_4_copy=一旦您想到讨论一个页面,点击 {{brandShortname}} 中的该图标创建一个链接。然后将其发送给你想要交流的朋友!
+
 invite_header_text_bold=邀请某人访问此页面,和你一起聊天!
+invite_header_text_bold2=邀请一名好友加入你!
 invite_header_text3=使用 Firefox Hello 至少要两个人,因此把链接发给朋友,让他和你在这个页面一起聊天吧!
+invite_header_text4=分享此链接以便与您开始协同浏览网络。
 ## LOCALIZATION_NOTE(invite_copy_link_button, invite_copied_link_button,
 ## invite_email_link_button, invite_facebook_button2): These labels appear under
 ## an iconic button for the invite view.
 invite_copy_link_button=复制链接
 invite_copied_link_button=已复制!
 invite_email_link_button=用邮件发送链接
 invite_facebook_button3=Facebook
 invite_your_link=您的链接:
 
-# Status text
-display_name_guest=访客
-
 # Error bars
 ## LOCALIZATION NOTE(session_expired_error_description,could_not_authenticate,password_changed_question,try_again_later,could_not_connect,check_internet_connection,login_expired,service_not_available,problem_accessing_account):
 ## These may be displayed at the top of the panel.
 session_expired_error_description=会话已过期。您以前创建和分享的的所有网址都将不再有效。
 could_not_authenticate=无法验证
 password_changed_question=您想更改您的密码?
 try_again_later=请稍后再试
 could_not_connect=无法连接服务器
@@ -176,17 +195,19 @@ room_name_untitled_page=无标题网页
 
 ## LOCALIZATION NOTE (door_hanger_return, door_hanger_prompt_name, door_hanger_button): Dialog message on leaving conversation
 door_hanger_return=下次再见!您可以在任何时候,通过 Hello 控制面板重新返回当前共享会话。
 door_hanger_prompt_name=您想要为它起一个更容易记住的名字吗?当前的名字是:
 door_hanger_button=确定
 
 # Infobar strings
 
+infobar_screenshare_no_guest_message=只要你的朋友加入,他们就能看到你点击的任