When upgrading TinyMCE be aware of the following Umbraco specific things:
1.
The contextmenu plugin needs to be updated for translation of items and to ensure that it uses the Umbraco image plugin. Compare with a previous version

----

2. The paste plugin needs to be updated with umbraco specific style matching in the _preProcess method:
// UMBRACO SPECIFIC, remove all headers that's not in the style list
var umbracoAllowedStyles = this.editor.getParam('theme_umbraco_styles');
for (var i = 1; i < 7; i++) {
    if (umbracoAllowedStyles.indexOf("h" + i) == -1) {
        h = h.replace(new RegExp('<h' + i + '>', 'gi'), '<p><b>');
        h = h.replace(new RegExp('</h' + i + '>', 'gi'), '</b></p>');
    }
}

----

3. Languages
- Make sure to update new languages in the "advanced" theme of the original tinyMCE distribution to be called "umbraco" instead of "advanced" and placed
in the "umbraco" folder

-------

4. Update advLink and advImage to point to the Umbraco modals instead of the tinyMCE ones:
Link:
				file: tinyMCE.activeEditor.getParam('umbraco_path') + '/plugins/tinymce3/insertLink.aspx',
					width : 480 + parseInt(ed.getLang('advlink.delta_width', 0)),
					height : 510 + parseInt(ed.getLang('advlink.delta_height', 0)),

Image:
				file: tinyMCE.activeEditor.getParam('umbraco_path') + '/plugins/tinymce3/insertImage.aspx',
				width: 575 + parseInt(ed.getLang('advimage.delta_width', 0)),
				height: 585 + parseInt(ed.getLang('advimage.delta_height', 0)),

5. Update the advlink.js to make sure that it doesn't check for the loads of tabs in the traditional tiny link dialog (check old version)


6. Fix for macro div being inserted with surrounding p

if (s.forced_root_block) {
				//ed.onInit.add(t.forceRoots, t);
				//ed.onSetContent.add(t.forceRoots, t);
				//ed.onBeforeGetContent.add(t.forceRoots, t);
			}
		},

		setup : function() {
			var t = this, ed = t.editor, s = ed.settings, dom = ed.dom, selection = ed.selection;

			// Force root blocks when typing and when getting output
			if (s.forced_root_block) {
				//ed.onBeforeExecCommand.add(t.forceRoots, t);
				ed.onKeyUp.add(t.forceRoots, t);
				ed.onPreProcess.add(t.forceRoots, t);
			}

7. Don't forget plugins/inlinepopups/skins/umbraco

8. Update plugins/contextmenu (language stuff)

 var keys = UmbClientMgr.uiKeys();

            m.add({ title: keys['defaultdialogs_cut'], icon: 'cut', cmd: 'Cut' }).setDisabled(col);
            m.add({ title: keys['general_copy'], icon: 'copy', cmd: 'Copy' }).setDisabled(col);
            m.add({ title: keys['defaultdialogs_paste'], icon: 'paste', cmd: 'Paste' });
