 						var ssm:SessionStateMessage = o as SessionStateMessage;
 						if (userAlias == this.username)
 						{
+							//dispatchLogEvent('\nECHO ' + ssm.id + '\n--------------------------\n');
+							
 							// received echo back from local state change
 							// search history for diff with matching id
 							var foundID:Boolean = false;

							for (i = stateLog.undoHistory.length - 1; i >= 0; i--)
								setSessionState(root, stateLog.undoHistory[i].backward, false);
							
							// apply remote change
							setSessionState(root, ssm.diff, false);
							
							// replay local changes
							for (i = 0; i < stateLog.undoHistory.length; i++)
								setSessionState(root, stateLog.undoHistory[i].forward, false);
						}
					}
				}

			{
				disposeObjects(stateLog);
				stateLog = null;
			}
		}
		//If the Session state changes in anyway, a diff is created and stored in the
		//StateLog history. The latest entry is than sent to the server, to be sent
		//to everyone else to update their collaboration session.
		private function handleStateChange():void
		{
			// note: this code may need to be changed later if SessionStateLog implementation changes.
			if (connectedToRoom && stateLog != null)
			{
				var log:Array = stateLog.undoHistory;
				if (synchronizingIncomingDiff)
				{
					log.pop(); // suppress the outgoing diff that results from an incoming diff
				}
				else
				{
					var entry:Object = log[log.length - 1];
					sendSessionStateDiff( entry.id, entry.forward );
				}
			}
		}
		
