| 
					
				 | 
			
			
				@@ -47,27 +47,37 @@ namespace InABox.Core 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public virtual bool Synchronise(object Entity) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var result = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var props = CoreUtils.PropertyList(GetType(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                x => (!x.Name.Equals("ID") || Entity == null) && !x.DeclaringType.Equals(typeof(BaseObject)), false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var props = CoreUtils.PropertyList(GetType(), x => (!x.Name.Equals("ID") || Entity == null) && !x.DeclaringType.Equals(typeof(BaseObject)), false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             foreach (var key in props.Keys) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (CoreUtils.HasProperty(Entity.GetType(), key)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     var prop = CoreUtils.GetProperty(typeof(T), key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (prop != null && prop.PropertyType.Equals(props[key]) && !prop.PropertyType.GetInterfaces().Any(x => x == typeof(IEntityLink))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (prop != null && prop.PropertyType.Equals(props[key])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        var oldvalue = CoreUtils.GetPropertyValue(this, key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        var newvalue = CoreUtils.GetPropertyValue(Entity, key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if ((oldvalue == null && newvalue != null) || (oldvalue != null && !oldvalue.Equals(newvalue))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (prop.PropertyType.GetInterfaces().Any(x => x == typeof(IEntityLink))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            result = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                CoreUtils.SetPropertyValue(this, key, newvalue); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            catch (Exception e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            var tgtlink = CoreUtils.GetPropertyValue(this, key) as IEntityLink; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            var srclink = CoreUtils.GetPropertyValue(Entity, key) as IEntityLink; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            tgtlink.ID = srclink.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            tgtlink.Synchronise(srclink); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            var oldvalue = CoreUtils.GetPropertyValue(this, key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            var newvalue = CoreUtils.GetPropertyValue(Entity, key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if ((oldvalue == null && newvalue != null) || (oldvalue != null && !oldvalue.Equals(newvalue))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", e.Message, e.StackTrace)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                result = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    CoreUtils.SetPropertyValue(this, key, newvalue); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                catch (Exception e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", e.Message, e.StackTrace)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 |