Index: E:/Data/ifolder/trunk/simias/src/server/Simias.Server/Catalog.cs
===================================================================
--- E:/Data/ifolder/trunk/simias/src/server/Simias.Server/Catalog.cs	(revision 6716)
+++ E:/Data/ifolder/trunk/simias/src/server/Simias.Server/Catalog.cs	(revision 6717)
@@ -549,6 +549,8 @@
 		/// <param name="collectionClient">The client that is ready to sync.</param>
 		internal static void TimerFired( object collectionClient )
 		{
+			while(CollectionSyncClient.running)
+				Thread.Sleep(1000);
 			syncEvent.Set();
 		}
 
Index: E:/Data/ifolder/trunk/simias/src/server/Simias.Server/HostProvider.cs
===================================================================
--- E:/Data/ifolder/trunk/simias/src/server/Simias.Server/HostProvider.cs	(revision 6716)
+++ E:/Data/ifolder/trunk/simias/src/server/Simias.Server/HostProvider.cs	(revision 6717)
@@ -387,6 +387,8 @@
 		/// <param name="collectionClient">The client that is ready to sync.</param>
 		public void TimerFired( object collectionClient )
 		{
+			while(CollectionSyncClient.running)
+				Thread.Sleep(1000);
 			syncEvent.Set();
 		}
 	}
Index: E:/Data/ifolder/trunk/simias/src/core/Sync/SyncClient.cs
===================================================================
--- E:/Data/ifolder/trunk/simias/src/core/Sync/SyncClient.cs	(revision 6716)
+++ E:/Data/ifolder/trunk/simias/src/core/Sync/SyncClient.cs	(revision 6717)
@@ -524,6 +524,7 @@
 		static int		BATCH_SIZE = 50;
 		private const string	ServerCLContextProp = "ServerCLContext";
 		private const string	ClientCLContextProp = "ClientCLContext";
+		private Object syncObject = new Object();
 		int				nodesToSync = 0;
 		static int		initialSyncDelay = 10 * 1000; // 10 seconds.
 		DateTime		syncStartTime; // Time stamp when sync was called.
@@ -532,6 +533,7 @@
 		bool			firstSync = true;
 		bool			yielded = false;
 		DateTime		lastSyncTime = DateTime.MinValue;
+		public static bool	running = false;
 		
 		/// <summary>
 		/// Returns true if we should yield our timeslice.
@@ -724,6 +726,7 @@
 				eventPublisher.RaiseEvent(new CollectionSyncEventArgs(collection.Name, collection.ID, Action.StartLocalSync, true, false));
 				syncStartTime = DateTime.Now;
 				queuedChanges = false;
+				running = true;
 				serverStatus = StartSyncStatus.Success;
 				// Refresh the collection.
 				collection.Refresh();
@@ -851,28 +854,31 @@
 						case Access.Rights.ReadWrite:
 							try
 							{
-								while (true)
+								lock(syncObject)
 								{
-									int filesFromServer;
-									// Now lets determine the files that need to be synced.
-									if (si.ChangesOnly)
+									while (true)
 									{
-										// We only need to look at the changed nodes.
-										ProcessChangedNodeStamps(cstamps, ref tempServerContext);
-										cstamps = null;
+										int filesFromServer;
+										// Now lets determine the files that need to be synced.
+										if (si.ChangesOnly)
+										{
+											// We only need to look at the changed nodes.
+											ProcessChangedNodeStamps(cstamps, ref tempServerContext);
+											cstamps = null;
+										}
+										else
+										{
+											// We don't have any state. So do a full sync.
+											ReconcileAllNodeStamps();
+										}
+										filesFromServer = workArray.DownCount;
+										queuedChanges = true;
+										ExecuteSync();
+										if (!si.ChangesOnly)
+											break;
+										if (filesFromServer == 0 || filesFromServer == workArray.DownCount)
+											break;
 									}
-									else
-									{
-										// We don't have any state. So do a full sync.
-										ReconcileAllNodeStamps();
-									}
-									filesFromServer = workArray.DownCount;
-									queuedChanges = true;
-									ExecuteSync();
-									if (!si.ChangesOnly)
-										break;
-									if (filesFromServer == 0 || filesFromServer == workArray.DownCount)
-										break;
 								}
 							}
 							finally
@@ -896,6 +902,7 @@
 			finally
 			{
 				serverAlive = sAlive;
+				running = false;
 				eventPublisher.RaiseEvent(new CollectionSyncEventArgs(collection.Name, collection.ID, Action.StopSync, sAlive, yielded));
 			}
 		}
