Can not focus on TinyMCE editor when ILayoutAware is added to content type
I am currently unable to use TinyMCE on to edit any RichText fields on my content item under the Properties tab.  Is anyone else affected by this same behaviour?

I can see items in the changelog that relate to this in 2.0.0rc1 from @vangheem but nothing seems really obvious to me at this time.

Any info would be appreciated

Versions:
```
plone.app.mosaic=2.0.0rc2
plone.app.blocks=4.0.0rc1
```
diff --git a/.travis.yml b/.travis.yml
index 5b9a9d5a..54ac32ed 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,6 +6,8 @@ env:
     - PLONE_VERSION=5.0.x
     - PLONE_VERSION=5.coredev
   global:
+    - ROBOT_BROWSER=phantomjs
+    - ROBOT_SELENIUM2LIBRARY_RUN_ON_FAILURE="Capture Page Screenshot"
     - ARTIFACTS_S3_BUCKET=plone-app-mosaic
     - secure: F9djE/1a4VvCidHCnWeF7qkwsUhVLZELv/ttSC1UamsbCCzIa0shUheF4MfAZBRcwtVVAlrid4VRnuYnxyDciy2jrL/qayLfze2ZKcZTfYKsNIrQzyZ4SUVZRB9ZSA6yUK3v+/GIie95as8MKM/UxRtn2RWw4doWGyKv8XBOL4U=
     - secure: buYYreaObmTNEuVTibj/kIyFnIoHCZdezeA8P0HwGHrTbIAwArBFfhG5PC1grT8MayN3f4sfY80d8sRhRATTPNX1smjjBfyni/Zon8OTpr6mGaGsHOg+HHHqocy3hZPlgg1yYLpUCfKCOc8pnq09lF06JwPxsIXAiV+oRHR446E=
@@ -36,11 +38,11 @@ install:
   - make clean all mode=release
 script:
   - bin/code-analysis
-  - ROBOT_BROWSER=phantomjs bin/test $TEST_OPTIONS
-  - bin/pybot -v BROWSER:phantomjs -d parts/test docs
+  - bin/test $TEST_OPTIONS
+  - bin/pybot -v BROWSER:phantomjs -v SELENIUM2LIBRARY_RUN_ON_FAILURE:"Capture Page Screenshot" -d parts/test docs
 after_script:
-  - ROBOT_BROWSER=phantomjs bin/createcoverage --output-dir=parts/test/coverage
-  - ROBOT_BROWSER=phantomjs bin/sphinx-build docs html
+  - bin/createcoverage --output-dir=parts/test/coverage
+  - bin/sphinx-build docs html
   - bundle install
   - bundle exec travis-artifacts upload --path html
   - bundle exec travis-artifacts upload --path parts/test
diff --git a/CHANGES.rst b/CHANGES.rst
index 0413ece2..15bd77b6 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -4,6 +4,8 @@ Changelog
 2.0rc6 (unreleased)
 -------------------
 
+New features:
+
 - Add simple descriptions for all the tiles listed in the docs.
   [cguardia]
 
@@ -13,6 +15,17 @@ Changelog
 - Allow to include custom CSS on rows
   [frapell]
 
+Bug fixes:
+
+- Fix issue where TinyMCE was broken in properties overlay
+  [datakurre]
+
+- Fix issue where title field value was not set on some IE version
+  [datakurre]
+
+- Fix issue where block elements with display 'flex' were not blurred
+  [datakurre]
+
 
 2.0rc5 (2017-04-06)
 -------------------
diff --git a/docs/_screenshots/layouts-editor_show-hide-content-layouts.png b/docs/_screenshots/layouts-editor_show-hide-content-layouts.png
deleted file mode 100644
index b6b70883..00000000
Binary files a/docs/_screenshots/layouts-editor_show-hide-content-layouts.png and /dev/null differ
diff --git a/docs/_screenshots/mosaic-layout-editor_configure-max-columns.png b/docs/_screenshots/mosaic-layout-editor_configure-max-columns.png
deleted file mode 100644
index c30be26b..00000000
Binary files a/docs/_screenshots/mosaic-layout-editor_configure-max-columns.png and /dev/null differ
diff --git a/docs/_screenshots/mosaic-layout-editor_remove-movable-class.png b/docs/_screenshots/mosaic-layout-editor_remove-movable-class.png
deleted file mode 100644
index 7d7123c7..00000000
Binary files a/docs/_screenshots/mosaic-layout-editor_remove-movable-class.png and /dev/null differ
diff --git a/docs/_screenshots/overview-controlpanel_mosaic-layout-editor.png b/docs/_screenshots/overview-controlpanel_mosaic-layout-editor.png
deleted file mode 100644
index 212fb394..00000000
Binary files a/docs/_screenshots/overview-controlpanel_mosaic-layout-editor.png and /dev/null differ
diff --git a/src/plone/app/mosaic/browser/static/js/mosaic.actions.js b/src/plone/app/mosaic/browser/static/js/mosaic.actions.js
index 03b28716..58f7e70f 100644
--- a/src/plone/app/mosaic/browser/static/js/mosaic.actions.js
+++ b/src/plone/app/mosaic/browser/static/js/mosaic.actions.js
@@ -77,10 +77,7 @@ define([
       // current tile state
       visible: function (tile) {
         return true;
-      },
-
-      // Should the action be undo-able?
-      undoable: false
+      }
 
     }, options);
 
