Index: /FCKeditor/trunk/_whatsnew.html
===================================================================
--- /FCKeditor/trunk/_whatsnew.html	(revision 444)
+++ /FCKeditor/trunk/_whatsnew.html	(revision 445)
@@ -114,4 +114,6 @@
 		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/515">#515</a>] Tables in Firefox didn't inherint font
 			styles properly in Standards mode.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/321">#321</a>] If FCKeditor is initially hidden in Firefox
+			it will no longer be neccesary to call the oEditor.MakeEditable() function.</li>
 	</ul>
 	<h3>
Index: /FCKeditor/trunk/editor/_source/classes/fckeditingarea.js
===================================================================
--- /FCKeditor/trunk/editor/_source/classes/fckeditingarea.js	(revision 444)
+++ /FCKeditor/trunk/editor/_source/classes/fckeditingarea.js	(revision 445)
@@ -216,6 +216,43 @@
 			oDoc.execCommand( 'enableInlineTableEditing', false, !FCKConfig.DisableFFTableHandles ) ;
 		}
-		catch (e) {}
-	}
+		catch (e) 
+		{
+			// In Firefox if the iframe is initially hidden it can't be set to designMode and it raises an exception
+			// So we set up a DOM Mutation event Listener on the HTML, as it will raise several events when the document is  visible again
+			FCKTools.AddEventListener( this.Document, 'DOMAttrModified', FCKEditingArea_Document_AttributeNodeModified ) ;
+		}
+
+	}
+}
+
+// This function processes the notifications of the DOM Mutation event on the document
+// We use it to know that the document will be ready to be editable again (or we hope so)
+function FCKEditingArea_Document_AttributeNodeModified( evt )
+{
+	var oDoc = evt.currentTarget ;
+	var oWindow = oDoc.defaultView ;
+	var editingArea = oWindow._FCKEditingArea ;
+	
+	// We want to run our function after the events no longer fire, so we can know that it's a stable situation
+	if ( editingArea._timer )
+	{
+		oWindow.clearTimeout( editingArea._timer ) ;
+		delete editingArea._timer ;
+	}
+
+	editingArea._timer = FCKTools.SetTimeout( editingArea._MakeEditableByMutation, 1000, editingArea ) ;	
+}
+
+// This function ideally should be called after the document is visible, it does clean up of the
+// mutation tracking and tries again to make the area editable.
+FCKEditingArea.prototype._MakeEditableByMutation = function()
+{
+	// Clean up
+	delete this._timer ;
+	// Now we don't want to keep on getting this event
+	FCKTools.RemoveEventListener( this.Document, 'DOMAttrModified', FCKEditingArea_Document_AttributeNodeModified ) ;
+	// Let's try now to set the editing area editable
+	// If it fails it will set up the Mutation Listener again automatically
+	this.MakeEditable() ;
 }
 
