diff --git a/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs b/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs
index 17edb67d18..8f38a2978b 100644
--- a/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs
@@ -509,6 +509,8 @@ namespace OpenSim.ApplicationPlugins.RegionModulesController
             {
                 module.RegionLoaded(scene);
             }
+
+            scene.AllModulesLoaded();
         }
 
         public void RemoveRegionFromModules (Scene scene)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index cca8963aa9..2fe6e22c1f 100755
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -39,6 +39,7 @@ using Nini.Config;
 using OpenMetaverse;
 using OpenMetaverse.Packets;
 using OpenMetaverse.Imaging;
+using OpenMetaverse.StructuredData;
 using OpenSim.Framework;
 using OpenSim.Framework.Monitoring;
 using OpenSim.Services.Interfaces;
@@ -381,6 +382,9 @@ namespace OpenSim.Region.Framework.Scenes
         }
         private int m_minFrameTicks;
 
+		public int FrameTimeWarnPercent { get; private set; }
+		public int FrameTimeCritPercent { get; private set; }
+
         // Normalize the frame related stats to nominal 55fps for viewer and scripts option
         // see SimStatsReporter.cs
         public bool Normalized55FPS { get; private set; }
@@ -860,6 +864,8 @@ namespace OpenSim.Region.Framework.Scenes
         {
             m_config = config;
             MinFrameTicks = 89;
+            FrameTimeWarnPercent = 60;
+            FrameTimeCritPercent = 40;
 			Normalized55FPS = true;
             MinMaintenanceTicks = 1000;
             SeeIntoRegion = true;
@@ -1088,6 +1094,8 @@ namespace OpenSim.Region.Framework.Scenes
 
                 if (startupConfig.Contains("MinFrameTime"))
                     MinFrameTicks = (int)(startupConfig.GetFloat("MinFrameTime") * 1000);
+                FrameTimeWarnPercent      = startupConfig.GetInt( "FrameTimeWarnPercent", FrameTimeWarnPercent);
+                FrameTimeCritPercent      = startupConfig.GetInt( "FrameTimeCritPercent", FrameTimeCritPercent);
 				Normalized55FPS           = startupConfig.GetBoolean( "Normalized55FPS", Normalized55FPS);
 
                 m_update_backup           = startupConfig.GetInt("UpdateStorageEveryNFrames",         m_update_backup);
@@ -1256,13 +1264,44 @@ namespace OpenSim.Region.Framework.Scenes
             get { return m_sceneGraph; }
         }
 
-        protected virtual void RegisterDefaultSceneEvents()
+        /// 
+        /// Called by the module loader when all modules are loaded, after each module's
+        /// RegionLoaded hook is called. This is the earliest time where RequestModuleInterface
+        /// may be used.
+        /// 
+        public void AllModulesLoaded()
         {
             IDialogModule dm = RequestModuleInterface();
 
             if (dm != null)
                 m_eventManager.OnPermissionError += dm.SendAlertToUser;
 
+            ISimulatorFeaturesModule fm = RequestModuleInterface();
+            if (fm != null)
+            {
+                OSD openSimExtras;
+                OSDMap openSimExtrasMap;
+
+                if (!fm.TryGetFeature("OpenSimExtras", out openSimExtras))
+                    openSimExtras = new OSDMap();
+
+                float FrameTime = MinFrameTicks / 1000.0f;
+                float statisticsFPSfactor = 1.0f;
+                if(Normalized55FPS)
+                    statisticsFPSfactor = 55.0f * FrameTime;
+
+                openSimExtrasMap = (OSDMap)openSimExtras;
+                openSimExtrasMap["SimulatorFPS"] = OSD.FromReal(1.0f / FrameTime);
+                openSimExtrasMap["SimulatorFPSFactor"] = OSD.FromReal(statisticsFPSfactor);
+                openSimExtrasMap["SimulatorFPSWarnPercent"] = OSD.FromInteger(FrameTimeWarnPercent);
+                openSimExtrasMap["SimulatorFPSCritPercent"] = OSD.FromInteger(FrameTimeCritPercent);
+
+                fm.AddFeature("OpenSimExtras", openSimExtrasMap);
+            }
+        }
+
+        protected virtual void RegisterDefaultSceneEvents()
+        {
             m_eventManager.OnSignificantClientMovement += HandleOnSignificantClientMovement;
         }