/// <summary>
        /// Finds the Transition with the given name and adds a loop to it. This also handles looping transitions right after multiple places (AND-join) or right before multiple places (AND-split)
        /// </summary>
        /// <param name="transitionName">The name of the transition the is looped</param>
        /// <param name="transition"></param>
        public void AddLoop(String transitionName = "", Transition transition = null)
        {
            Transition item = transition ?? FindTransition(transitionName);

            // if the activity is in the eventlog but NOT in the net
            if (item == null)
            {
                return;
            }

            Transition loop = AddTransition("(Loop)", isLoop: true);

            // before the Transition
            if (item.IncomingPlaces.Count == 1)
            {
                loop.AddOutgoingPlace(item.IncomingPlaces[0]);
            }
            else
            {
                Place      newPlace      = AddPlace();
                Transition newTransition = AddTransition();

                // redirect incoming connections
                newTransition.AddIncomingPlaces(item.IncomingPlaces);
                foreach (Place place in item.IncomingPlaces)
                {
                    place.OutgoingTransitions.Remove(item);
                }
                item.IncomingPlaces.Clear();
                // add new connections
                loop.AddOutgoingPlace(newPlace);
                newTransition.AddOutgoingPlace(newPlace);
                item.AddIncomingPlace(newPlace);
            }

            // after the Transition
            if (item.OutgoingPlaces.Count == 1)
            {
                loop.AddIncomingPlace(item.OutgoingPlaces[0]);
            }
            else
            {
                Place      newPlace      = AddPlace();
                Transition newTransition = AddTransition();

                // redirect outgoing connections
                newTransition.AddOutgoingPlaces(item.OutgoingPlaces);
                foreach (Place place in item.OutgoingPlaces)
                {
                    place.IncomingTransitions.Remove(item);
                }
                item.OutgoingPlaces.Clear();
                // add new connections
                item.AddOutgoingPlace(newPlace);
                loop.AddIncomingPlace(newPlace);
                newTransition.AddIncomingPlace(newPlace);
            }
        }