internal override void UndoRedoPerformed(List <GameObject> modified)
        {
            modifiedMeshes = new HashSet <PolyMesh>(modifiedMeshes.Where(x => x != null));

#if PROBUILDER_4_0_OR_NEWER
            if (ProBuilderBridge.ProBuilderExists())
            {
                // delete & undo causes cases where object is not null but the reference to it's pb_Object is
                HashSet <GameObject> remove = new HashSet <GameObject>();

                foreach (GameObject pb in modifiedPbMeshes)
                {
                    try
                    {
                        ProBuilderBridge.ToMesh(pb);
                        ProBuilderBridge.Refresh(pb);
                        ProBuilderBridge.Optimize(pb);
                    }
                    catch
                    {
                        remove.Add(pb);
                    }
                }

                if (remove.Count() > 0)
                {
                    modifiedPbMeshes.SymmetricExceptWith(remove);
                }
            }
#endif

            foreach (PolyMesh m in modifiedMeshes)
            {
                m.UpdateMeshFromData();
            }

            base.UndoRedoPerformed(modified);
        }