--- C:/Users/Eamon/AppData/Local/Temp/T-revBASE.svn005.tmp.cs	Sat Feb 27 16:32:28 2010
+++ D:/EamonLargeDocs/docs-trunk/External/taglib-sharp/src/TagLib/Id3v2/Tag.cs	Sat Feb 27 16:28:54 2010
@@ -556,18 +556,25 @@
 			// footer.
 			
 			bool has_footer = (header.Flags &
-				HeaderFlags.FooterPresent) != 0;
-			
+				HeaderFlags.FooterPresent) != 0;
+
+			bool unsynchAtFrameLevel = (header.Flags & HeaderFlags.Unsynchronisation) != 0 && Version >= 4;
+			bool unsynchAtTagLevel = (header.Flags & HeaderFlags.Unsynchronisation) != 0 && Version < 4;
+
 			header.MajorVersion = has_footer ? (byte) 4 : Version;
 			
 			ByteVector tag_data = new ByteVector ();
 			
 			// TODO: Render the extended header.
 			header.Flags &= ~HeaderFlags.ExtendedHeader;
+
 			
 			// Loop through the frames rendering them and adding
 			// them to the tag_data.
-			foreach (Frame frame in frame_list) {
+			foreach (Frame frame in frame_list) {
+				if (unsynchAtFrameLevel)
+					frame.Flags |= FrameFlags.Unsynchronisation;
+
 				if ((frame.Flags &
 					FrameFlags.TagAlterPreservation) != 0)
 					continue;
@@ -576,11 +583,12 @@
 					tag_data.Add (frame.Render (
 						header.MajorVersion));
 				} catch (NotImplementedException) {
+
 				}
 			}
 			
-			// Add unsyncronization bytes if necessary.
-			if ((header.Flags & HeaderFlags.Unsynchronisation) != 0)
+			// Add unsyncronization bytes if necessary.
+			if (unsynchAtTagLevel)
 				SynchData.UnsynchByteVector (tag_data);
 			
 			// Compute the amount of padding, and append that to
@@ -830,9 +838,10 @@
 				throw new ArgumentNullException ("data");
 
 			// If the entire tag is marked as unsynchronized,
-			// resynchronize it.
-			
-			if ((header.Flags & HeaderFlags.Unsynchronisation) != 0)
+			// resynchronize it.
+
+			bool fullTagUnsynch =  (header.MajorVersion < 4) && ((header.Flags & HeaderFlags.Unsynchronisation) != 0);
+			if (fullTagUnsynch)
 				SynchData.ResynchByteVector (data);
 			
 			int frame_data_position = 0;
@@ -875,7 +884,7 @@
 					frame = FrameFactory.CreateFrame (data,
 						ref frame_data_position,
 						header.MajorVersion,
-                        (header.Flags & HeaderFlags.Unsynchronisation) != 0);
+						fullTagUnsynch);
 				} catch (NotImplementedException) {
 					continue;
 				}
