From f42d1fc825b7b9d22ae05836992531d9abd2a26d Mon Sep 17 00:00:00 2001
From: lbsa71
Date: Tue, 27 Mar 2007 21:42:14 +0000
Subject: * revert the revert - begin the beguine

---
 OpenSim.RegionServer/AgentAssetUpload.cs           | 17 ++--
 OpenSim.RegionServer/CAPS/AdminWebFront.cs         | 11 ++-
 OpenSim.RegionServer/CAPS/SimHttp.cs               | 41 +++++----
 OpenSim.RegionServer/OpenSim.RegionServer.csproj   | 68 +++++++--------
 .../OpenSim.RegionServer.dll.build                 |  7 +-
 OpenSim.RegionServer/OpenSimMain.cs                |  8 +-
 OpenSim.RegionServer/SimClient.cs                  | 99 +++++++++++++---------
 .../UserServer/LocalUserProfileManager.cs          | 18 ++--
 OpenSim.RegionServer/UserServer/LoginServer.cs     | 20 +++--
 OpenSim.RegionServer/world/Avatar.cs               | 39 +++++----
 OpenSim.RegionServer/world/Primitive.cs            | 27 +++---
 OpenSim.RegionServer/world/World.cs                | 31 ++++---
 12 files changed, 226 insertions(+), 160 deletions(-)

(limited to 'OpenSim.RegionServer')

diff --git a/OpenSim.RegionServer/AgentAssetUpload.cs b/OpenSim.RegionServer/AgentAssetUpload.cs
index a482e80..9f85598 100644
--- a/OpenSim.RegionServer/AgentAssetUpload.cs
+++ b/OpenSim.RegionServer/AgentAssetUpload.cs
@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.Text;
+using OpenSim.Assets;
 using OpenSim.Framework.Assets;
 using OpenSim.Framework.Utilities;
 using libsecondlife;
@@ -12,10 +13,14 @@ namespace OpenSim
     {
         private Dictionary<LLUUID, AssetTransaction> transactions = new Dictionary<LLUUID, AssetTransaction>();
         private SimClient ourClient;
+        private AssetCache m_assetCache;
+        private InventoryCache m_inventoryCache;
 
-        public AgentAssetUpload(SimClient client)
+        public AgentAssetUpload(SimClient client, AssetCache assetCache, InventoryCache inventoryCache)
         {
             this.ourClient = client;
+            m_assetCache = assetCache;
+            m_inventoryCache = inventoryCache;
         }
 
         public void AddUpload(LLUUID transactionID, AssetBase asset)
@@ -148,8 +153,8 @@ namespace OpenSim
                             //check if we should add it to inventory 
                             if (trans.AddToInventory)
                             {
-                                OpenSimRoot.Instance.AssetCache.AddAsset(trans.Asset);
-                                OpenSimRoot.Instance.InventoryCache.AddNewInventoryItem(this.ourClient, trans.InventFolder, trans.Asset);
+                                m_assetCache.AddAsset(trans.Asset);
+                                m_inventoryCache.AddNewInventoryItem(this.ourClient, trans.InventFolder, trans.Asset);
                             }
 
                            
@@ -176,7 +181,7 @@ namespace OpenSim
                 AssetTransaction trans = this.transactions[transactionID];
                 if (trans.UploadComplete)
                 {
-                    OpenSimRoot.Instance.AssetCache.AddAsset(trans.Asset);
+                    m_assetCache.AddAsset(trans.Asset);
                     asset = trans.Asset;
                 }
             }
