public void UpdateSubScopeReferenceProperties(TECSubScope subScope) { var templateSS = SubScopeSynchronizer.GetTemplate(subScope); if (templateSS != subScope) { setProperties(subScope, templateSS); } SubScopeSynchronizer.ActOnReferences(templateSS, updateSubScope); void updateSubScope(TemplateSynchronizer <TECSubScope> synchronizer, TECSubScope template) { foreach (TECSubScope item in synchronizer.GetFullDictionary()[template]) { setProperties(template, item); } } void setProperties(TECSubScope tSS, TECSubScope rSS) { rSS.CopyPropertiesFromScope(tSS); rSS.ScopeBranches.ObservablyClear(); foreach (TECScopeBranch branch in tSS.ScopeBranches) { rSS.ScopeBranches.Add(new TECScopeBranch(branch)); } } }