public void Commit()
        {
            var client = Utility.GetClient();
            var facet  = new SetSearchFacet();

            facet.ItemTypes.Add(DdiItemType.Group);
            facet.ItemTypes.Add(DdiItemType.DdiInstance);
            facet.ReverseTraversal = true;
            var toCommit = new List <IVersionable>();

            toCommit.AddRange(toBeAdded);
            toCommit.AddRange(workingSet.OfType <VariableScheme>());
            toCommit.AddRange(workingSet.OfType <VariableGroup>());
            toCommit.AddRange(workingSet.OfType <ControlConstructScheme>());
            toCommit.AddRange(workingSet.OfType <ControlConstructGroup>());
            foreach (var scope in scopes)
            {
                toCommit.AddRange(scope.Value.toBeAdded);
            }
            var versioner = new Versioner();

            var acceptedTypes = new List <Guid>()
            {
                DdiItemType.ResourcePackage,
                DdiItemType.DataCollection,
                DdiItemType.InstrumentScheme,
                DdiItemType.Instrument,
                DdiItemType.VariableScheme,
                DdiItemType.ControlConstructScheme
            };
            var joints = toCommit.Where(x => acceptedTypes.Contains(x.ItemType)).ToList();
            var tops   = new Dictionary <IdentifierTriple, IVersionable>();

            foreach (var joint in joints)
            {
                var set = client.SearchTypedSet(joint.CompositeId, facet);
                foreach (var parent in set)
                {
                    var top = client.GetItem(
                        parent.CompositeId,
                        ChildReferenceProcessing.PopulateLatest
                        ) as IVersionable;
                    if (top != null)
                    {
                        tops[top.CompositeId] = top;
                    }
                }
            }

            foreach (var top in tops)
            {
                toCommit.Add(top.Value);
                var one_down = top.Value.GetChildren().ToList();
                for (var i = 0; i < one_down.Count; i++)
                {
                    toCommit.Add(one_down[i]);
                    IVersionable su_joint;
                    if ((su_joint = toCommit.FirstOrDefault(x => one_down[i].CompositeId.Identifier == x.CompositeId.Identifier)) != default(IVersionable))
                    {
                        top.Value.ReplaceChild(one_down[i].CompositeId, su_joint);
                    }
                    else
                    {
                        foreach (var child in one_down[i].GetChildren().ToList())
                        {
                            var bottom_joint = toCommit.FirstOrDefault(x => x.CompositeId == child.CompositeId);
                            if (bottom_joint != default(IVersionable))
                            {
                                one_down[i].ReplaceChild(child.CompositeId, bottom_joint);
                            }
                        }
                    }
                }
                versioner.IncrementDityItemAndParents(top.Value);
            }
            client.RegisterItems(toCommit, new CommitOptions());
        }