﻿Index: Region.cs
===================================================================
--- Region.cs	(revision 167)
+++ Region.cs	(working copy)
@@ -162,7 +162,7 @@
                public void RezObject(PrimObject prim, LLVector3 position, LLVector3 avatarPosition)
                {
                        byte[] textureEntry = new byte[40];
-                       Array.Copy(prim.Texture.Data, textureEntry, 16);
+                       Array.Copy(((LLUUID)prim.TextureArray[0]).Data, textureEntry, 16);
                        textureEntry[35] = 0xe0; // No clue
 
                        Packet objectAdd = libsecondlife.Packets.Object.ObjectAdd(Client.Protocol, Client.Network.AgentID,
Index: Prims.cs
===================================================================
--- Prims.cs	(revision 167)
+++ Prims.cs	(working copy)
@@ -23,11 +23,12 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
  * POSSIBILITY OF SUCH DAMAGE.
  */
-
+using System.Runtime.Serialization;
 using System;
-
+using System.Collections;
 namespace libsecondlife
 {
+    [Serializable]
 	public class PrimObject
 	{
 		public int PathTwistBegin = 0;
@@ -42,7 +43,7 @@
 		public LLUUID UUID = new LLUUID();
 		public uint ID = 0;
 		public LLUUID GroupID = new LLUUID();
-		public uint Material = 0;
+		public int Material = 0;
 		public string Name = "";
 		public string Description;
 		public float PathShearX = 0;
@@ -54,17 +55,161 @@
 		public uint PathCurve = 0;
 		public LLVector3 Scale = new LLVector3();
 		public int PathTwist = 0;
-		public LLUUID Texture = new LLUUID(); // TODO: Add multi-texture support
+        public ArrayList TextureArray;
 		public uint ProfileHollow = 0;
 		public float PathRevolutions = 0;
 		public LLQuaternion Rotation = new LLQuaternion();
-		public uint State;
-		
+		public int State;
+        public uint ParentID;
+        public LLUUID OwnerID;
+        public Single Radius;
+        public uint JointType;
+        public uint PCode;
+        public uint Flags;
+        public uint UpdateFlags;
+        public uint CRC;
+        public LLUUID Sound;
+        public Single Gain;
+        public uint ClickAction;
 		public PrimObject(LLUUID texture)
 		{
-			Texture = texture;
+            TextureArray = new ArrayList();
+            TextureArray.Add(texture);
 		}
+        
 
+        public PrimObject(Packet objectUpdatePacket)
+        {
+            TextureArray = new ArrayList();
+            ArrayList blocks = objectUpdatePacket.Blocks();
+            Console.WriteLine("-------------BEGIN PRIMPACKET-------------");
+            foreach (Block block in blocks)
+            {
+                    foreach (Field field in block.Fields)
+                    {
+                        //Console.WriteLine(field.Layout.Name + " " + field.Data.GetType().ToString());
+                        switch(field.Layout.Name){
+                            case "ID":
+                                ID = (UInt32)field.Data;
+                                break;
+                            case "State":
+                                State = (byte)field.Data;
+                                break;
+                            case "FullID":
+                                UUID = (LLUUID)field.Data;
+                                break;
+                            case "Material":
+                                Material = (byte)(field.Data);
+                                break;
+                            case "PathCurve":
+                                PathCurve = (byte)field.Data;
+                                break;
+                            case "ProfileCurve":
+                                ProfileCurve = (byte)field.Data;
+                                break;
+                            case "PathBegin":
+                                PathBegin = (byte)field.Data;
+                                break;
+                            case "PathEnd":
+                                PathEnd = (byte)field.Data;
+                                break;
+                            case "PathScaleX":
+                                PathScaleX = (float)((byte)field.Data);
+                                break;
+                            case "PathScaleY":
+                                PathScaleY = (float)((byte)field.Data);
+                                break;
+                            case "PathShearX":
+                                PathShearX = (float)((byte)field.Data);
+                                break;
+                            case "PathShearY":
+                                PathShearY = (float)((byte)field.Data);
+                                break;
+                            case "PathTwist":
+                                PathTwist = (sbyte)field.Data;
+                                break;
+                            case "PathRadiusOffset":
+                                PathRadiusOffset = (float)((sbyte)field.Data);
+                                break;
+                            case "PathTaperX":
+                                PathTaperX = (float)((sbyte)field.Data);
+                                break;
+                            case "PathTaperY":
+                                PathTaperY = (float)((sbyte)field.Data);
+                                break;
+                            case "PathRevolutions":
+                                PathRevolutions = (float)((byte)field.Data);
+                                break;
+                            case "PathSkew":
+                                PathSkew = (float)((sbyte)field.Data);
+                                break;
+                            case "ProfileBegin":
+                                ProfileBegin = (float)((byte)field.Data);
+                                break;
+                            case "ProfileEnd":
+                                ProfileEnd = (float)((byte)field.Data);
+                                break;
+                            case "ProfileHollow":
+                                ProfileHollow = (byte)field.Data;
+                                break;
+                            case "NameValue":
+                                Console.WriteLine("[debug] Name: " + Helpers.FieldToString(field.Data));
+                                Name = Helpers.FieldToString(field.Data);
+                                break;
+                            case "Texture":
+                                TextureArray.Add((LLUUID)field.Data);
+                                break;
+                            case "ParentID":
+                                ParentID = (uint)field.Data;
+                                break;
+                            case "OwnerID":
+                                OwnerID = (LLUUID)field.Data;
+                                break;
+                            case "Radius":
+                                Radius = (Single)field.Data;
+                                break;
+                            case "JointType":
+                                JointType = (byte)field.Data;
+                                break;
+                            case "PCode":
+                                PCode = (byte)field.Data;
+                                break;
+                            case "Scale":
+                                Scale = (LLVector3)field.Data;
+                                break;
+                            case "Flags":
+                                Flags = (byte)field.Data;
+                                break;
+                            case "UpdateFlags":
+                                UpdateFlags = (uint)field.Data;
+                                break;
+                            case "PathTwistBegin":
+                                PathTwistBegin = (sbyte)field.Data;
+                                break;
+                            case "CRC":
+                                CRC = (uint)field.Data;
+                                break;
+                            case "ClickAction":
+                                ClickAction = (byte)field.Data;
+                                break;
+                            case "Gain":
+                                Gain = (Single)field.Data;
+                                break;
+                            case "Sound":
+                                Sound = (LLUUID)field.Data;
+                                break;
+                            default:
+                                //Console.WriteLine("Field Not Handled: " + field.Layout.Name + " " + field.Data.GetType().ToString());
+                                break;
+                        }
+                    }
+            }
+            Console.WriteLine("-------------END PRIMPACKET-------------");
+        }
+        public override string ToString()
+        {
+            return "PrimObject: " + ID + " " + Name;
+        }
 		public static byte PathScaleByte(float pathScale)
 		{
 			// Y = 100 + 100X
Index: Types.cs
===================================================================
--- Types.cs	(revision 167)
+++ Types.cs	(working copy)
@@ -29,6 +29,7 @@
 
 namespace libsecondlife
 {
+    [Serializable]
 	public class U64
 	{
 		public uint[] Data;
@@ -122,7 +123,7 @@
 			return u64.ToString();
 		}
 	}
-
+    [Serializable]
 	public class LLUUID
 	{
 		private byte[] data = null;
@@ -258,7 +259,7 @@
 			return uuid;
 		}
 	}
-
+    [Serializable]
 	public class LLVector3
 	{
 		public float X;
@@ -352,7 +353,7 @@
 			return !(lhs == rhs);
 		}
 	}
-
+    [Serializable]
 	public class LLVector3d
 	{
 		public double X;
@@ -406,7 +407,7 @@
 			return X.ToString() + " " + Y.ToString() + " " + Z.ToString();
 		}
 	}
-
+    [Serializable]
 	public class LLVector4
 	{
 		public float X;
@@ -458,7 +459,7 @@
 			return X.ToString() + " " + Y.ToString() + " " + Z.ToString() + " " + S.ToString();
 		}
 	}
-
+    [Serializable]
 	public class LLQuaternion
 	{
 		public float X;
