diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
index f695eba8a7..16641f790a 100644
--- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
@@ -92,6 +92,11 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
         /// 
         bool ShuttingDown { get; set; }
 
+        /// 
+        /// When stopping the script: should it remain stopped permanently (i.e., save !Running in its state)?
+        /// 
+        bool StayStopped { get; set; }
+
         /// 
         /// Script state
         /// 
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
index c6512ba865..654125662b 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
@@ -126,7 +126,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
             }
         }
 
-        public bool Running { get; set; }
+        public bool Running
+        {
+            get { return m_running; }
+
+            set
+            {
+                m_running = value;
+                if (m_running)
+                    StayStopped = false;
+            }
+        }
+        private bool m_running;
 
         public bool Suspended
         {
@@ -158,6 +169,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
 
         public string State { get; set; }
 
+        public bool StayStopped { get; set; }
+
         public IScriptEngine Engine { get; private set; }
 
         public UUID AppDomain { get; set; }
@@ -1077,7 +1090,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
 
         public void SaveState()
         {
-            if (!Running)
+            if (!Running && !StayStopped)
                 return;
 
             // We cannot call this inside the EventQueue lock since it will currently take AsyncCommandManager.staticLock.
@@ -1089,7 +1102,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
             lock (EventQueue)
             {
                 // Check again to avoid a race with a thread in Stop()
-                if (!Running)
+                if (!Running && !StayStopped)
                     return;
 
                 // If we're currently in an event, just tell it to save upon return
@@ -1130,6 +1143,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
                     //}
                     m_CurrentStateHash = hash;
                 }
+
+                StayStopped = false;
             }
         }
 
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index 5071884ed0..62bf803048 100755
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -699,6 +699,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
         {
             if (instance.Running)
             {
+                instance.StayStopped = true;    // the script was stopped explicitly
+
                 instance.Stop(0);
 
                 SceneObjectPart sop = m_Scene.GetSceneObjectPart(instance.ObjectID);
@@ -1914,6 +1916,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 
             if (instance != null)
             {
+                lock (instance.EventQueue)
+                    instance.StayStopped = true;    // the script was stopped explicitly
+
                 instance.Stop(m_WaitForEventCompletionOnScriptStop);
             }
             else