@@ -118,9 +115,6 @@ define([
 
         // Exec actions
         mgr.actions[$(this).data("action")].exec(this);
-        if (mgr.actions[$(this).data("action")].undoable) {
-          $.mosaic.undo.snapshot();
-        }
       }
     });
   };
@@ -353,20 +347,6 @@ define([
       }
     });
 
-    // Register undo action
-    $.mosaic.registerAction('undo', {
-      exec: function () {
-        $.mosaic.undo.undo();
-      }
-    });
-
-    // Register redo action
-    $.mosaic.registerAction('redo', {
-      exec: function () {
-        $.mosaic.undo.redo();
-      }
-    });
-
     // Register page properties action
     $.mosaic.registerAction('properties', {
       exec: function () {
@@ -639,10 +619,6 @@ define([
         // Exec actions
         $.mosaic.actionManager.actions[action].exec();
 
-        if ($.mosaic.actionManager.actions[action].undoable) {
-          $.mosaic.undo.snapshot();
-        }
-
         // Prevent other actions
         return false;
       }
diff --git a/src/plone/app/mosaic/browser/static/js/mosaic.core.js b/src/plone/app/mosaic/browser/static/js/mosaic.core.js
index e922198c..9f23aa30 100644
--- a/src/plone/app/mosaic/browser/static/js/mosaic.core.js
+++ b/src/plone/app/mosaic/browser/static/js/mosaic.core.js
@@ -202,9 +202,7 @@ define([
       return;
     }
     $.mosaic.loaded = true;
-
-    // Take first snapshot
-    $.mosaic.undo.snapshot();
+    utils.loading.hide();
   };
 
   /**
@@ -353,7 +351,8 @@ define([
       obj = $(this);
 
       // Check if block element
-      if (obj.css('display') === 'block') {
+      if (obj.css('display') === 'block' ||
+          obj.css('display') === 'flex') {
 
         // Check if panel or toolbar
         if (!obj.hasClass('mosaic-panel') &&
diff --git a/src/plone/app/mosaic/browser/static/js/mosaic.overlay.js b/src/plone/app/mosaic/browser/static/js/mosaic.overlay.js
index 6be7de37..7d8512f2 100644
--- a/src/plone/app/mosaic/browser/static/js/mosaic.overlay.js
+++ b/src/plone/app/mosaic/browser/static/js/mosaic.overlay.js
@@ -81,10 +81,28 @@ define([
           '</div>' +
         '</div>');
 
+      // Destroy possible TinyMCE patterns before DOM move
+      $('.pat-tinymce', $form).each(function () {
+        if ($(this).data('pattern-tinymce')) {
+          try { $(this).data('pattern-tinymce').destroy(); }
+          catch (e) {}
+        }
+      });
+
       $('.plone-modal-header', $modalStructure).append('<h2>' + $h1.text() + '</h2>');
       $('.plone-modal-body', $modalStructure).append($form);
       $(document.body, $.mosaic.document).append($modalStructure);
 
+      // Re-initialize possible TinyMCE patterns after DOM move
+      $('.pat-tinymce', $form).each(function () {
+        if ($(this).data('pattern-tinymce')) {
+          try { $(this).data('pattern-tinymce').init(); }
+          catch (e) {}
+        }
+      });
+      try { $('.pat-textareamimetypeselector').change(); }
+      catch (e) {}
+
       // we don't want to show the original el.
       $el.hide();
 
diff --git a/src/plone/app/mosaic/browser/static/js/mosaic.pattern.js b/src/plone/app/mosaic/browser/static/js/mosaic.pattern.js
index 8079c4d9..58d133dc 100644
--- a/src/plone/app/mosaic/browser/static/js/mosaic.pattern.js
+++ b/src/plone/app/mosaic/browser/static/js/mosaic.pattern.js
@@ -28,9 +28,7 @@ require([
   'mosaic-url/mosaic.layout',
   'mosaic-url/mosaic.toolbar',
   'mosaic-url/mosaic.actions',
-  'mosaic-url/mosaic.upload',
   'mosaic-url/mosaic.editor',
-  'mosaic-url/mosaic.undo',
   'mosaic-url/mosaic.overlay',
 ], function($, Base) {
   'use strict';
diff --git a/src/plone/app/mosaic/browser/static/js/mosaic.tile.js b/src/plone/app/mosaic/browser/static/js/mosaic.tile.js
index 5901143b..da5edf2c 100644
--- a/src/plone/app/mosaic/browser/static/js/mosaic.tile.js
+++ b/src/plone/app/mosaic/browser/static/js/mosaic.tile.js
@@ -573,8 +573,6 @@ define([
       // Remove current tile
       this.$el.remove();
 
-      $.mosaic.undo.snapshot();
-
       // Cleanup original row
       $originalRow.mosaicCleanupRow();
 
@@ -973,7 +971,7 @@ define([
             });
           }
           var val = $el.find('.mosaic-tile-content > *').text();
-          $("#" + tile_config.id).find('input').attr('value', val);
+          $("#" + tile_config.id).find('input').val(val);
           break;
         case "z3c.form.browser.textarea.TextAreaWidget":
         case "z3c.form.browser.textarea.TextAreaFieldWidget":
diff --git a/src/plone/app/mosaic/browser/static/js/mosaic.undo.js b/src/plone/app/mosaic/browser/static/js/mosaic.undo.js
deleted file mode 100644
index 0d1a1147..00000000
--- a/src/plone/app/mosaic/browser/static/js/mosaic.undo.js
+++ /dev/null
@@ -1,236 +0,0 @@
-/**
- * This plugin is used to create the mosaic undo stack, and enable
- * undo/redo actions. The JS defines two classes, one for internal use
- * ($.mosaic.undo.Stack) and the public one $.mosaic.unto.UndoManager. The
- * latter needs to be initialized (form the mosaic core), using:
- *  - stack size (max undo history)
- *  - reference to a handler that is called with the state as argument on undo/redo
- *  - current state (optional)
- *
- * The state can be anyting, but a feasible use is a DOM snippet as
- * state, that can be re-applied to an element on undo/redo.  Check
- * out plone.app.mosaic/plone/app/mosaic/tests/javascipts/test_undo.html
- * for an example wiring.
- *
- * Currently for mosaic the 'public' methods of the module are 'init',
- * 'undo', 'redo', 'hasInitial' and 'snapshot'. The undo manager
- * always needs an intial state (to be able to redo the undo...). A
- * state can be added with the jQuery.mosaic.undo.snapshot
- * method. Always take the snapshot AFTER the change in the DOM.
- *
- * @author D.A.Dokter
- * @version 0.1
- * @licstart  The following is the entire license notice for the JavaScript
- *            code in this page.
- *
- * Copyright (C) 2010 Plone Foundation
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * @licend  The above is the entire license notice for the JavaScript code in
- *          this page.
- */
-
-/*global jQuery: false, window: false */
-/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true,
-eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true,
-immed: true, strict: true, maxlen: 80, maxerr: 9999 */
-
-define([
-  'jquery',
-], function($) {
-  'use strict';
-
-  // Define mosaic namespace if it doesn't exist
-  if (typeof($.mosaic) === "undefined") {
-    $.mosaic = {};
-  }
-
-  // Declare mosaic.undo namespace
-  $.mosaic.undo = function () {};
-
-  /**
-   * Initialize undo manager.
-   * @id jQuery.mosaic.undo.init
-   */
-  $.mosaic.undo.init = function () {
-
-    function handler(state) {
-
-      for (var i = 0; i < state.length; i += 1) {
-        $("#" + state[i].target, $.mosaic.document)
-          .html(state[i].source);
-      }
-    }
-
-    $.mosaic.undo.undoManager =  new $.mosaic.undo.UndoManager(10, handler);
-  };
-
-
-  /**
-   * Create a snapshot of the current situation, and add it to the
-   * undo manager.
-   * @id jQuery.mosaic.undo.snapshot
-   */
-  $.mosaic.undo.snapshot = function () {
-    var state = [];
-    $(".mosaic-panel", $.mosaic.document).each(function () {
-      state.push({"target": $(this).attr("id"),
-            "source": $(this).html()});
-    });
-    if (typeof($.mosaic.undo.undoManager) === "undefined") {
-      $.mosaic.undo.init();
-    }
-
-    $.mosaic.undo.undoManager.add(state);
-  };
-
-
-  /**
-   *
-   */
-  $.mosaic.undo.hasInitial = function () {
-    if ($.mosaic.undo.undoManager.stack.size() > 0) {
-      return true;
-    } else {
-      return false;
-    }
-  };
-
-
-  /**
-   * Undo.
-   * @id jQuery.mosaic.undo.undo
-   */
-  $.mosaic.undo.undo = function () {
-    $.mosaic.undo.undoManager.undo();
-  };
-
-
-  /**
-   * Redo.
-   * @id jQuery.mosaic.undo.redo
-   */
-  $.mosaic.undo.redo = function () {
-    $.mosaic.undo.undoManager.redo();
-  };
-
-
-  /**
-   * Stack constructor, taking optional size parameter.
-   * @id jQuery.mosaic.undo.Stack
-   * @param {Integer} stackSize Maximum number of items on the stack.
-   */
-  $.mosaic.undo.Stack = function (stackSize) {
-    if (typeof(stackSize) === "undefined") {
-      this.maxsize = 10;
-    } else {
-      this.maxsize = stackSize;
-    }
-
-    this.stack = [];
-  };
-
-  /**
-   * Return current stack size.
-   * @id jQuery.mosaic.undo.Stack.size
-   */
-  $.mosaic.undo.Stack.prototype.size  = function () {
-    return this.stack.length;
-  };
-
-  /**
-   * FIFO stack push, that removes object at other end if the stack
-   * grows bigger than the size set.
-   * @id jQuery.mosaic.undo.Stack.add
-   * @param {Object} obj Object to push onto the stack.
-   */
-  $.mosaic.undo.Stack.prototype.add = function (obj) {
-
-    if (this.stack.length >= this.maxsize) {
-      this.stack.pop();
-    }
-
-    this.stack.unshift(obj);
-  };
-
-  /**
-   * Get the object at the given index. Note that new states (added
-   * through jQuery.mosaic.undo.Stack.add) are added (using shift) at index 0.
-   * @id jQuery.mosaic.undo.Stack.get
-   */
-  $.mosaic.undo.Stack.prototype.get = function (i) {
-    return this.stack[i];
-  };
-
-  /**
-   * Undo manager, handling calls to undo/redo. This implementation
-   * uses full DOM snippets.
-   * @id jQuery.mosaic.undo.UndoManager
-   * @param {Integer} stackSize max undo history
-   * @param {Function} handler for undo/redo, taking state as argument
-   * @param {Object} currentState Current state
-   */
-  $.mosaic.undo.UndoManager = function (stackSize, handler, currentState) {
-
-    this.stack = new $.mosaic.undo.Stack(stackSize);
-    this.pointer = 0;
-    this.handler = handler;
-    if (typeof(currentState) !== "undefined") {
-      this.stack.add(currentState);
-    }
-  };
-
-  /**
-   * Add state to manager.
-   * @id jQuery.mosaic.undo.UndoManager.add
-   * @param {Object} state State to add.
-   */
-  $.mosaic.undo.UndoManager.prototype.add = function (state) {
-
-    this.stack.add(state);
-  };
-
-  /**
-   * Undo last action, by restoring last state.
-   * @id jQuery.mosaic.undo.UndoManager.undo
-   */
-  $.mosaic.undo.UndoManager.prototype.undo = function  () {
-
-    var state = this.stack.get(this.pointer + 1);
-
-    if (state) {
-      this.handler(state);
-      this.pointer += 1;
-    } else {
-      // Alert there's no (more) states.
-    }
-  };
-
-  /**
-   * Redo last action, by calling handler with previous state.
-   * @id jQuery.mosaic.undo.UndoManager.redo
-   */
-  $.mosaic.undo.UndoManager.prototype.redo = function () {
-
-    var state = this.stack.get(this.pointer - 1);
-
-    if (state) {
-      this.handler(state);
-      this.pointer -= 1;
-    } else {
-      // Alert there's no (more) states.
-    }
-  };
-});
\ No newline at end of file
diff --git a/src/plone/app/mosaic/browser/static/js/mosaic.upload.js b/src/plone/app/mosaic/browser/static/js/mosaic.upload.js
deleted file mode 100644
index 379f828b..00000000
--- a/src/plone/app/mosaic/browser/static/js/mosaic.upload.js
+++ /dev/null
@@ -1,256 +0,0 @@
-/**
- * This plugin is used to upload files and images.
- *
- * @author Rob Gietema
- * @version 0.1
- * @licstart  The following is the entire license notice for the JavaScript
- *            code in this page.
- *
- * Copyright (C) 2010 Plone Foundation
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * @licend  The above is the entire license notice for the JavaScript code in
- *          this page.
- */
-"use strict";
-
-/*global jQuery: false, window: false */
-/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true,
-eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true,
-immed: true, strict: true, maxlen: 80, maxerr: 9999 */
-
-define([
-  'jquery'
-], function($) {
-  'use strict';
-
-  // Define mosaic namespace if it doesn't exist
-  if (typeof($.mosaic) === "undefined") {
-    $.mosaic = {};
-  }
-
-  /**
-   * Initialize the upload module
-   *
-   * @id jQuery.mosaic.initUpload
-   */
-  $.mosaic.initUpload = function () {
-
-    // Bind dragover
-    $(".mosaic-panel", $.mosaic.document).bind("dragover", function (e) {
-
-      // Check if drag not already loaded
-      if ($(".mosaic-panel-dragging", $.mosaic.document).length === 0) {
-
-        // Deselect tiles
-        $(".mosaic-selected-tile", $.mosaic.document)
-          .removeClass("mosaic-selected-tile")
-          .children(".mosaic-tile-content").blur();
-
-        // Set actions
-        $.mosaic.options.toolbar.trigger("selectedtilechange");
-        $.mosaic.options.panels.mosaicSetResizeHandleLocation();
-
-        // Add dummy tile
-        $.mosaic.addTile('image', '<img src="++resource++plone.app.' +
-          'mosaic.images/files.png" border="0" />');
-      }
-    });
-
-    document.addEventListener(
-      "drop",
-      function (event) {
-        // Local variables
-        var dt, first, i, files, newtile, file, img, tile, xhr,
-          boundary, data;
-
-        dt = event.dataTransfer;
-        files = dt.files;
-
-        // Prevent default actions
-        event.stopPropagation();
-        event.preventDefault();
-
-        // Drop tile
-        $($.mosaic.document).trigger("mousedown");
-
-        // Check filetypes
-        first = true;
-        for (i = 0; i < files.length; i += 1) {
-
-          // Get file
-          file = files.item(i);
-
-          // Check if supported mimetype
-          if (file.mediaType.indexOf('image') === 0) {
-
-            // Check if first
-            if (first) {
-
-              // Set image and tile
-              img = $(".mosaic-selected-tile", $.mosaic.document)
-                .children(".mosaic-tile-content")
-                .children("img");
-              tile = $(".mosaic-selected-tile",
-                   $.mosaic.document);
-
-              // Set first to false
-              first = false;
-
-            // Not the first
-            } else {
-
-              // Create new tile
-              newtile = $($.mosaic.document.createElement("div"))
-                .addClass("movable removable mosaic-tile " +
-                      "mosaic-image-tile")
-                .append($($.mosaic.document.createElement("div"))
-                  .addClass("mosaic-tile-content")
-                  .append(
-                    $($.mosaic.document.createElement("img"))
-                      .attr("border", 0)
-                  )
-                );
-
-              // Insert new tile
-              $(".mosaic-selected-tile", $.mosaic.document)
-                .after(newtile);
-              newtile.mosaicInitTile();
-              newtile.mosaicAddDrag();
-
-              // Get image object
-              img = newtile.children(".mosaic-tile-content")
-                .children("img");
-              tile = newtile;
-            }
-
-            // Setup progress div
-            tile.append($($.mosaic.document.createElement("div"))
-              .addClass("mosaic-tile-uploadprogress")
-            );
-
-            // Set image values
-            img.get(0).src = file.getAsDataURL();
-
-            // Create new ajax request
-            xhr = new XMLHttpRequest();
-
-            // Set progress handler
-            xhr.upload.log = img;
-            /*
-            xhr.upload.addEventListener("progress",
-              function (event) {
-              if (event.lengthComputable) {
-                var percentage = Math.round((event.loaded *
-                  100) / event.total);
-                if (percentage < 100) {
-                  // console.log(percentage);
-                }
-              }
-            }
-            , false);
-            */
-
-            // Added load handler
-            xhr.addEventListener("load", function (event) {
-
-              // Get response
-              var response = eval('(' +
-                event.target.responseText + ')');
-
-              // Check if error
-              if (response.status === 1) {
-
-                // Raise error
-                $.plone.notify({
-                  type: "error",
-                  title: "Error",
-                  message: response.message,
-                  sticky: true
-                });
-
-              // No error
-              } else {
-
-                // Set url and alt and fadein
-                $(event.target.upload.log).attr({
-                  'src': response.url,
-                  'alt': response.title
-                })
-                .parents(".mosaic-tile")
-                  .children(".mosaic-tile-uploadprogress")
-                  .fadeOut("slow", function () {
-                    $(this).remove();
-                  });
-              }
-            }, false);
-
-            // Set error handler
-            xhr.upload.addEventListener("error", function (error) {
-              $.plone.notify({
-                type: "error",
-                title: "Error",
-                message: "Error uploading file: " + error,
-                sticky: true
-              });
-            }, false);
-
-            // Set boundary
-            boundary = "AJAX---------------------------AJAX";
-
-            // Open xhr and set content type
-            xhr.open("POST", $.mosaic.options.url + "/@@mosaic-upload",
-              true);
-            xhr.setRequestHeader('Content-Type',
-              'multipart/form-data; boundary=' + boundary);
-
-            // Add start boundary
-            data = "--" + boundary + "\r\n";
-
-            // Add file
-            data += 'Content-Disposition: form-data; ';
-            data += 'name="uploadfile"; ';
-            data += 'filename="' + file.fileName + '"' + "\r\n";
-            data += "Content-Type: " + file.mediaType;
-            data += "\r\n\r\n";
-            data += file.getAsBinary() + "\r\n";
-
-            // Add end boundary
-            data += "--" + boundary + "--" + "\r\n";
-
-            // Sent data
-            xhr.sendAsBinary(data);
-          } else {
-
-            // Notify unsupported
-            $.plone.notify({
-              type: "warning",
-              title: "Warning",
-              message: "The filetype of file " + file.fileName +
-                " is unsupported",
-              sticky: true
-            });
-          }
-        }
-
-        // Remove tile if no supported filetypes
-        if (first) {
-          $(".mosaic-button.remove").mosaicExecAction();
-        }
-      },
-      false
-    );
-  };
-});
diff --git a/src/plone/app/mosaic/utils.py b/src/plone/app/mosaic/utils.py
index ef8844e5..da966e5b 100644
--- a/src/plone/app/mosaic/utils.py
+++ b/src/plone/app/mosaic/utils.py
@@ -32,6 +32,11 @@ from zope.schema.interfaces import IField
 
 import os
 
+WIDGET_NAMES_MAP = {
+    'plone.app.z3cform.widget.RichTextWidget':
+    'plone.app.z3cform.widget.RichTextFieldWidget'
+}
+
 
 def _getWidgetName(field, widgets, request):
     if field.__name__ in widgets:
@@ -39,12 +44,14 @@ def _getWidgetName(field, widgets, request):
     else:
         factory = getMultiAdapter((field, request), IFieldWidget)
     if isinstance(factory, basestring):
-        return factory
-    elif isinstance(factory, ParameterizedWidget):
-        factory = factory.widget_factory
-    elif not isinstance(factory, type):
-        factory = factory.__class__
-    return '{0:s}.{1:s}'.format(factory.__module__, factory.__name__)
+        name = factory
+    else:
+        if isinstance(factory, ParameterizedWidget):
+            factory = factory.widget_factory
+        elif not isinstance(factory, type):
+            factory = factory.__class__
+        name = '{0:s}.{1:s}'.format(factory.__module__, factory.__name__)
+    return WIDGET_NAMES_MAP.get(name, name)
 
 
 def getPersistentResourceDirectory(id_, container=None):
['src/plone/app/mosaic/browser/static/js/mosaic.actions.js', 'src/plone/app/mosaic/browser/static/js/mosaic.pattern.js', 'src/plone/app/mosaic/browser/static/js/mosaic.overlay.js', 'CHANGES.rst', 'src/plone/app/mosaic/browser/static/js/mosaic.tile.js', 'src/plone/app/mosaic/utils.py', '.travis.yml', 'src/plone/app/mosaic/browser/static/js/mosaic.core.js']