public virtual void Execute(PvmExecutionImpl execution)
        {
            // reset activity instance id before creating the scope
            execution.ActivityInstanceId = execution.ParentActivityInstanceId;

            PvmExecutionImpl propagatingExecution = null;
            IPvmActivity     activity             = execution.Activity;

            if (activity != null && activity.IsScope)
            {
                propagatingExecution            = (PvmExecutionImpl)execution.CreateExecution();
                propagatingExecution.Activity   = activity;
                propagatingExecution.Transition = (execution.Transition);
                execution.Transition            = (null);
                execution.IsActive = false;
                execution.Activity = (null);
                Log.CreateScope(execution, propagatingExecution);
                propagatingExecution.Initialize();
            }
            else
            {
                propagatingExecution = execution;
            }


            ScopeCreated(propagatingExecution);
        }
        public virtual void Execute(PvmExecutionImpl execution)
        {
            var executionStartContext = execution.ExecutionStartContext;

            var instantiationStack = executionStartContext.InstantiationStack;
            var activityStack      = instantiationStack.Activities;
            var currentActivity    = activityStack[0];

            activityStack.RemoveAt(0);

            var propagatingExecution = execution;

            if (currentActivity.IsScope)
            {
                propagatingExecution          = (PvmExecutionImpl)execution.CreateExecution();
                execution.IsActive            = false;
                propagatingExecution.Activity = (ActivityImpl)(currentActivity);
                propagatingExecution.Initialize();
            }
            else
            {
                propagatingExecution.Activity = (ActivityImpl)(currentActivity);
            }

            // notify listeners for the instantiated activity
            propagatingExecution.PerformOperation(OperationOnScopeInitialization);
        }