diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index d0dc02133f..c863c3baab 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -137,6 +137,8 @@ namespace OpenSim.Region.Framework.Scenes
         protected IAssetService m_AssetService = null;
         protected IAuthorizationService m_AuthorizationService = null;
 
+        private Object m_heartbeatLock = new Object();
+
         public IAssetService AssetService
         {
             get
@@ -942,6 +944,9 @@ namespace OpenSim.Region.Framework.Scenes
         /// 
         private void Heartbeat(object sender)
         {
+            if (!Monitor.TryEnter(m_heartbeatLock))
+                return;
+
             try
             {
                 Update();
@@ -952,6 +957,11 @@ namespace OpenSim.Region.Framework.Scenes
             catch (ThreadAbortException)
             {
             }
+            finally
+            {
+                Monitor.Pulse(m_heartbeatLock);
+                Monitor.Exit(m_heartbeatLock);
+            }
         }
 
         ///