Index: /FCKeditor/trunk/_whatsnew.html
===================================================================
--- /FCKeditor/trunk/_whatsnew.html	(revision 426)
+++ /FCKeditor/trunk/_whatsnew.html	(revision 427)
@@ -106,4 +106,8 @@
 		[<a target="_blank" href="http://dev.fckeditor.net/ticket/932">#932</a>] Clicking outside the editor it was possible
 			to paste or apply formating to the rest of the page in IE.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/137">#137</a>] Fixed FCKConfig.TabSpaces being ignored,
+			and weired behaviors when pressing tab in edit source mode.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/268">#268</a>] Fixed special XHTML characters present 
+			in event attribute values being converted inappropriately when switching to source view.</li>
 	</ul>
 	<h3>
Index: /FCKeditor/trunk/editor/_source/internals/fck.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fck.js	(revision 426)
+++ /FCKeditor/trunk/editor/_source/internals/fck.js	(revision 427)
@@ -698,10 +698,10 @@
 function _FCK_ProtectEvents_ReplaceEvents( eventMatch, attName )
 {
-	return ' ' + attName + '_fckprotectedatt="' + eventMatch.ReplaceAll( [/&/g,/'/g,/"/g,/=/g,/</g,/>/g,/\r/g,/\n/g], ['&apos;','&#39;','&quot;','&#61;','&lt;','&gt;','&#10;','&#13;'] ) + '"' ;
+	return ' ' + attName + '_fckprotectedatt="' + FCKTools.EncodeToHex( eventMatch ) + '"' ;
 }
 
 function _FCK_ProtectEvents_RestoreEvents( match, encodedOriginal )
 {
-	return encodedOriginal.ReplaceAll( [/&#39;/g,/&quot;/g,/&#61;/g,/&lt;/g,/&gt;/g,/&#10;/g,/&#13;/g,/&apos;/g], ["'",'"','=','<','>','\r','\n','&'] ) ;
+	return FCKTools.DecodeHex( encodedOriginal ) ;
 }
 
Index: /FCKeditor/trunk/editor/_source/internals/fcklistslib.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fcklistslib.js	(revision 426)
+++ /FCKeditor/trunk/editor/_source/internals/fcklistslib.js	(revision 427)
@@ -57,4 +57,9 @@
 		else
 			this.PathBlockLimitElements.div = 1 ;
-	}
+	},
+
+	HexList : [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" ],
+
+	HexMap : { "0":0, "1":1, "2":2, "3":3, "4":4, "5":5, "6":6, "7":7, "8":8, "9":9, "A":10,
+		"B":11, "C":12, "D":13, "E":14, "F":15 } 
 } ;
Index: /FCKeditor/trunk/editor/_source/internals/fcktools.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fcktools.js	(revision 426)
+++ /FCKeditor/trunk/editor/_source/internals/fcktools.js	(revision 427)
@@ -416,2 +416,37 @@
 	return null ;
 }
+
+FCKTools.EncodeToHex = function( str )
+{
+	var symbols = FCKListsLib.HexList ;
+	var output = [] ;
+	// assume code points are 16-bits
+	for ( var i = 0 ; i < str.length ; i++ )
+	{
+		var c = str.charCodeAt( i ) ;
+		var lsn = c & 0x000f ;
+		var second = ( c & 0x00f0 ) >> 4 ;
+		var third = ( c & 0x0f00 ) >> 8 ;
+		var msn = ( c & 0xf000 ) >> 12 ;
+		output.push( [ symbols[msn], symbols[third], symbols[second], symbols[lsn] ].join( "" ) ) ;
+	}
+	return output.join( "" ) ;
+}
+
+FCKTools.DecodeHex = function( hexstr )
+{
+	if ( hexstr.length % 4 != 0 )
+		throw "FCKTools.DecodeHex(): hexstr length must be multiple of 4." ;
+
+	var symbols = FCKListsLib.HexMap ;
+	var output = [] ;
+	for ( var i = 0 ; i < hexstr.length ; i+=4 )
+	{
+		var codePoint = symbols[ hexstr[i] ] << 12 ;
+		codePoint |= symbols[ hexstr[ i + 1 ] ] << 8 ;
+		codePoint |= symbols[ hexstr[ i + 2 ] ] << 4 ;
+		codePoint |= symbols[ hexstr[ i + 3 ] ] ;
+		output.push( String.fromCharCode( codePoint ) ) ;
+	}
+	return output.join( "" ) ;
+}
