diff --git a/ANX.Framework.Content.Pipeline/ANX.Framework.Content.Pipeline.csproj b/ANX.Framework.Content.Pipeline/ANX.Framework.Content.Pipeline.csproj
index d6a9e3aa..eecf9ec0 100644
--- a/ANX.Framework.Content.Pipeline/ANX.Framework.Content.Pipeline.csproj
+++ b/ANX.Framework.Content.Pipeline/ANX.Framework.Content.Pipeline.csproj
@@ -184,10 +184,20 @@
+
+
+
+
+
+
+
+
+
+
@@ -213,6 +223,7 @@
+
diff --git a/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/AlphaTestEffectWriter.cs b/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/AlphaTestEffectWriter.cs
new file mode 100644
index 00000000..f62dc929
--- /dev/null
+++ b/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/AlphaTestEffectWriter.cs
@@ -0,0 +1,44 @@
+using ANX.Framework.Content.Pipeline.Graphics;
+using ANX.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+
+namespace ANX.Framework.Content.Pipeline.Serialization.Compiler.GraphicTypeWriters
+{
+ [ContentTypeWriter]
+ internal class AlphaTestEffectWriter : BuiltinTypeWriter
+ {
+ protected override Assembly RuntimeAssembly
+ {
+ get
+ {
+ return typeof(AlphaTestEffect).Assembly;
+ }
+ }
+
+ protected internal override void Write(ContentWriter output, AlphaTestMaterialContent value)
+ {
+ if (output == null)
+ throw new ArgumentNullException("output");
+
+ if (value == null)
+ throw new ArgumentNullException("value");
+
+ //Default values fetched from AlphaTestEffect class
+ output.WriteExternalReference(value.Texture);
+ output.Write((int)value.AlphaFunction.GetValueOrDefault(CompareFunction.Greater));
+ output.Write(value.ReferenceAlpha.GetValueOrDefault(0));
+ output.Write(value.DiffuseColor.GetValueOrDefault(Vector3.One));
+ output.Write(value.Alpha.GetValueOrDefault(1f));
+ output.Write(value.VertexColorEnabled.GetValueOrDefault(false));
+ }
+
+ public override string GetRuntimeType(TargetPlatform targetPlatform)
+ {
+ return ContentTypeWriter.GetStrongTypeName(typeof(AlphaTestEffect), targetPlatform);
+ }
+ }
+}
diff --git a/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/BasicEffectWriter.cs b/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/BasicEffectWriter.cs
new file mode 100644
index 00000000..da1c97cd
--- /dev/null
+++ b/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/BasicEffectWriter.cs
@@ -0,0 +1,45 @@
+using ANX.Framework.Content.Pipeline.Graphics;
+using ANX.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+
+namespace ANX.Framework.Content.Pipeline.Serialization.Compiler.GraphicTypeWriters
+{
+ [ContentTypeWriter]
+ internal class BasicEffectWriter : BuiltinTypeWriter
+ {
+ protected override Assembly RuntimeAssembly
+ {
+ get
+ {
+ return typeof(BasicEffect).Assembly;
+ }
+ }
+
+ protected internal override void Write(ContentWriter output, BasicMaterialContent value)
+ {
+ if (output == null)
+ throw new ArgumentNullException("output");
+
+ if (value == null)
+ throw new ArgumentNullException("value");
+
+ //Default values fetched from BasicEffect class
+ output.WriteExternalReference(value.Texture);
+ output.Write(value.DiffuseColor.GetValueOrDefault(Vector3.One));
+ output.Write(value.EmissiveColor.GetValueOrDefault(Vector3.Zero));
+ output.Write(value.SpecularColor.GetValueOrDefault(Vector3.One));
+ output.Write(value.SpecularPower.GetValueOrDefault(16f));
+ output.Write(value.Alpha.GetValueOrDefault(1f));
+ output.Write(value.VertexColorEnabled.GetValueOrDefault(false));
+ }
+
+ public override string GetRuntimeType(TargetPlatform targetPlatform)
+ {
+ return ContentTypeWriter.GetStrongTypeName(typeof(BasicEffect), targetPlatform);
+ }
+ }
+}
diff --git a/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/DualTextureEffectWriter.cs b/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/DualTextureEffectWriter.cs
new file mode 100644
index 00000000..947e239c
--- /dev/null
+++ b/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/DualTextureEffectWriter.cs
@@ -0,0 +1,43 @@
+using ANX.Framework.Content.Pipeline.Graphics;
+using ANX.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+
+namespace ANX.Framework.Content.Pipeline.Serialization.Compiler.GraphicTypeWriters
+{
+ [ContentTypeWriter]
+ internal class DualTextureEffectWriter : BuiltinTypeWriter
+ {
+ protected override Assembly RuntimeAssembly
+ {
+ get
+ {
+ return typeof(DualTextureEffect).Assembly;
+ }
+ }
+
+ protected internal override void Write(ContentWriter output, DualTextureMaterialContent value)
+ {
+ if (output == null)
+ throw new ArgumentNullException("output");
+
+ if (value == null)
+ throw new ArgumentNullException("value");
+
+ //Default values fetched from DualTextureEffect class
+ output.WriteExternalReference(value.Texture);
+ output.WriteExternalReference(value.Texture2);
+ output.Write(value.DiffuseColor.GetValueOrDefault(Vector3.One));
+ output.Write(value.Alpha.GetValueOrDefault(1f));
+ output.Write(value.VertexColorEnabled.GetValueOrDefault(false));
+ }
+
+ public override string GetRuntimeType(TargetPlatform targetPlatform)
+ {
+ return ContentTypeWriter.GetStrongTypeName(typeof(DualTextureEffect), targetPlatform);
+ }
+ }
+}
diff --git a/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/EffectMaterialWriter.cs b/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/EffectMaterialWriter.cs
new file mode 100644
index 00000000..ad7f9531
--- /dev/null
+++ b/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/EffectMaterialWriter.cs
@@ -0,0 +1,59 @@
+using ANX.Framework.Content.Pipeline.Graphics;
+using ANX.Framework.Content.Pipeline.Processors;
+using ANX.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+
+namespace ANX.Framework.Content.Pipeline.Serialization.Compiler.GraphicTypeWriters
+{
+ [ContentTypeWriter]
+ internal class EffectMaterialWriter : BuiltinTypeWriter
+ {
+ protected override Assembly RuntimeAssembly
+ {
+ get
+ {
+ return typeof(EffectMaterial).Assembly;
+ }
+ }
+
+ protected internal override void Write(ContentWriter output, EffectMaterialContent value)
+ {
+ if (output == null)
+ throw new ArgumentNullException("output");
+
+ if (value == null)
+ throw new ArgumentNullException("value");
+
+ if (value.CompiledEffect == null)
+ throw new InvalidContentException("The compiled effect is null", value.Identity);
+
+
+ output.WriteExternalReference(value.CompiledEffect);
+
+ Dictionary collectedData = new Dictionary();
+ foreach (var pair in value.OpaqueData)
+ {
+ if (!(pair.Key == "Effect") && !(pair.Key == "CompiledEffect"))
+ {
+ collectedData.Add(pair.Key, pair.Value);
+ }
+ }
+
+ foreach (var pair in value.Textures)
+ {
+ collectedData.Add(pair.Key, pair.Value);
+ }
+
+ output.WriteObject>(collectedData);
+ }
+
+ public override string GetRuntimeType(TargetPlatform targetPlatform)
+ {
+ return ContentTypeWriter.GetStrongTypeName(typeof(EffectMaterial), targetPlatform);
+ }
+ }
+}
diff --git a/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/EnvironmentMapEffectWriter.cs b/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/EnvironmentMapEffectWriter.cs
new file mode 100644
index 00000000..5e5e7778
--- /dev/null
+++ b/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/EnvironmentMapEffectWriter.cs
@@ -0,0 +1,46 @@
+using ANX.Framework.Content.Pipeline.Graphics;
+using ANX.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+
+namespace ANX.Framework.Content.Pipeline.Serialization.Compiler.GraphicTypeWriters
+{
+ [ContentTypeWriter]
+ internal class EnvironmentMapEffectWriter : BuiltinTypeWriter
+ {
+ protected override Assembly RuntimeAssembly
+ {
+ get
+ {
+ return typeof(EnvironmentMapEffect).Assembly;
+ }
+ }
+
+ protected internal override void Write(ContentWriter output, EnvironmentMapMaterialContent value)
+ {
+ if (output == null)
+ throw new ArgumentNullException("output");
+
+ if (value == null)
+ throw new ArgumentNullException("value");
+
+ //Default values fetched from EnvironmentMapEffect class
+ output.WriteExternalReference(value.Texture);
+ output.WriteExternalReference(value.EnvironmentMap);
+ output.Write(value.EnvironmentMapAmount.GetValueOrDefault(1f));
+ output.Write(value.EnvironmentMapSpecular.GetValueOrDefault(Vector3.Zero));
+ output.Write(value.FresnelFactor.GetValueOrDefault(1f));
+ output.Write(value.DiffuseColor.GetValueOrDefault(Vector3.One));
+ output.Write(value.EmissiveColor.GetValueOrDefault(Vector3.Zero));
+ output.Write(value.Alpha.GetValueOrDefault(1f));
+ }
+
+ public override string GetRuntimeType(TargetPlatform targetPlatform)
+ {
+ return ContentTypeWriter.GetStrongTypeName(typeof(EnvironmentMapEffect), targetPlatform);
+ }
+ }
+}
diff --git a/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/IndexBufferWriter.cs b/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/IndexBufferWriter.cs
new file mode 100644
index 00000000..06a62375
--- /dev/null
+++ b/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/IndexBufferWriter.cs
@@ -0,0 +1,56 @@
+using ANX.Framework.Content.Pipeline.Graphics;
+using ANX.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+
+namespace ANX.Framework.Content.Pipeline.Serialization.Compiler.GraphicTypeWriters
+{
+ [ContentTypeWriter]
+ internal class IndexBufferWriter : BuiltinTypeWriter
+ {
+ protected override Assembly RuntimeAssembly
+ {
+ get
+ {
+ return typeof(IndexBuffer).Assembly;
+ }
+ }
+
+ protected internal override void Write(ContentWriter output, IndexCollection value)
+ {
+ if (output == null)
+ throw new ArgumentNullException("output");
+
+ if (value == null)
+ throw new ArgumentNullException("value");
+
+ bool are16BitIndices = true;
+ for (int i = value.Count - 1; i >= 0; i--)
+ {
+ if (value[i] > ushort.MaxValue)
+ {
+ are16BitIndices = false;
+ break;
+ }
+ }
+
+ output.Write(are16BitIndices);
+ output.Write(value.Count * (are16BitIndices ? 2 : 4));
+ foreach (int index in value)
+ {
+ if (are16BitIndices)
+ output.Write((ushort)index);
+ else
+ output.Write(index);
+ }
+ }
+
+ public override string GetRuntimeType(TargetPlatform targetPlatform)
+ {
+ return ContentTypeWriter.GetStrongTypeName(typeof(IndexBuffer), targetPlatform);
+ }
+ }
+}
diff --git a/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/ModelWriter.cs b/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/ModelWriter.cs
new file mode 100644
index 00000000..71606e43
--- /dev/null
+++ b/ANX.Framework.Content.Pipeline/Serialization/Compiler/GraphicTypeWriters/ModelWriter.cs
@@ -0,0 +1,124 @@
+using ANX.Framework.Content.Pipeline.Graphics;
+using ANX.Framework.Content.Pipeline.Processors;
+using ANX.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+
+namespace ANX.Framework.Content.Pipeline.Serialization.Compiler.GraphicTypeWriters
+{
+ [ContentTypeWriter]
+ internal class ModelWriter : BuiltinTypeWriter
+ {
+ protected override Assembly RuntimeAssembly
+ {
+ get
+ {
+ return typeof(Model).Assembly;
+ }
+ }
+
+ protected internal override void Write(ContentWriter output, ModelContent value)
+ {
+ if (output == null)
+ throw new ArgumentNullException("output");
+
+ if (value == null)
+ throw new ArgumentNullException("value");
+
+ this.WriteBones(output, value);
+ this.WriteMeshes(output, value);
+ this.WriteBoneIndex(output, value, value.Root);
+ output.WriteObject