protected internal virtual void TerminateMultiInstanceRoot(IExecutionEntity execution, ICommandContext commandContext, IExecutionEntityManager executionEntityManager)
        {
            // When terminateMultiInstance is 'true', we look for the multi instance root and delete it from there.
            IExecutionEntity miRootExecutionEntity = executionEntityManager.FindFirstMultiInstanceRoot(execution);

            if (miRootExecutionEntity != null)
            {
                // Create sibling execution to continue process instance execution before deletion
                IExecutionEntity siblingExecution = executionEntityManager.CreateChildExecution(miRootExecutionEntity.Parent);
                siblingExecution.CurrentFlowElement = miRootExecutionEntity.CurrentFlowElement;

                DeleteExecutionEntities(executionEntityManager, miRootExecutionEntity, CreateDeleteReason(miRootExecutionEntity.ActivityId));

                Context.Agenda.PlanTakeOutgoingSequenceFlowsOperation(siblingExecution, true);
            }
            else
            {
                DefaultTerminateEndEventBehaviour(execution, commandContext, executionEntityManager);
            }
        }