@@ -195,8 +200,8 @@ namespace OpenSim
                 if (trans.UploadComplete)
                 {
                     //already complete so we can add it to the inventory
-                    OpenSimRoot.Instance.AssetCache.AddAsset(trans.Asset);
-                   Console.WriteLine( "ITem created is " +OpenSimRoot.Instance.InventoryCache.AddNewInventoryItem(this.ourClient, packet.InventoryBlock.FolderID, trans.Asset).ToStringHyphenated());
+                    m_assetCache.AddAsset(trans.Asset);
+                   Console.WriteLine( "ITem created is " +m_inventoryCache.AddNewInventoryItem(this.ourClient, packet.InventoryBlock.FolderID, trans.Asset).ToStringHyphenated());
                 }
                 else
                 {
diff --git a/OpenSim.RegionServer/CAPS/AdminWebFront.cs b/OpenSim.RegionServer/CAPS/AdminWebFront.cs
index ea32589..03f8692 100644
--- a/OpenSim.RegionServer/CAPS/AdminWebFront.cs
+++ b/OpenSim.RegionServer/CAPS/AdminWebFront.cs
@@ -2,6 +2,7 @@ using System;
 using System.Collections.Generic;
 using System.Text;
 using System.IO;
+using OpenSim.world;
 
 namespace OpenSim.CAPS
 {
@@ -11,9 +12,11 @@ namespace OpenSim.CAPS
         private string NewAccountForm;
         private string LoginForm;
         private string passWord = "Admin";
+        private World m_world;
 
-        public AdminWebFront(string password)
+        public AdminWebFront(string password, World world)
         {
+            m_world = world;
             passWord = password;
             LoadAdminPage();
         }
@@ -45,11 +48,11 @@ namespace OpenSim.CAPS
                         {
                             responseString = " <p> Listing connected Clients </p>";
                             OpenSim.world.Avatar TempAv;
-                            foreach (libsecondlife.LLUUID UUID in OpenSimRoot.Instance.LocalWorld.Entities.Keys)
+                            foreach (libsecondlife.LLUUID UUID in m_world.Entities.Keys)
                             {
-                                if (OpenSimRoot.Instance.LocalWorld.Entities[UUID].ToString() == "OpenSim.world.Avatar")
+                                if (m_world.Entities[UUID].ToString() == "OpenSim.world.Avatar")
                                 {
-                                    TempAv = (OpenSim.world.Avatar)OpenSimRoot.Instance.LocalWorld.Entities[UUID];
+                                    TempAv = (OpenSim.world.Avatar)m_world.Entities[UUID];
                                     responseString += "<p>";
                                     responseString += String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16},{5,-16}", TempAv.firstname, TempAv.lastname, UUID, TempAv.ControllingClient.SessionID, TempAv.ControllingClient.CircuitCode, TempAv.ControllingClient.userEP.ToString());
                                     responseString += "</p>";
diff --git a/OpenSim.RegionServer/CAPS/SimHttp.cs b/OpenSim.RegionServer/CAPS/SimHttp.cs
index a1073f0..92bbc6f 100644
--- a/OpenSim.RegionServer/CAPS/SimHttp.cs
+++ b/OpenSim.RegionServer/CAPS/SimHttp.cs
@@ -39,22 +39,27 @@ using System.Collections.Generic;
 using libsecondlife;
 using OpenSim.Framework.Console;
 using OpenSim.Framework.Interfaces;
+using OpenSim.Servers;
 
 namespace OpenSim.CAPS
 {
     // Dummy HTTP server, does nothing useful for now
 
-    public class SimCAPSHTTPServer
+    public class SimCAPSHTTPServer : BaseHttpServer
     {
-        public Thread HTTPD;
-        public HttpListener Listener;
-        private Dictionary<string, IRestHandler> restHandlers = new Dictionary<string, IRestHandler>();
+        private Thread m_workerThread;
+        private HttpListener m_httpListener;
+        private Dictionary<string, IRestHandler> m_restHandlers = new Dictionary<string, IRestHandler>();
+        private IGridServer m_gridServer;
+        private int m_port;
 
-        public SimCAPSHTTPServer()
+        public SimCAPSHTTPServer(IGridServer gridServer, int port)
         {
             OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Starting up HTTP Server");
-            HTTPD = new Thread(new ThreadStart(StartHTTP));
-            HTTPD.Start();
+            m_workerThread = new Thread(new ThreadStart(StartHTTP));
+            m_workerThread.Start();
+            m_gridServer = gridServer;
+            m_port = port;
         }
 
         public void StartHTTP()
@@ -62,15 +67,15 @@ namespace OpenSim.CAPS
             try
             {
                 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("SimHttp.cs:StartHTTP() - Spawned main thread OK");
-                Listener = new HttpListener();
+                m_httpListener = new HttpListener();
 
-                Listener.Prefixes.Add("http://+:" + OpenSimRoot.Instance.Cfg.IPListenPort + "/");
-                Listener.Start();
+                m_httpListener.Prefixes.Add("http://+:" + m_port + "/");
+                m_httpListener.Start();
 
                 HttpListenerContext context;
                 while (true)
                 {
-                    context = Listener.GetContext();
+                    context = m_httpListener.GetContext();
                     ThreadPool.QueueUserWorkItem(new WaitCallback(HandleRequest), context);
                 }
             }
@@ -82,9 +87,9 @@ namespace OpenSim.CAPS
 
         public bool AddRestHandler(string path, IRestHandler handler)
         {
-            if (!this.restHandlers.ContainsKey(path))
+            if (!this.m_restHandlers.ContainsKey(path))
             {
-                this.restHandlers.Add(path, handler);
+                this.m_restHandlers.Add(path, handler);
                 return true;
             }
 
@@ -108,12 +113,12 @@ namespace OpenSim.CAPS
                         agent_data.lastname = (string)requestData["lastname"];
                         agent_data.AgentID = new LLUUID((string)requestData["agent_id"]);
                         agent_data.circuitcode = Convert.ToUInt32(requestData["circuit_code"]);
-                        if (OpenSimRoot.Instance.GridServers.GridServer.GetName() == "Remote")
+                        if (m_gridServer.GetName() == "Remote")
                         {
-                            ((RemoteGridBase)OpenSimRoot.Instance.GridServers.GridServer).agentcircuits.Add((uint)agent_data.circuitcode, agent_data);
+                            
+                            ((RemoteGridBase)m_gridServer).agentcircuits.Add((uint)agent_data.circuitcode, agent_data);
                         }
                         return "<?xml version=\"1.0\"?><methodResponse><params /></methodResponse>";
-                        break;
                 }
             }
             catch (Exception e)
@@ -135,9 +140,9 @@ namespace OpenSim.CAPS
             //path[0] should be empty so we are interested in path[1]
             if (path.Length > 1)
             {
-                if ((path[1] != "") && (this.restHandlers.ContainsKey(path[1])))
+                if ((path[1] != "") && (this.m_restHandlers.ContainsKey(path[1])))
                 {
-                    responseString = this.restHandlers[path[1]].HandleREST(requestBody, requestURL, requestMethod);
+                    responseString = this.m_restHandlers[path[1]].HandleREST(requestBody, requestURL, requestMethod);
                 }
             }
            
diff --git a/OpenSim.RegionServer/OpenSim.RegionServer.csproj b/OpenSim.RegionServer/OpenSim.RegionServer.csproj
index f376e04..1ce2837 100644
--- a/OpenSim.RegionServer/OpenSim.RegionServer.csproj
+++ b/OpenSim.RegionServer/OpenSim.RegionServer.csproj
@@ -1,13 +1,12 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <ProjectType>Local</ProjectType>
     <ProductVersion>8.0.50727</ProductVersion>
     <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{4171D545-81F5-4C64-AD29-6D7414C38181}</ProjectGuid>
+    <ProjectGuid>{ADD974E2-994C-4998-864E-4B54D8AD5F00}</ProjectGuid>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ApplicationIcon>
-    </ApplicationIcon>
+    <ApplicationIcon></ApplicationIcon>
     <AssemblyKeyContainerName>
     </AssemblyKeyContainerName>
     <AssemblyName>OpenSim.RegionServer</AssemblyName>
@@ -16,11 +15,9 @@
     <DefaultTargetSchema>IE50</DefaultTargetSchema>
     <DelaySign>false</DelaySign>
     <OutputType>Library</OutputType>
-    <AppDesignerFolder>
-    </AppDesignerFolder>
+    <AppDesignerFolder></AppDesignerFolder>
     <RootNamespace>OpenSim.RegionServer</RootNamespace>
-    <StartupObject>
-    </StartupObject>
+    <StartupObject></StartupObject>
     <FileUpgradeFlags>
     </FileUpgradeFlags>
   </PropertyGroup>
@@ -31,8 +28,7 @@
     <ConfigurationOverrideFile>
     </ConfigurationOverrideFile>
     <DefineConstants>TRACE;DEBUG</DefineConstants>
-    <DocumentationFile>
-    </DocumentationFile>
+    <DocumentationFile></DocumentationFile>
     <DebugSymbols>True</DebugSymbols>
     <FileAlignment>4096</FileAlignment>
     <Optimize>False</Optimize>
@@ -41,8 +37,7 @@
     <RemoveIntegerChecks>False</RemoveIntegerChecks>
     <TreatWarningsAsErrors>False</TreatWarningsAsErrors>
     <WarningLevel>4</WarningLevel>
-    <NoWarn>
-    </NoWarn>
+    <NoWarn></NoWarn>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <AllowUnsafeBlocks>False</AllowUnsafeBlocks>
@@ -51,8 +46,7 @@
     <ConfigurationOverrideFile>
     </ConfigurationOverrideFile>
     <DefineConstants>TRACE</DefineConstants>
-    <DocumentationFile>
-    </DocumentationFile>
+    <DocumentationFile></DocumentationFile>
     <DebugSymbols>False</DebugSymbols>
     <FileAlignment>4096</FileAlignment>
     <Optimize>True</Optimize>
@@ -61,58 +55,60 @@
     <RemoveIntegerChecks>False</RemoveIntegerChecks>
     <TreatWarningsAsErrors>False</TreatWarningsAsErrors>
     <WarningLevel>4</WarningLevel>
-    <NoWarn>
-    </NoWarn>
+    <NoWarn></NoWarn>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="System">
+    <Reference Include="System" >
       <HintPath>System.dll</HintPath>
       <Private>False</Private>
     </Reference>
-    <Reference Include="System.Data" />
-    <Reference Include="System.Xml">
+    <Reference Include="System.Xml" >
       <HintPath>System.Xml.dll</HintPath>
       <Private>False</Private>
     </Reference>
-    <Reference Include="libsecondlife.dll">
+    <Reference Include="libsecondlife.dll" >
       <HintPath>..\bin\libsecondlife.dll</HintPath>
       <Private>False</Private>
     </Reference>
-    <Reference Include="Axiom.MathLib.dll">
+    <Reference Include="Axiom.MathLib.dll" >
       <HintPath>..\bin\Axiom.MathLib.dll</HintPath>
       <Private>False</Private>
     </Reference>
-    <Reference Include="Db4objects.Db4o.dll">
+    <Reference Include="Db4objects.Db4o.dll" >
       <HintPath>..\bin\Db4objects.Db4o.dll</HintPath>
       <Private>False</Private>
     </Reference>
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\OpenSim.Framework\OpenSim.Framework.csproj">
+      <Name>OpenSim.Framework</Name>
+      <Project>{BD7866A4-04BA-47F0-905F-B2359118F5B2}</Project>
+      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
+			<Private>False</Private>
+    </ProjectReference>
     <ProjectReference Include="..\OpenSim.Framework.Console\OpenSim.Framework.Console.csproj">
       <Name>OpenSim.Framework.Console</Name>
-      <Project>{7AED7536-7D6B-4E28-8016-B5A554C663B4}</Project>
+      <Project>{4B0A7290-36C2-4C74-B9B4-07775B031CF2}</Project>
       <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
-      <Private>False</Private>
+			<Private>False</Private>
     </ProjectReference>
     <ProjectReference Include="..\OpenSim.Physics\Manager\OpenSim.Physics.Manager.csproj">
       <Name>OpenSim.Physics.Manager</Name>
-      <Project>{0AAA0EEB-1F2C-4B4B-9BFA-7C3E45BCD348}</Project>
+      <Project>{2EAB18A1-8187-4C79-9947-A671F9C007D9}</Project>
       <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
-      <Private>False</Private>
+			<Private>False</Private>
     </ProjectReference>
-    <ProjectReference Include="..\OpenSim.Framework\OpenSim.Framework.csproj">
-      <Name>OpenSim.Framework</Name>
-      <Project>{90D4F7AF-D75E-4DE8-A0E1-70CC242B31A1}</Project>
+    <ProjectReference Include="..\Servers\OpenSim.Servers.csproj">
+      <Name>OpenSim.Servers</Name>
+      <Project>{B9D6A5F0-3BD2-4161-8AF1-90C03295D4EE}</Project>
       <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
-      <Private>False</Private>
+			<Private>False</Private>
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
     <Compile Include="AgentAssetUpload.cs">
       <SubType>Code</SubType>
     </Compile>
-    <Compile Include="CAPS\AdminWebFront.cs" />
-    <Compile Include="CAPS\IRestHandler.cs" />
     <Compile Include="ConsoleCmds.cs">
       <SubType>Code</SubType>
     </Compile>
@@ -146,6 +142,12 @@
     <Compile Include="Assets\InventoryCache.cs">
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="CAPS\AdminWebFront.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="CAPS\IRestHandler.cs">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="CAPS\SimHttp.cs">
       <SubType>Code</SubType>
     </Compile>
@@ -193,4 +195,4 @@
     <PostBuildEvent>
     </PostBuildEvent>
   </PropertyGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/OpenSim.RegionServer/OpenSim.RegionServer.dll.build b/OpenSim.RegionServer/OpenSim.RegionServer.dll.build
index 4e44c4b..04e86bc 100644
--- a/OpenSim.RegionServer/OpenSim.RegionServer.dll.build
+++ b/OpenSim.RegionServer/OpenSim.RegionServer.dll.build
@@ -49,9 +49,10 @@
                 <include name="../bin/libsecondlife.dll" />
                 <include name="../bin/Axiom.MathLib.dll" />
                 <include name="../bin/Db4objects.Db4o.dll" />
-                <include name="../OpenSim.Framework.Console/${build.dir}/OpenSim.Framework.Console.dll" />
-                <include name="../OpenSim.Physics/Manager/${build.dir}/OpenSim.Physics.Manager.dll" />
-                <include name="../OpenSim.Framework/${build.dir}/OpenSim.Framework.dll" />
+                <include name="../bin/OpenSim.Framework.dll" />
+                <include name="../bin/OpenSim.Framework.Console.dll" />
+                <include name="../bin/OpenSim.Physics.Manager.dll" />
+                <include name="../bin/OpenSim.Servers.dll" />
             </references>
         </csc>
         <echo message="Copying from [${project::get-base-directory()}/${build.dir}/] to [${project::get-base-directory()}/../bin/" />
diff --git a/OpenSim.RegionServer/OpenSimMain.cs b/OpenSim.RegionServer/OpenSimMain.cs
index 7425fca..d6453e2 100644
--- a/OpenSim.RegionServer/OpenSimMain.cs
+++ b/OpenSim.RegionServer/OpenSimMain.cs
@@ -91,7 +91,7 @@ namespace OpenSim
 
             OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Main.cs:Startup() - We are " + OpenSimRoot.Instance.Cfg.RegionName + " at " + OpenSimRoot.Instance.Cfg.RegionLocX.ToString() + "," + OpenSimRoot.Instance.Cfg.RegionLocY.ToString());
             OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Initialising world");
-            OpenSimRoot.Instance.LocalWorld = new World();
+            OpenSimRoot.Instance.LocalWorld = new World(OpenSimRoot.Instance.ClientThreads, OpenSimRoot.Instance.Cfg.RegionHandle, OpenSimRoot.Instance.Cfg.RegionName, OpenSimRoot.Instance.Cfg);
             OpenSimRoot.Instance.LocalWorld.LandMap = OpenSimRoot.Instance.Cfg.LoadWorld();
 
             this.physManager = new OpenSim.Physics.Manager.PhysicsManager();
@@ -113,8 +113,8 @@ namespace OpenSim
             }
 
             OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Main.cs:Startup() - Starting CAPS HTTP server");
-            OpenSimRoot.Instance.HttpServer = new SimCAPSHTTPServer();
-            OpenSimRoot.Instance.HttpServer.AddRestHandler("Admin", new AdminWebFront("Admin"));
+            OpenSimRoot.Instance.HttpServer = new SimCAPSHTTPServer(OpenSimRoot.Instance.GridServers.GridServer, OpenSimRoot.Instance.Cfg.IPListenPort);
+            OpenSimRoot.Instance.HttpServer.AddRestHandler("Admin", new AdminWebFront("Admin", OpenSimRoot.Instance.LocalWorld));
 
             timer1.Enabled = true;
             timer1.Interval = 100;
@@ -172,7 +172,7 @@ namespace OpenSim
             { // new client
                 UseCircuitCodePacket useCircuit = (UseCircuitCodePacket)packet;
                 this.clientCircuits.Add(epSender, useCircuit.CircuitCode.Code);
-                SimClient newuser = new SimClient(epSender, useCircuit);
+                SimClient newuser = new SimClient(epSender, useCircuit, OpenSimRoot.Instance.LocalWorld, OpenSimRoot.Instance.ClientThreads, OpenSimRoot.Instance.AssetCache, OpenSimRoot.Instance.GridServers.GridServer, OpenSimRoot.Instance.Application, OpenSimRoot.Instance.InventoryCache, OpenSimRoot.Instance.Sandbox);
                 //OpenSimRoot.Instance.ClientThreads.Add(epSender, newuser);
                 OpenSimRoot.Instance.ClientThreads.Add(useCircuit.CircuitCode.Code, newuser);
             }
diff --git a/OpenSim.RegionServer/SimClient.cs b/OpenSim.RegionServer/SimClient.cs
index d463c75..698053d 100644
--- a/OpenSim.RegionServer/SimClient.cs
+++ b/OpenSim.RegionServer/SimClient.cs
@@ -71,6 +71,13 @@ namespace OpenSim
         private AgentAssetUpload UploadAssets;
         private LLUUID newAssetFolder = LLUUID.Zero;
         private bool debug = false;
+        private World m_world;
+        private Dictionary<uint, SimClient> m_clientThreads;
+        private AssetCache m_assetCache;
+        private IGridServer m_gridServer;
+        private OpenSimApplication m_application;
+        private InventoryCache m_inventoryCache;
+        private bool m_sandboxMode;
 
         private void ack_pack(Packet Pack)
         {
@@ -105,15 +112,15 @@ namespace OpenSim
             switch (Pack.Type)
             {
                 case PacketType.CompleteAgentMovement:
-                    ClientAvatar.CompleteMovement(OpenSimRoot.Instance.LocalWorld);
+                    ClientAvatar.CompleteMovement(m_world);
                     ClientAvatar.SendInitialPosition();
                     break;
                 case PacketType.RegionHandshakeReply:
-                    OpenSimRoot.Instance.LocalWorld.SendLayerData(this);
+                    m_world.SendLayerData(this);
                     break;
                 case PacketType.AgentWearablesRequest:
                     ClientAvatar.SendInitialAppearance();
-                    foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+                    foreach (SimClient client in m_clientThreads.Values)
                     {
                         if (client.AgentID != this.AgentID)
                         {
@@ -122,7 +129,7 @@ namespace OpenSim
                             client.ClientAvatar.SendAppearanceToOtherAgent(this);
                         }
                     }
-                    OpenSimRoot.Instance.LocalWorld.GetInitialPrims(this);
+                    m_world.GetInitialPrims(this);
                     break;
                 case PacketType.AgentIsNowWearing:
                     AgentIsNowWearingPacket wear = (AgentIsNowWearingPacket)Pack;
@@ -134,7 +141,7 @@ namespace OpenSim
                     this.ClientAvatar.SetAppearance(appear);
                     break;
                 case PacketType.ObjectAdd:
-                    OpenSimRoot.Instance.LocalWorld.AddNewPrim((ObjectAddPacket)Pack, this);
+                    m_world.AddNewPrim((ObjectAddPacket)Pack, this);
                     break;
                 case PacketType.ObjectLink:
                     OpenSim.Framework.Console.MainConsole.Instance.WriteLine(Pack.ToString());
@@ -146,7 +153,7 @@ namespace OpenSim
                     ObjectShapePacket shape = (ObjectShapePacket)Pack;
                     for (int i = 0; i < shape.ObjectData.Length; i++)
                     {
-                        foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values)
+                        foreach (Entity ent in m_world.Entities.Values)
                         {
                             if (ent.localid == shape.ObjectData[i].ObjectLocalID)
                             {
@@ -163,7 +170,7 @@ namespace OpenSim
                         if (multipleupdate.ObjectData[i].Type == 9) //change position
                         {
                             libsecondlife.LLVector3 pos = new LLVector3(multipleupdate.ObjectData[i].Data, 0);
-                            foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values)
+                            foreach (Entity ent in m_world.Entities.Values)
                             {
                                 if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID)
                                 {
@@ -177,7 +184,7 @@ namespace OpenSim
                         else if (multipleupdate.ObjectData[i].Type == 10)//rotation
                         {
                             libsecondlife.LLQuaternion rot = new LLQuaternion(multipleupdate.ObjectData[i].Data, 0, true);
-                            foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values)
+                            foreach (Entity ent in m_world.Entities.Values)
                             {
                                 if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID)
                                 {
@@ -190,7 +197,7 @@ namespace OpenSim
                         {
 
                             libsecondlife.LLVector3 scale = new LLVector3(multipleupdate.ObjectData[i].Data, 12);
-                            foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values)
+                            foreach (Entity ent in m_world.Entities.Values)
                             {
                                 if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID)
                                 {
@@ -204,13 +211,13 @@ namespace OpenSim
                     RequestImagePacket imageRequest = (RequestImagePacket)Pack;
                     for (int i = 0; i < imageRequest.RequestImage.Length; i++)
                     {
-                        OpenSimRoot.Instance.AssetCache.AddTextureRequest(this, imageRequest.RequestImage[i].Image);
+                        m_assetCache.AddTextureRequest(this, imageRequest.RequestImage[i].Image);
                     }
                     break;
                 case PacketType.TransferRequest:
                     //Console.WriteLine("OpenSimClient.cs:ProcessInPacket() - Got transfer request");
                     TransferRequestPacket transfer = (TransferRequestPacket)Pack;
-                    OpenSimRoot.Instance.AssetCache.AddAssetRequest(this, transfer);
+                    m_assetCache.AddAssetRequest(this, transfer);
                     break;
                 case PacketType.AgentUpdate:
                     ClientAvatar.HandleUpdate((AgentUpdatePacket)Pack);
@@ -230,18 +237,18 @@ namespace OpenSim
                     kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1];
                     kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock();
                     kill.ObjectData[0].ID = this.ClientAvatar.localid;
-                    foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+                    foreach (SimClient client in m_clientThreads.Values)
                     {
                         client.OutPacket(kill);
                     }
-                    OpenSimRoot.Instance.GridServers.GridServer.LogoutSession(this.SessionID, this.AgentID, this.CircuitCode);
-                    lock (OpenSimRoot.Instance.LocalWorld.Entities)
+                    m_gridServer.LogoutSession(this.SessionID, this.AgentID, this.CircuitCode);
+                    lock (m_world.Entities)
                     {
-                        OpenSimRoot.Instance.LocalWorld.Entities.Remove(this.AgentID);
+                        m_world.Entities.Remove(this.AgentID);
                     }
                     //need to do other cleaning up here too
-                    OpenSimRoot.Instance.ClientThreads.Remove(this.CircuitCode); //this.userEP);
-                    OpenSimRoot.Instance.Application.RemoveClientCircuit(this.CircuitCode);
+                    m_clientThreads.Remove(this.CircuitCode); //this.userEP);
+                    m_application.RemoveClientCircuit(this.CircuitCode);
                     this.ClientThread.Abort();
                     break;
                 case PacketType.ChatFromViewer:
@@ -258,7 +265,7 @@ namespace OpenSim
                     reply.ChatData.FromName = _enc.GetBytes(this.ClientAvatar.firstname + " " + this.ClientAvatar.lastname + "\0");
                     reply.ChatData.OwnerID = this.AgentID;
                     reply.ChatData.SourceID = this.AgentID;
-                    foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+                    foreach (SimClient client in m_clientThreads.Values)
                     {
                         client.OutPacket(reply);
                     }
@@ -267,7 +274,7 @@ namespace OpenSim
                     ObjectImagePacket imagePack = (ObjectImagePacket)Pack;
                     for (int i = 0; i < imagePack.ObjectData.Length; i++)
                     {
-                        foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values)
+                        foreach (Entity ent in m_world.Entities.Values)
                         {
                             if (ent.localid == imagePack.ObjectData[i].ObjectLocalID)
                             {
@@ -278,7 +285,7 @@ namespace OpenSim
                     break;
                 case PacketType.ObjectFlagUpdate:
                     ObjectFlagUpdatePacket flags = (ObjectFlagUpdatePacket)Pack;
-                    foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values)
+                    foreach (Entity ent in m_world.Entities.Values)
                     {
                         if (ent.localid == flags.AgentData.ObjectLocalID)
                         {
@@ -306,7 +313,7 @@ namespace OpenSim
                     break;
                 case PacketType.CreateInventoryFolder:
                     CreateInventoryFolderPacket invFolder = (CreateInventoryFolderPacket)Pack;
-                    OpenSimRoot.Instance.InventoryCache.CreateNewInventoryFolder(this, invFolder.FolderData.FolderID, (ushort)invFolder.FolderData.Type);
+                    m_inventoryCache.CreateNewInventoryFolder(this, invFolder.FolderData.FolderID, (ushort)invFolder.FolderData.Type);
                     Console.WriteLine(Pack.ToString());
                     break;
                 case PacketType.CreateInventoryItem:
@@ -320,11 +327,11 @@ namespace OpenSim
                 case PacketType.FetchInventory:
                     //Console.WriteLine("fetch item packet");
                     FetchInventoryPacket FetchInventory = (FetchInventoryPacket)Pack;
-                    OpenSimRoot.Instance.InventoryCache.FetchInventory(this, FetchInventory);
+                    m_inventoryCache.FetchInventory(this, FetchInventory);
                     break;
                 case PacketType.FetchInventoryDescendents:
                     FetchInventoryDescendentsPacket Fetch = (FetchInventoryDescendentsPacket)Pack;
-                    OpenSimRoot.Instance.InventoryCache.FetchInventoryDescendents(this, Fetch);
+                    m_inventoryCache.FetchInventoryDescendents(this, Fetch);
                     break;
                 case PacketType.UpdateInventoryItem:
                     UpdateInventoryItemPacket update = (UpdateInventoryItemPacket)Pack;
@@ -332,17 +339,17 @@ namespace OpenSim
                     {
                         if (update.InventoryData[i].TransactionID != LLUUID.Zero)
                         {
-                            AssetBase asset = OpenSimRoot.Instance.AssetCache.GetAsset(update.InventoryData[i].TransactionID.Combine(this.SecureSessionID));
+                            AssetBase asset = m_assetCache.GetAsset(update.InventoryData[i].TransactionID.Combine(this.SecureSessionID));
                             if (asset != null)
                             {
-                                OpenSimRoot.Instance.InventoryCache.UpdateInventoryItem(this, update.InventoryData[i].ItemID, asset);
+                                m_inventoryCache.UpdateInventoryItem(this, update.InventoryData[i].ItemID, asset);
                             }
                             else
                             {
                                 asset = this.UploadAssets.AddUploadToAssetCache(update.InventoryData[i].TransactionID);
                                 if (asset != null)
                                 {
-                                    OpenSimRoot.Instance.InventoryCache.UpdateInventoryItem(this, update.InventoryData[i].ItemID, asset);
+                                    m_inventoryCache.UpdateInventoryItem(this, update.InventoryData[i].ItemID, asset);
                                 }
                             }
                         }
@@ -350,7 +357,7 @@ namespace OpenSim
                     break;
                 case PacketType.ViewerEffect:
                     ViewerEffectPacket viewer = (ViewerEffectPacket)Pack;
-                    foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+                    foreach (SimClient client in m_clientThreads.Values)
                     {
                         if (client.AgentID != this.AgentID)
                         {
@@ -362,7 +369,7 @@ namespace OpenSim
                     break;
                 case PacketType.DeRezObject:
                     //OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Received DeRezObject packet");
-                    OpenSimRoot.Instance.LocalWorld.DeRezObject((DeRezObjectPacket)Pack, this);
+                    m_world.DeRezObject((DeRezObjectPacket)Pack, this);
                     break;
             }
         }
@@ -501,11 +508,11 @@ namespace OpenSim
                 if (Pack.Header.Zerocoded)
                 {
                     int packetsize = Helpers.ZeroEncode(sendbuffer, sendbuffer.Length, ZeroOutBuffer);
-                    OpenSimRoot.Instance.Application.SendPacketTo(ZeroOutBuffer, packetsize, SocketFlags.None, CircuitCode);//userEP);
+                    m_application.SendPacketTo(ZeroOutBuffer, packetsize, SocketFlags.None, CircuitCode);//userEP);
                 }
                 else
                 {
-                    OpenSimRoot.Instance.Application.SendPacketTo(sendbuffer, sendbuffer.Length, SocketFlags.None, CircuitCode); //userEP);
+                    m_application.SendPacketTo(sendbuffer, sendbuffer.Length, SocketFlags.None, CircuitCode); //userEP);
                 }
             }
             catch (Exception)
@@ -569,14 +576,22 @@ namespace OpenSim
             this.PacketQueue.Enqueue(item);
         }
 
-        public SimClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack)
+        public SimClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, World world, Dictionary<uint, SimClient> clientThreads, AssetCache assetCache, IGridServer gridServer, OpenSimApplication application, InventoryCache inventoryCache, bool sandboxMode)
         {
+            m_world = world;
+            m_clientThreads = clientThreads;
+            m_assetCache = assetCache;
+            m_gridServer = gridServer;
+            m_application = application;
+            m_inventoryCache = inventoryCache;
+            m_sandboxMode = sandboxMode;
+            
             OpenSim.Framework.Console.MainConsole.Instance.WriteLine("OpenSimClient.cs - Started up new client thread to handle incoming request");
             cirpack = initialcirpack;
             userEP = remoteEP;
             PacketQueue = new BlockingQueue<QueItem>();
 
-            this.UploadAssets = new AgentAssetUpload(this);
+            this.UploadAssets = new AgentAssetUpload(this, m_assetCache, m_inventoryCache );
             AckTimer = new System.Timers.Timer(500);
             AckTimer.Elapsed += new ElapsedEventHandler(AckTimer_Elapsed);
             AckTimer.Start();
@@ -608,14 +623,16 @@ namespace OpenSim
         protected virtual void InitNewClient()
         {
             OpenSim.Framework.Console.MainConsole.Instance.WriteLine("OpenSimClient.cs:InitNewClient() - Adding viewer agent to world");
-            OpenSimRoot.Instance.LocalWorld.AddViewerAgent(this);
-            world.Entity tempent = OpenSimRoot.Instance.LocalWorld.Entities[this.AgentID];
+            
+            m_world.AddViewerAgent(this);
+            world.Entity tempent = m_world.Entities[this.AgentID];
+            
             this.ClientAvatar = (world.Avatar)tempent;
         }
 
         protected virtual void AuthUser()
         {
-            AuthenticateResponse sessionInfo = OpenSimRoot.Instance.GridServers.GridServer.AuthenticateSession(cirpack.CircuitCode.SessionID, cirpack.CircuitCode.ID, cirpack.CircuitCode.Code);
+            AuthenticateResponse sessionInfo = m_gridServer.AuthenticateSession(cirpack.CircuitCode.SessionID, cirpack.CircuitCode.ID, cirpack.CircuitCode.Code);
             if (!sessionInfo.Authorised)
             {
                 //session/circuit not authorised
@@ -638,23 +655,23 @@ namespace OpenSim
                 }
 
                 // Create Inventory, currently only works for sandbox mode
-                if (OpenSimRoot.Instance.Sandbox)
+                if (m_sandboxMode)
                 {
                     if (sessionInfo.LoginInfo.InventoryFolder != null)
                     {
                         this.CreateInventory(sessionInfo.LoginInfo.InventoryFolder);
                         if (sessionInfo.LoginInfo.BaseFolder != null)
                         {
-                            OpenSimRoot.Instance.InventoryCache.CreateNewInventoryFolder(this, sessionInfo.LoginInfo.BaseFolder);
+                            m_inventoryCache.CreateNewInventoryFolder(this, sessionInfo.LoginInfo.BaseFolder);
                             this.newAssetFolder = sessionInfo.LoginInfo.BaseFolder;
-                            AssetBase[] inventorySet = OpenSimRoot.Instance.AssetCache.CreateNewInventorySet(this.AgentID);
+                            AssetBase[] inventorySet = m_assetCache.CreateNewInventorySet(this.AgentID);
                             if (inventorySet != null)
                             {
                                 for (int i = 0; i < inventorySet.Length; i++)
                                 {
                                     if (inventorySet[i] != null)
                                     {
-                                        OpenSimRoot.Instance.InventoryCache.AddNewInventoryItem(this, sessionInfo.LoginInfo.BaseFolder, inventorySet[i]);
+                                        m_inventoryCache.AddNewInventoryItem(this, sessionInfo.LoginInfo.BaseFolder, inventorySet[i]);
                                     }
                                 }
                             }
@@ -670,8 +687,8 @@ namespace OpenSim
         {
             AgentInventory inventory = new AgentInventory();
             inventory.AgentID = this.AgentID;
-            OpenSimRoot.Instance.InventoryCache.AddNewAgentsInventory(inventory);
-            OpenSimRoot.Instance.InventoryCache.CreateNewInventoryFolder(this, baseFolder);
+            m_inventoryCache.AddNewAgentsInventory(inventory);
+            m_inventoryCache.CreateNewInventoryFolder(this, baseFolder);
         }
     }
 }
diff --git a/OpenSim.RegionServer/UserServer/LocalUserProfileManager.cs b/OpenSim.RegionServer/UserServer/LocalUserProfileManager.cs
index 83e340b..eee1c3a 100644
--- a/OpenSim.RegionServer/UserServer/LocalUserProfileManager.cs
+++ b/OpenSim.RegionServer/UserServer/LocalUserProfileManager.cs
@@ -12,11 +12,15 @@ namespace OpenSim.UserServer
 {
     class LocalUserProfileManager : UserProfileManager 
     {
-        private IGridServer _gridServer;
+        private IGridServer m_gridServer;
+        private int m_port;
+        private string m_ipAddr;
 
-        public LocalUserProfileManager(IGridServer gridServer)
+        public LocalUserProfileManager(IGridServer gridServer, int simPort, string ipAddr)
 		{
-			_gridServer = gridServer;
+			m_gridServer = gridServer;
+            m_port = simPort;
+            m_ipAddr = ipAddr;
 		}
 
         public override void InitUserProfiles()
@@ -29,8 +33,8 @@ namespace OpenSim.UserServer
             uint circode = (uint)response["circuit_code"];
             theUser.AddSimCircuit(circode, LLUUID.Random());
             response["home"] = "{'region_handle':[r" + (997 * 256).ToString() + ",r" + (996 * 256).ToString() + "], 'position':[r" + theUser.homepos.X.ToString() + ",r" + theUser.homepos.Y.ToString() + ",r" + theUser.homepos.Z.ToString() + "], 'look_at':[r" + theUser.homelookat.X.ToString() + ",r" + theUser.homelookat.Y.ToString() + ",r" + theUser.homelookat.Z.ToString() + "]}";
-            response["sim_port"] = OpenSimRoot.Instance.Cfg.IPListenPort;
-            response["sim_ip"] = OpenSimRoot.Instance.Cfg.IPListenAddr;
+            response["sim_port"] = m_port;
+            response["sim_ip"] = m_ipAddr;
             response["region_y"] = (Int32)996 * 256;
             response["region_x"] = (Int32)997* 256;
 
@@ -67,9 +71,9 @@ namespace OpenSim.UserServer
             _login.InventoryFolder = new LLUUID((string)Inventory1["folder_id"]);
 
             //working on local computer if so lets add to the gridserver's list of sessions?
-            if (OpenSimRoot.Instance.GridServers.GridServer.GetName() == "Local")
+            if (m_gridServer.GetName() == "Local")
             {
-                ((LocalGridBase)this._gridServer).AddNewSession(_login);
+                ((LocalGridBase)this.m_gridServer).AddNewSession(_login);
             }
         }
     }
diff --git a/OpenSim.RegionServer/UserServer/LoginServer.cs b/OpenSim.RegionServer/UserServer/LoginServer.cs
index 86b098a..47af8a8 100644
--- a/OpenSim.RegionServer/UserServer/LoginServer.cs
+++ b/OpenSim.RegionServer/UserServer/LoginServer.cs
@@ -52,7 +52,7 @@ namespace OpenSim.UserServer
     /// </summary>
     public class LoginServer : LoginService , IUserServer
     {
-        private IGridServer _gridServer;
+        private IGridServer m_gridServer;
         private ushort _loginPort = 8080;
         public IPAddress clientAddress = IPAddress.Loopback;
         public IPAddress remoteAddress = IPAddress.Any;
@@ -63,10 +63,14 @@ namespace OpenSim.UserServer
         private string _mpasswd;
         private bool _needPasswd = false;
         private LocalUserProfileManager userManager;
+        private int m_simPort;
+        private string m_simAddr;
 
-        public LoginServer(IGridServer gridServer)
+        public LoginServer(IGridServer gridServer, string simAddr, int simPort)
         {
-            _gridServer = gridServer;
+            m_gridServer = gridServer;
+            m_simPort = simPort;
+            m_simAddr = simAddr;
         }
 
         // InitializeLogin: initialize the login 
@@ -89,7 +93,7 @@ namespace OpenSim.UserServer
             SR.Close();
             this._mpasswd = EncodePassword("testpass");
 
-            userManager = new LocalUserProfileManager(this._gridServer);
+            userManager = new LocalUserProfileManager(this.m_gridServer, m_simPort, m_simAddr );
             userManager.InitUserProfiles();
             userManager.SetKeys("", "", "", "Welcome to OpenSim");
 
@@ -289,8 +293,8 @@ namespace OpenSim.UserServer
             XmlRpcResponse response = (XmlRpcResponse)(new XmlRpcResponseDeserializer()).Deserialize(this._defaultResponse);
             Hashtable responseData = (Hashtable)response.Value;
 
-            responseData["sim_port"] = OpenSimRoot.Instance.Cfg.IPListenPort;
-            responseData["sim_ip"] = OpenSimRoot.Instance.Cfg.IPListenAddr;
+            responseData["sim_port"] = m_simPort;
+            responseData["sim_ip"] = m_simAddr;
             responseData["agent_id"] = Agent.ToStringHyphenated();
             responseData["session_id"] = Session.ToStringHyphenated();
             responseData["secure_session_id"]= secureSess.ToStringHyphenated();
@@ -327,9 +331,9 @@ namespace OpenSim.UserServer
             _login.InventoryFolder = InventoryFolderID;
 
             //working on local computer if so lets add to the gridserver's list of sessions?
-            if (OpenSimRoot.Instance.GridServers.GridServer.GetName() == "Local")
+            if (m_gridServer.GetName() == "Local")
             {
-                ((LocalGridBase)this._gridServer).AddNewSession(_login);
+                ((LocalGridBase)m_gridServer).AddNewSession(_login);
             }
 
             // forward the XML-RPC response to the client
diff --git a/OpenSim.RegionServer/world/Avatar.cs b/OpenSim.RegionServer/world/Avatar.cs
index 75f2cff..2ae9992 100644
--- a/OpenSim.RegionServer/world/Avatar.cs
+++ b/OpenSim.RegionServer/world/Avatar.cs
@@ -30,14 +30,23 @@ namespace OpenSim.world
         private byte[] visualParams;
         private AvatarWearable[] Wearables;
         private LLVector3 positionLastFrame = new LLVector3(0, 0, 0);
+        private World m_world;
+        private ulong m_regionHandle;
+        private Dictionary<uint, SimClient> m_clientThreads;
+        private string m_regionName;
 
-        public Avatar(SimClient TheClient)
+        public Avatar(SimClient TheClient, World world, string regionName, Dictionary<uint, SimClient> clientThreads, ulong regionHandle)
         {
+            m_world = world;
+            m_clientThreads = clientThreads;
+            m_regionName = regionName;
+            m_regionHandle = regionHandle;
+            
             OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Avatar.cs - Loading details from grid (DUMMY)");
             ControllingClient = TheClient;
-            localid = 8880000 + (OpenSimRoot.Instance.LocalWorld._localNumber++);
+            localid = 8880000 + (m_world._localNumber++);
             position = new LLVector3(100.0f, 100.0f, 30.0f);
-            position.Z = OpenSimRoot.Instance.LocalWorld.LandMap[(int)position.Y * 256 + (int)position.X] + 1;
+            position.Z = m_world.LandMap[(int)position.Y * 256 + (int)position.X] + 1;
             visualParams = new byte[218];
             for (int i = 0; i < 218; i++)
             {
@@ -52,7 +61,7 @@ namespace OpenSim.world
             this.Wearables[0].ItemID = LLUUID.Random();
 
             this.avatarAppearanceTexture = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005"));
-           
+
         }
 
         public PhysicsActor PhysActor
@@ -96,11 +105,11 @@ namespace OpenSim.world
                 //use CreateTerseBlock()
                 ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateTerseBlock();
                 ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
-                terse.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; // FIXME
+                terse.RegionData.RegionHandle = m_regionHandle; // FIXME
                 terse.RegionData.TimeDilation = 64096;
                 terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
                 terse.ObjectData[0] = terseBlock;
-                foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+                foreach (SimClient client in m_clientThreads.Values)
                 {
                     client.OutPacket(terse);
                 }
@@ -119,11 +128,11 @@ namespace OpenSim.world
                         //It has been a while since last update was sent so lets send one.
                         ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateTerseBlock();
                         ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
-                        terse.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; // FIXME
+                        terse.RegionData.RegionHandle = m_regionHandle; // FIXME
                         terse.RegionData.TimeDilation = 64096;
                         terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
                         terse.ObjectData[0] = terseBlock;
-                        foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+                        foreach (SimClient client in m_clientThreads.Values)
                         {
                             client.OutPacket(terse);
                         }
@@ -172,7 +181,7 @@ namespace OpenSim.world
             AgentMovementCompletePacket mov = new AgentMovementCompletePacket();
             mov.AgentData.SessionID = this.ControllingClient.SessionID;
             mov.AgentData.AgentID = this.ControllingClient.AgentID;
-            mov.Data.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle;
+            mov.Data.RegionHandle = m_regionHandle;
             // TODO - dynamicalise this stuff
             mov.Data.Timestamp = 1172750370;
             mov.Data.Position = new LLVector3(100f, 100f, 23f);
@@ -187,7 +196,7 @@ namespace OpenSim.world
             System.Text.Encoding _enc = System.Text.Encoding.ASCII;
             //send a objectupdate packet with information about the clients avatar
             ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
-            objupdate.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle;
+            objupdate.RegionData.RegionHandle = m_regionHandle;
             objupdate.RegionData.TimeDilation = 64096;
             objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
 
@@ -202,9 +211,9 @@ namespace OpenSim.world
             byte[] pb = pos2.GetBytes();
 
             Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length);
-            OpenSimRoot.Instance.LocalWorld._localNumber++;
+            m_world._localNumber++;
 
-            foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+            foreach (SimClient client in m_clientThreads.Values)
             {
                 client.OutPacket(objupdate);
                 if (client.AgentID != ControllingClient.AgentID)
@@ -241,7 +250,7 @@ namespace OpenSim.world
             System.Text.Encoding _enc = System.Text.Encoding.ASCII;
             //send a objectupdate packet with information about the clients avatar
             ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
-            objupdate.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle;
+            objupdate.RegionData.RegionHandle = m_regionHandle;
             objupdate.RegionData.TimeDilation = 64096;
             objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
 
@@ -293,7 +302,7 @@ namespace OpenSim.world
                 this.visualParams[i] = appear.VisualParam[i].ParamValue;
             }
 
-            foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+            foreach (SimClient client in m_clientThreads.Values)
             {
                 if (client.AgentID != ControllingClient.AgentID)
                 {
@@ -490,7 +499,7 @@ namespace OpenSim.world
             handshake.RegionInfo.SimAccess = 13;
             handshake.RegionInfo.WaterHeight = 20;
             handshake.RegionInfo.RegionFlags = 72458694;
-            handshake.RegionInfo.SimName = _enc.GetBytes(OpenSimRoot.Instance.Cfg.RegionName + "\0");
+            handshake.RegionInfo.SimName = _enc.GetBytes(m_regionName + "\0");
             handshake.RegionInfo.SimOwner = new LLUUID("00000000-0000-0000-0000-000000000000");
             handshake.RegionInfo.TerrainBase0 = new LLUUID("b8d3965a-ad78-bf43-699b-bff8eca6c975");
             handshake.RegionInfo.TerrainBase1 = new LLUUID("abb783e6-3e93-26c0-248a-247666855da3");
diff --git a/OpenSim.RegionServer/world/Primitive.cs b/OpenSim.RegionServer/world/Primitive.cs
index 6ff66a3..a185f0b 100644
--- a/OpenSim.RegionServer/world/Primitive.cs
+++ b/OpenSim.RegionServer/world/Primitive.cs
@@ -22,6 +22,9 @@ namespace OpenSim.world
         private PhysicsActor _physActor;
         private bool physicsEnabled = false;
         private bool physicstest = false; //just added for testing 
+        private Dictionary<uint, SimClient> m_clientThreads;
+        private ulong m_regionHandle;
+        private World m_world;
 
         public bool PhysicsEnabled
         {
@@ -65,10 +68,14 @@ namespace OpenSim.world
             }
         }
 
-        public Primitive()
+        public Primitive(Dictionary<uint, SimClient> clientThreads, ulong regionHandle, World world)
         {
             mesh_cutbegin = 0.0f;
             mesh_cutend = 1.0f;
+            
+            m_clientThreads = clientThreads;
+            m_regionHandle = regionHandle;
+            m_world = world;
         }
 
         public override Mesh getMesh()
@@ -99,7 +106,7 @@ namespace OpenSim.world
         {
             if (this.newPrimFlag)
             {
-                foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+                foreach (SimClient client in m_clientThreads.Values)
                 {
                     client.OutPacket(OurPacket);
                 }
@@ -108,11 +115,11 @@ namespace OpenSim.world
             else if (this.updateFlag)
             {
                 ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
-                terse.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; // FIXME
+                terse.RegionData.RegionHandle = m_regionHandle; // FIXME
                 terse.RegionData.TimeDilation = 64096;
                 terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
                 terse.ObjectData[0] = this.CreateImprovedBlock();
-                foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+                foreach (SimClient client in m_clientThreads.Values)
                 {
                     client.OutPacket(terse);
                 }
@@ -120,7 +127,7 @@ namespace OpenSim.world
             }
             else if (this.dirtyFlag)
             {
-                foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+                foreach (SimClient client in m_clientThreads.Values)
                 {
                     UpdateClient(client);
                 }
@@ -131,11 +138,11 @@ namespace OpenSim.world
                 if (this._physActor != null && this.physicsEnabled)
                 {
                     ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
-                    terse.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; // FIXME
+                    terse.RegionData.RegionHandle = m_regionHandle; // FIXME
                     terse.RegionData.TimeDilation = 64096;
                     terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
                     terse.ObjectData[0] = this.CreateImprovedBlock();
-                    foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+                    foreach (SimClient client in m_clientThreads.Values)
                     {
                         client.OutPacket(terse);
                     }
@@ -255,7 +262,7 @@ namespace OpenSim.world
         public void CreateFromPacket(ObjectAddPacket addPacket, LLUUID agentID, uint localID)
         {
             ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
-            objupdate.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle;
+            objupdate.RegionData.RegionHandle = m_regionHandle;
             objupdate.RegionData.TimeDilation = 64096;
 
             objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
@@ -323,7 +330,7 @@ namespace OpenSim.world
         {
             //need to clean this up as it shares a lot of code with CreateFromPacket()
             ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
-            objupdate.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle;
+            objupdate.RegionData.RegionHandle = m_regionHandle;
             objupdate.RegionData.TimeDilation = 64096;
             objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
 
@@ -480,7 +487,7 @@ namespace OpenSim.world
             this.primData.LocalID = this.localid;
             this.primData.Position = this.position;
             this.primData.Rotation = new LLQuaternion(this.rotation.x, this.rotation.y, this.rotation.z, this.rotation.w);
-            OpenSimRoot.Instance.LocalWorld.localStorage.StorePrim(this.primData);
+            m_world.localStorage.StorePrim(this.primData);
         }
     }
 
diff --git a/OpenSim.RegionServer/world/World.cs b/OpenSim.RegionServer/world/World.cs
index e6d8921..0d126e6 100644
--- a/OpenSim.RegionServer/world/World.cs
+++ b/OpenSim.RegionServer/world/World.cs
@@ -25,10 +25,19 @@ namespace OpenSim.world
     	private Random Rand = new Random();
     	private uint _primCount = 702000;
     	private int storageCount;
+	    private Dictionary<uint, SimClient> m_clientThreads;
+	    private ulong m_regionHandle;
+	    private string m_regionName;
+	    private SimConfig m_cfg;
 
-    	public World()
+	    public World(Dictionary<uint, SimClient> clientThreads, ulong regionHandle, string regionName, SimConfig cfg)
     	{
-    		OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating new entitities instance");
+            m_clientThreads = clientThreads;
+            m_regionHandle = regionHandle;
+            m_regionName = regionName;
+            m_cfg = cfg;
+	        
+	        OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating new entitities instance");
     		Entities = new Dictionary<libsecondlife.LLUUID, Entity>();
 
     		OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating LandMap");
@@ -115,9 +124,9 @@ namespace OpenSim.world
     		HeightmapGenHills hills = new HeightmapGenHills();
     		this.LandMap = hills.GenerateHeightmap(200, 4.0f, 80.0f, false);
     		this.phyScene.SetTerrain(this.LandMap);
-    		OpenSimRoot.Instance.Cfg.SaveMap(this.LandMap);
+    		m_cfg.SaveMap(this.LandMap);
     		
-    		foreach(SimClient client in OpenSimRoot.Instance.ClientThreads.Values) {
+    		foreach(SimClient client in m_clientThreads.Values) {
     			this.SendLayerData(client);
     		}
     	}
@@ -134,7 +143,7 @@ namespace OpenSim.world
     			_primCount = prim.LocalID + 1;
     		}
     		OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: PrimFromStorage() - Reloading prim (localId "+ prim.LocalID+ " ) from storage");
-    		Primitive nPrim = new Primitive();
+    		Primitive nPrim = new Primitive(m_clientThreads, m_regionHandle, this);
     		nPrim.CreateFromStorage(prim);
     		this.Entities.Add(nPrim.uuid, nPrim);
     	}
@@ -175,7 +184,7 @@ namespace OpenSim.world
 
     	public void AddViewerAgent(SimClient AgentClient) {
     		OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Creating new avatar for remote viewer agent");
-    		Avatar NewAvatar = new Avatar(AgentClient);
+    		Avatar NewAvatar = new Avatar(AgentClient, this, m_regionName, m_clientThreads, m_regionHandle );
     		OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Adding new avatar to world");
     		OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Starting RegionHandshake ");
     		NewAvatar.SendRegionHandshake(this);
@@ -187,7 +196,7 @@ namespace OpenSim.world
     	public void AddNewPrim(ObjectAddPacket addPacket, SimClient AgentClient)
     	{
     		OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: AddNewPrim() - Creating new prim");
-    		Primitive prim = new Primitive();
+            Primitive prim = new Primitive(m_clientThreads, m_regionHandle, this );
     		prim.CreateFromPacket(addPacket, AgentClient.AgentID, this._primCount);
     		PhysicsVector pVec = new PhysicsVector(prim.position.X, prim.position.Y, prim.position.Z);
     		PhysicsVector pSize = new PhysicsVector( 0.255f, 0.255f, 0.255f);
@@ -210,7 +219,7 @@ namespace OpenSim.world
 		foreach( DeRezObjectPacket.ObjectDataBlock Data in DeRezPacket.ObjectData )
 		{
 			//OpenSim.Framework.Console.MainConsole.Instance.WriteLine("LocalID:" + Data.ObjectLocalID.ToString());
-			foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values)
+			foreach (Entity ent in this.Entities.Values)
 			{
 				if (ent.localid == Data.ObjectLocalID)
 				{
@@ -220,7 +229,7 @@ namespace OpenSim.world
 					kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1];
 					kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock();
 					kill.ObjectData[0].ID = ent.localid;
-					foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+					foreach (SimClient client in m_clientThreads.Values)
 					{
 						client.OutPacket(kill);
 					}
@@ -234,9 +243,9 @@ namespace OpenSim.world
 		}
 		foreach( libsecondlife.LLUUID uuid in DeRezEnts )
 		{
-			lock (OpenSimRoot.Instance.LocalWorld.Entities)
+			lock (this.Entities)
 			{
-				OpenSimRoot.Instance.LocalWorld.Entities.Remove(uuid);
+				this.Entities.Remove(uuid);
 			}
 		}
 		
-- 
cgit v1.1