Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 4439)
+++ /CKEditor/trunk/CHANGES.html	(revision 4440)
@@ -45,5 +45,5 @@
 		Fixed issues:</p>
 	<ul>
-		<li></li>
+		<li><a href="http://dev.fckeditor.net/ticket/4552">#4552</a> : Fixed float panel doesn't show up since editor instanced been destroyed once.</li>
 	</ul>
 	<h3>
Index: /CKEditor/trunk/_source/core/editor.js
===================================================================
--- /CKEditor/trunk/_source/core/editor.js	(revision 4439)
+++ /CKEditor/trunk/_source/core/editor.js	(revision 4440)
@@ -468,4 +468,5 @@
 			this.fire( 'destroy' );
 			CKEDITOR.remove( this );
+			CKEDITOR.fire( 'instanceDestroyed', null, this );
 		},
 
Index: /CKEditor/trunk/_source/core/tools.js
===================================================================
--- /CKEditor/trunk/_source/core/tools.js	(revision 4439)
+++ /CKEditor/trunk/_source/core/tools.js	(revision 4440)
@@ -190,4 +190,13 @@
 		},
 
+		isEmpty : function ( object )
+		{
+			for ( var i in object )
+			{
+				if ( object.hasOwnProperty( i ) )
+					return false;
+			}
+			return true;
+		},
 		/**
 		 * Transforms a CSS property name to its relative DOM style name.
Index: /CKEditor/trunk/_source/plugins/floatpanel/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/floatpanel/plugin.js	(revision 4439)
+++ /CKEditor/trunk/_source/plugins/floatpanel/plugin.js	(revision 4440)
@@ -55,8 +55,4 @@
 
 			this.element = element;
-
-			// Register panels to editor for easy destroying ( #4241 ).
-			editor.panels ? editor.panels.push( element ) : editor.panels = [ element ];
-
 
 			this._ =
@@ -330,3 +326,22 @@
 		}
 	});
+
+	CKEDITOR.on( 'instanceDestroyed', function()
+	{
+		var isLastInstance = CKEDITOR.tools.isEmpty( CKEDITOR.instances );
+
+		for( var i in panels )
+		{
+			var panel = panels[ i ];
+			// Safe to destroy it since there're no more instances.(#4241)
+			if( isLastInstance )
+				panel.destroy();
+			// Panel might be used by other instances, just hide them.(#4552)
+			else
+				panel.element.hide();
+		}
+		// Remove the registration.
+		isLastInstance && ( panels = {} );
+
+	} );
 })();
Index: /CKEditor/trunk/_source/plugins/forms/dialogs/select.js
===================================================================
--- /CKEditor/trunk/_source/plugins/forms/dialogs/select.js	(revision 4439)
+++ /CKEditor/trunk/_source/plugins/forms/dialogs/select.js	(revision 4440)
@@ -161,5 +161,16 @@
 
 			if ( isInsertMode )
-				editor.insertElement( element );
+			{
+				editor.insertElement(element);
+				if( CKEDITOR.env.ie )
+				{
+					var sel = editor.getSelection(),
+						bms = sel.createBookmarks();
+					setTimeout(function ()
+					{
+						sel.selectBookmarks( bms );
+					}, 0 );
+				}
+			}
 		},
 		contents : [
Index: /CKEditor/trunk/_source/plugins/panel/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/panel/plugin.js	(revision 4439)
+++ /CKEditor/trunk/_source/plugins/panel/plugin.js	(revision 4440)
@@ -231,4 +231,9 @@
 
 		return block;
+	},
+
+	destroy : function()
+	{
+		this.element && this.element.remove();
 	}
 };
Index: /CKEditor/trunk/_source/themes/default/theme.js
===================================================================
--- /CKEditor/trunk/_source/themes/default/theme.js	(revision 4439)
+++ /CKEditor/trunk/_source/themes/default/theme.js	(revision 4440)
@@ -156,6 +156,5 @@
 		destroy : function( editor )
 		{
-			var container = editor.container,
-				panels = editor.panels;
+			var container = editor.container;
 
 			/*
@@ -184,7 +183,4 @@
 				container.remove();
 
-			for( var i = 0 ; panels && i < panels.length ; i++ )
-					panels[ i ].remove();
-
 			if ( editor.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE )
 			{
