diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..a4bc04c
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/DAE/ColladaXna"]
+	path = Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/DAE/ColladaXna
+	url = https://github.com/gwenael-hagenmuller/ColladaXna.git
diff --git a/Exporters/ExportToBabylon.sln b/Exporters/ExportToBabylon.sln
new file mode 100644
index 0000000..ed5d608
--- /dev/null
+++ b/Exporters/ExportToBabylon.sln
@@ -0,0 +1,94 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BabylonExport.Core", "XNA - OBJ\BabylonExport.Core\BabylonExport.Core.csproj", "{CE70B051-FB63-420D-80C0-51CC03A214BA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BabylonExport.Interface", "XNA - OBJ\BabylonExport.Interface\BabylonExport.Interface.csproj", "{DEC52846-FFCB-4A66-9F13-64F65B61EDBA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BabylonExport", "XNA - OBJ\BabylonExport\BabylonExport.csproj", "{1E0A8EB2-7022-42E2-8970-F0374188A09D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColladaXnaImporter", "XNA - OBJ\BabylonExport.Core\Exporters\ThroughXNA\DAE\ColladaXna\ColladaXnaImporter\ColladaXnaImporter.csproj", "{625E5D7F-86F6-4961-89D0-3835BF261ACC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColladaXnaBase", "XNA - OBJ\BabylonExport.Core\Exporters\ThroughXNA\DAE\ColladaXna\ColladaXnaBase\ColladaXnaBase.csproj", "{65FE2973-B4E6-49DE-8F57-55490D4B4FD4}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|Mixed Platforms = Debug|Mixed Platforms
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|Mixed Platforms = Release|Mixed Platforms
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{CE70B051-FB63-420D-80C0-51CC03A214BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CE70B051-FB63-420D-80C0-51CC03A214BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CE70B051-FB63-420D-80C0-51CC03A214BA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{CE70B051-FB63-420D-80C0-51CC03A214BA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{CE70B051-FB63-420D-80C0-51CC03A214BA}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{CE70B051-FB63-420D-80C0-51CC03A214BA}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{CE70B051-FB63-420D-80C0-51CC03A214BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CE70B051-FB63-420D-80C0-51CC03A214BA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CE70B051-FB63-420D-80C0-51CC03A214BA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{CE70B051-FB63-420D-80C0-51CC03A214BA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{CE70B051-FB63-420D-80C0-51CC03A214BA}.Release|x64.ActiveCfg = Release|Any CPU
+		{CE70B051-FB63-420D-80C0-51CC03A214BA}.Release|x86.ActiveCfg = Release|Any CPU
+		{DEC52846-FFCB-4A66-9F13-64F65B61EDBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{DEC52846-FFCB-4A66-9F13-64F65B61EDBA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{DEC52846-FFCB-4A66-9F13-64F65B61EDBA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{DEC52846-FFCB-4A66-9F13-64F65B61EDBA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{DEC52846-FFCB-4A66-9F13-64F65B61EDBA}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{DEC52846-FFCB-4A66-9F13-64F65B61EDBA}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{DEC52846-FFCB-4A66-9F13-64F65B61EDBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{DEC52846-FFCB-4A66-9F13-64F65B61EDBA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DEC52846-FFCB-4A66-9F13-64F65B61EDBA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{DEC52846-FFCB-4A66-9F13-64F65B61EDBA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{DEC52846-FFCB-4A66-9F13-64F65B61EDBA}.Release|x64.ActiveCfg = Release|Any CPU
+		{DEC52846-FFCB-4A66-9F13-64F65B61EDBA}.Release|x86.ActiveCfg = Release|Any CPU
+		{1E0A8EB2-7022-42E2-8970-F0374188A09D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1E0A8EB2-7022-42E2-8970-F0374188A09D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1E0A8EB2-7022-42E2-8970-F0374188A09D}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{1E0A8EB2-7022-42E2-8970-F0374188A09D}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{1E0A8EB2-7022-42E2-8970-F0374188A09D}.Debug|x64.ActiveCfg = Debug|x64
+		{1E0A8EB2-7022-42E2-8970-F0374188A09D}.Debug|x64.Build.0 = Debug|x64
+		{1E0A8EB2-7022-42E2-8970-F0374188A09D}.Debug|x86.ActiveCfg = Debug|x86
+		{1E0A8EB2-7022-42E2-8970-F0374188A09D}.Debug|x86.Build.0 = Debug|x86
+		{1E0A8EB2-7022-42E2-8970-F0374188A09D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{1E0A8EB2-7022-42E2-8970-F0374188A09D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{1E0A8EB2-7022-42E2-8970-F0374188A09D}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{1E0A8EB2-7022-42E2-8970-F0374188A09D}.Release|Mixed Platforms.Build.0 = Release|x86
+		{1E0A8EB2-7022-42E2-8970-F0374188A09D}.Release|x64.ActiveCfg = Release|x64
+		{1E0A8EB2-7022-42E2-8970-F0374188A09D}.Release|x64.Build.0 = Release|x64
+		{1E0A8EB2-7022-42E2-8970-F0374188A09D}.Release|x86.ActiveCfg = Release|x86
+		{1E0A8EB2-7022-42E2-8970-F0374188A09D}.Release|x86.Build.0 = Release|x86
+		{625E5D7F-86F6-4961-89D0-3835BF261ACC}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{625E5D7F-86F6-4961-89D0-3835BF261ACC}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{625E5D7F-86F6-4961-89D0-3835BF261ACC}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{625E5D7F-86F6-4961-89D0-3835BF261ACC}.Debug|x64.ActiveCfg = Debug|x86
+		{625E5D7F-86F6-4961-89D0-3835BF261ACC}.Debug|x86.ActiveCfg = Debug|x86
+		{625E5D7F-86F6-4961-89D0-3835BF261ACC}.Debug|x86.Build.0 = Debug|x86
+		{625E5D7F-86F6-4961-89D0-3835BF261ACC}.Release|Any CPU.ActiveCfg = Debug|x86
+		{625E5D7F-86F6-4961-89D0-3835BF261ACC}.Release|Mixed Platforms.ActiveCfg = Debug|x86
+		{625E5D7F-86F6-4961-89D0-3835BF261ACC}.Release|Mixed Platforms.Build.0 = Debug|x86
+		{625E5D7F-86F6-4961-89D0-3835BF261ACC}.Release|x64.ActiveCfg = Debug|x86
+		{625E5D7F-86F6-4961-89D0-3835BF261ACC}.Release|x86.ActiveCfg = Debug|x86
+		{625E5D7F-86F6-4961-89D0-3835BF261ACC}.Release|x86.Build.0 = Debug|x86
+		{65FE2973-B4E6-49DE-8F57-55490D4B4FD4}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{65FE2973-B4E6-49DE-8F57-55490D4B4FD4}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{65FE2973-B4E6-49DE-8F57-55490D4B4FD4}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{65FE2973-B4E6-49DE-8F57-55490D4B4FD4}.Debug|x64.ActiveCfg = Debug|x86
+		{65FE2973-B4E6-49DE-8F57-55490D4B4FD4}.Debug|x86.ActiveCfg = Debug|x86
+		{65FE2973-B4E6-49DE-8F57-55490D4B4FD4}.Debug|x86.Build.0 = Debug|x86
+		{65FE2973-B4E6-49DE-8F57-55490D4B4FD4}.Release|Any CPU.ActiveCfg = Release|x86
+		{65FE2973-B4E6-49DE-8F57-55490D4B4FD4}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{65FE2973-B4E6-49DE-8F57-55490D4B4FD4}.Release|Mixed Platforms.Build.0 = Release|x86
+		{65FE2973-B4E6-49DE-8F57-55490D4B4FD4}.Release|x64.ActiveCfg = Release|x86
+		{65FE2973-B4E6-49DE-8F57-55490D4B4FD4}.Release|x86.ActiveCfg = Release|x86
+		{65FE2973-B4E6-49DE-8F57-55490D4B4FD4}.Release|x86.Build.0 = Release|x86
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/BabylonExport.Core.csproj b/Exporters/FBX - OBJ/BabylonExport.Core/BabylonExport.Core.csproj
deleted file mode 100644
index c164f6b..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/BabylonExport.Core.csproj	
+++ /dev/null
@@ -1,233 +0,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{CE70B051-FB63-420D-80C0-51CC03A214BA}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>BabylonExport.Core</RootNamespace>
-    <AssemblyName>BabylonExport.Core</AssemblyName>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <SccProjectName>SAK</SccProjectName>
-    <SccLocalPath>SAK</SccLocalPath>
-    <SccAuxPath>SAK</SccAuxPath>
-    <SccProvider>SAK</SccProvider>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <PlatformTarget>x86</PlatformTarget>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="Microsoft.Build">
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="Microsoft.Build.Engine">
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="Microsoft.Build.Framework">
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
-    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\BabylonExport\Refs\Microsoft.Xna.Framework.Content.Pipeline.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.AudioImporters, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\BabylonExport\Refs\Microsoft.Xna.Framework.Content.Pipeline.AudioImporters.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.EffectImporter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\BabylonExport\Refs\Microsoft.Xna.Framework.Content.Pipeline.EffectImporter.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.FBXImporter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\BabylonExport\Refs\Microsoft.Xna.Framework.Content.Pipeline.FBXImporter.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.TextureImporter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\BabylonExport\Refs\Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.VideoImporters, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\BabylonExport\Refs\Microsoft.Xna.Framework.Content.Pipeline.VideoImporters.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.XImporter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\BabylonExport\Refs\Microsoft.Xna.Framework.Content.Pipeline.XImporter.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
-    <Reference Include="Microsoft.Xna.Framework.Tools.Packaging.Tasks, Version=4.0.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\BabylonExport\Refs\Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll</HintPath>
-    </Reference>
-    <Reference Include="SharpDX">
-      <HintPath>..\BabylonExport\Refs\SharpDX.dll</HintPath>
-    </Reference>
-    <Reference Include="SharpDX.Direct3D9">
-      <HintPath>..\BabylonExport\Refs\SharpDX.Direct3D9.dll</HintPath>
-    </Reference>
-    <Reference Include="SharpDX.DXGI">
-      <HintPath>..\BabylonExport\Refs\SharpDX.DXGI.dll</HintPath>
-    </Reference>
-    <Reference Include="SkinnedModel">
-      <HintPath>..\BabylonExport\Refs\SkinnedModel.dll</HintPath>
-    </Reference>
-    <Reference Include="SkinnedModelPipeline">
-      <HintPath>..\BabylonExport\Refs\SkinnedModelPipeline.dll</HintPath>
-    </Reference>
-    <Reference Include="System" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Data.Linq" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="System.Runtime.Serialization" />
-    <Reference Include="System.ServiceModel" />
-    <Reference Include="System.Windows.Forms" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Xml" />
-    <Reference Include="Vertice.Core">
-      <HintPath>..\BabylonExport\Refs\Vertice.Core.dll</HintPath>
-    </Reference>
-    <Reference Include="Vertice.Nova">
-      <HintPath>..\BabylonExport\Refs\Vertice.Nova.dll</HintPath>
-    </Reference>
-    <Reference Include="Vertice.Nova.Core.DirectX10">
-      <HintPath>..\BabylonExport\Refs\Vertice.Nova.Core.DirectX10.dll</HintPath>
-    </Reference>
-    <Reference Include="Vertice.Nova.Core.DirectX9">
-      <HintPath>..\BabylonExport\Refs\Vertice.Nova.Core.DirectX9.dll</HintPath>
-    </Reference>
-    <Reference Include="Vertice.Nova.Interop">
-      <HintPath>..\BabylonExport\Refs\Vertice.Nova.Interop.dll</HintPath>
-    </Reference>
-    <Reference Include="Vertice.Wrappers.DirectX">
-      <HintPath>..\BabylonExport\Refs\Vertice.Wrappers.DirectX.dll</HintPath>
-    </Reference>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Entities\Export\BabylonAnimation.cs" />
-    <Compile Include="Entities\Export\BabylonAnimationKey.cs" />
-    <Compile Include="Entities\Export\BabylonBone.cs" />
-    <Compile Include="Entities\Export\BabylonCamera.cs" />
-    <Compile Include="Entities\Export\BabylonLensFlare.cs" />
-    <Compile Include="Entities\Export\BabylonLight.cs" />
-    <Compile Include="Entities\Export\BabylonMaterial.cs" />
-    <Compile Include="Entities\Export\BabylonMesh.cs" />
-    <Compile Include="Entities\Export\BabylonMultiMaterial.cs" />
-    <Compile Include="Entities\Export\BabylonLensFlareSystem.cs" />
-    <Compile Include="Entities\Export\BabylonParticleSystem.cs" />
-    <Compile Include="Entities\Export\BabylonScene.cs" />
-    <Compile Include="Entities\Export\BabylonShadowGenerator.cs" />
-    <Compile Include="Entities\Export\BabylonSkeleton.cs" />
-    <Compile Include="Entities\Export\BabylonSubMesh.cs" />
-    <Compile Include="Entities\Export\BabylonTexture.cs" />
-    <Compile Include="Entities\IDumpable.cs" />
-    <Compile Include="Entities\IQueryable.cs" />
-    <Compile Include="Entities\Mesh.cs" />
-    <Compile Include="Entities\PositionNormalTextured.cs" />
-    <Compile Include="Entities\PositionNormalTexturedWeights.cs" />
-    <Compile Include="Entities\ProxyMesh.cs" />
-    <Compile Include="Entities\StandardMaterial.cs" />
-    <Compile Include="Exporters\FBX\FBXExporter.cs" />
-    <Compile Include="Exporters\FBX\XNA\ContentBuilder.cs" />
-    <Compile Include="Exporters\FBX\XNA\ErrorLogger.cs" />
-    <Compile Include="Exporters\FBX\XNA\GraphicsDeviceService.cs" />
-    <Compile Include="Exporters\FBX\XNA\ServiceContainer.cs" />
-    <Compile Include="Exporters\IExporter.cs" />
-    <Compile Include="Exporters\MXB\NovaExporter.cs" />
-    <Compile Include="Exporters\MXB\NovaExporter.Materials.cs" />
-    <Compile Include="Exporters\OBJ\Document.cs" />
-    <Compile Include="Exporters\OBJ\Line.cs" />
-    <Compile Include="Exporters\OBJ\MtlHeader.cs" />
-    <Compile Include="Exporters\OBJ\MtlLine.cs" />
-    <Compile Include="Exporters\OBJ\ObjExporter.cs" />
-    <Compile Include="Exporters\OBJ\ObjExporter.Material.cs" />
-    <Compile Include="Exporters\OBJ\ObjHeader.cs" />
-    <Compile Include="Exporters\OBJ\ObjLine.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Tools.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Exporters\Blender\io_export_babylon.py" />
-    <None Include="Exporters\FBX\XNA\XNA Game Studio\Microsoft.Xna.GameStudio.ContentPipelineExtensions.targets">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-    <None Include="Exporters\FBX\XNA\XNA Game Studio\Microsoft.Xna.GameStudio.targets">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-    <None Include="Exporters\FBX\XNA\XNA Game Studio\v4.0\Microsoft.Xna.GameStudio.AvailablePlatforms.targets">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-    <None Include="Exporters\FBX\XNA\XNA Game Studio\v4.0\Microsoft.Xna.GameStudio.Common.targets">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-    <None Include="Exporters\FBX\XNA\XNA Game Studio\v4.0\Microsoft.Xna.GameStudio.Content.targets">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-    <None Include="Exporters\FBX\XNA\XNA Game Studio\v4.0\Microsoft.Xna.GameStudio.ContentPipeline.targets">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-    <None Include="Exporters\FBX\XNA\XNA Game Studio\v4.0\Microsoft.Xna.GameStudio.Windows.targets">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-    <None Include="Exporters\FBX\XNA\XNA Game Studio\v4.0\Microsoft.Xna.GameStudio.Xbox 360.targets">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-    <None Include="Refs\xnafx40_redist.msi" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Exporters\FBX\XNA\XNA Game Studio\v4.0\Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-  </ItemGroup>
-  <ItemGroup>
-    <Content Include="Refs\Microsoft.Xna.Framework.Content.Pipeline.AudioImporters.dll" />
-    <Content Include="Refs\Microsoft.Xna.Framework.Content.Pipeline.dll" />
-    <Content Include="Refs\Microsoft.Xna.Framework.Content.Pipeline.EffectImporter.dll" />
-    <Content Include="Refs\Microsoft.Xna.Framework.Content.Pipeline.FBXImporter.dll" />
-    <Content Include="Refs\Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.dll" />
-    <Content Include="Refs\Microsoft.Xna.Framework.Content.Pipeline.VideoImporters.dll" />
-    <Content Include="Refs\Microsoft.Xna.Framework.Content.Pipeline.XImporter.dll" />
-    <Content Include="Refs\Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll" />
-    <Content Include="Refs\SharpDX.Direct3D9.dll" />
-    <Content Include="Refs\SharpDX.dll" />
-    <Content Include="Refs\SharpDX.DXGI.dll" />
-    <Content Include="Refs\SkinnedModel.dll" />
-    <Content Include="Refs\SkinnedModelPipeline.dll" />
-    <Content Include="Refs\Vertice.Core.dll" />
-    <Content Include="Refs\Vertice.Nova.Core.DirectX10.dll" />
-    <Content Include="Refs\Vertice.Nova.Core.DirectX9.dll" />
-    <Content Include="Refs\Vertice.Nova.dll" />
-    <Content Include="Refs\Vertice.Nova.Interop.dll" />
-    <Content Include="Refs\Vertice.Wrappers.DirectX.dll" />
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>
\ No newline at end of file
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonAnimation.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonAnimation.cs
deleted file mode 100644
index 36bd43b..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonAnimation.cs	
+++ /dev/null
@@ -1,35 +0,0 @@
-﻿using System.Runtime.Serialization;
-using Vertice.Nova.Animations;
-
-namespace BabylonExport.Core
-{
-    [DataContract]
-    public class BabylonAnimation
-    {
-        [DataMember]
-        public string name { get; set; }
-
-        [DataMember]
-        public string property { get; set; }
-
-        [DataMember]
-        public DataType dataType { get; set; }
-
-        [DataMember]
-        public InterpolationLoop loopBehavior { get; set; }
-
-        [DataMember]
-        public int framePerSecond { get; set; }
-
-        [DataMember]
-        public BabylonAnimationKey[] keys { get; set; }
-
-        public enum DataType
-        {
-            Float = 0,
-            Vector3 = 1,
-            Quaternion = 2,
-            Matrix = 3
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonAnimationKey.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonAnimationKey.cs
deleted file mode 100644
index ac3a708..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonAnimationKey.cs	
+++ /dev/null
@@ -1,14 +0,0 @@
-﻿using System.Runtime.Serialization;
-
-namespace BabylonExport.Core
-{
-    [DataContract]
-    public class BabylonAnimationKey
-    {
-        [DataMember]
-        public float frame { get; set; }
-
-        [DataMember]
-        public float[] values { get; set; }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonBone.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonBone.cs
deleted file mode 100644
index f64ad9e..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonBone.cs	
+++ /dev/null
@@ -1,24 +0,0 @@
-﻿using System.Runtime.Serialization;
-using Vertice.Nova.Animations;
-
-namespace BabylonExport.Core
-{
-    [DataContract]
-    public class BabylonBone
-    {
-        [DataMember]
-        public string name { get; set; }
-
-        [DataMember]
-        public int index { get; set; }
-
-        [DataMember]
-        public int parentBoneIndex { get; set; }
-
-        [DataMember]
-        public float[] matrix { get; set; }
-
-        [DataMember]
-        public BabylonAnimation animation { get; set; }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonCamera.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonCamera.cs
deleted file mode 100644
index b0603dd..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonCamera.cs	
+++ /dev/null
@@ -1,82 +0,0 @@
-﻿using System.Runtime.Serialization;
-
-namespace BabylonExport.Core
-{
-    [DataContract]
-    public class BabylonCamera
-    {
-        [DataMember]
-        public string name { get; set; }
-
-        [DataMember]
-        public string id { get; set; }
-
-        [DataMember]
-        public string parentId { get; set; }
-
-        [DataMember]
-        public string lockedTargetId { get; set; }
-
-        [DataMember]
-        public float[] position { get; set; }
-
-        [DataMember]
-        public float[] rotation { get; set; }
-
-        [DataMember]
-        public float[] target { get; set; }
-
-        [DataMember]
-        public float fov { get; set; }
-
-        [DataMember]
-        public float minZ { get; set; }
-
-        [DataMember]
-        public float maxZ { get; set; }
-
-        [DataMember]
-        public float speed { get; set; }
-
-        [DataMember]
-        public float inertia { get; set; }
-
-        [DataMember]
-        public bool checkCollisions { get; set; }
-
-        [DataMember]
-        public bool applyGravity { get; set; }
-
-        [DataMember]
-        public float[] ellipsoid { get; set; }
-
-        [DataMember]
-        public bool autoAnimate { get; set; }
-
-        [DataMember]
-        public int autoAnimateFrom { get; set; }
-
-        [DataMember]
-        public int autoAnimateTo { get; set; }
-
-        [DataMember]
-        public bool autoAnimateLoop { get; set; }
-
-        [DataMember]
-        public BabylonAnimation[] animations { get; set; }
-
-
-        public BabylonCamera()
-        {
-            position = new[] { 0f, 0f, 0f };
-            rotation = new[] { 0f, 0f, 0f };
-
-            // Default values
-            fov = 0.8f;
-            minZ = 0.1f;
-            maxZ = 5000.0f;
-            speed = 1.0f;
-            inertia = 0.9f;
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonLensFlare.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonLensFlare.cs
deleted file mode 100644
index 27efdc7..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonLensFlare.cs	
+++ /dev/null
@@ -1,20 +0,0 @@
-﻿using System.Runtime.Serialization;
-
-namespace BabylonExport.Core
-{
-    [DataContract]
-    public class BabylonLensFlare
-    {
-        [DataMember]
-        public float position { get; set; }
-
-        [DataMember]
-        public float size { get; set; }
-
-        [DataMember]
-        public float[] color { get; set; }
-
-        [DataMember]
-        public string textureName { get; set; }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonLensFlareSystem.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonLensFlareSystem.cs
deleted file mode 100644
index bbefc66..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonLensFlareSystem.cs	
+++ /dev/null
@@ -1,17 +0,0 @@
-﻿using System.Runtime.Serialization;
-
-namespace BabylonExport.Core
-{
-    [DataContract]
-    public class BabylonLensFlareSystem
-    {
-        [DataMember]
-        public string emitterId { get; set; }
-
-        [DataMember]
-        public int borderLimit { get; set; }
-
-        [DataMember]
-        public BabylonLensFlare[] flares { get; set; }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonLight.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonLight.cs
deleted file mode 100644
index 75f81e5..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonLight.cs	
+++ /dev/null
@@ -1,39 +0,0 @@
-﻿using System.Runtime.Serialization;
-
-namespace BabylonExport.Core
-{
-    [DataContract]
-    public class BabylonLight
-    {
-        [DataMember]
-        public string name { get; set; }
-
-        [DataMember]
-        public string id { get; set; }
-
-        [DataMember]
-        public float[] position { get; set; }
-
-        [DataMember]
-        public float[] direction { get; set; }
-
-        [DataMember]
-        public int type { get; set; }
-
-        [DataMember]
-        public float[] diffuse { get; set; }
-
-        [DataMember]
-        public float[] specular { get; set; }
-
-        [DataMember]
-        public float intensity { get; set; }
-
-        public BabylonLight()
-        {
-            diffuse = new[] {1.0f, 1.0f, 1.0f};
-            specular = new[] { 1.0f, 1.0f, 1.0f };
-            intensity = 1.0f;
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonMaterial.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonMaterial.cs
deleted file mode 100644
index 8e9a3bf..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonMaterial.cs	
+++ /dev/null
@@ -1,68 +0,0 @@
-﻿using System.Runtime.Serialization;
-using BabylonExport.Core.Exporters;
-
-namespace BabylonExport.Core
-{
-    [DataContract]
-    public class BabylonMaterial
-    {
-        [DataMember]
-        public string name { get; set; }
-
-        [DataMember]
-        public string id { get; set; }
-
-        [DataMember]
-        public bool backFaceCulling { get; set; }
-
-        [DataMember]
-        public float[] ambient { get; set; }
-
-        [DataMember]
-        public float[] diffuse { get; set; }
-
-        [DataMember]
-        public float[] specular { get; set; }
-
-        [DataMember]
-        public float[] emissive { get; set; }
-
-        [DataMember]
-        public float specularPower { get; set; }
-
-        [DataMember]
-        public float alpha { get; set; }
-
-        [DataMember]
-        public BabylonTexture diffuseTexture { get; set; }
-
-        [DataMember]
-        public BabylonTexture ambientTexture { get; set; }
-
-        [DataMember]
-        public BabylonTexture opacityTexture { get; set; }
-
-        [DataMember]
-        public BabylonTexture reflectionTexture { get; set; }
-
-        [DataMember]
-        public BabylonTexture emissiveTexture { get; set; }
-
-        [DataMember]
-        public BabylonTexture specularTexture { get; set; }
-
-        [DataMember]
-        public BabylonTexture bumpTexture { get; set; }
-
-        public BabylonMaterial()
-        {
-            backFaceCulling = true;
-            ambient = new[] {1.0f, 1.0f, 1.0f};
-            diffuse = new[] { 1.0f, 1.0f, 1.0f };
-            specular = new[] { 1.0f, 1.0f, 1.0f };
-            emissive = new[] { 0f, 0f, 0f };
-            specularPower = 64;
-            alpha = 1.0f;
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonMesh.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonMesh.cs
deleted file mode 100644
index a8605e4..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonMesh.cs	
+++ /dev/null
@@ -1,114 +0,0 @@
-﻿using System.Runtime.Serialization;
-
-namespace BabylonExport.Core
-{
-    [DataContract]
-    public class BabylonMesh
-    {
-        [DataMember]
-        public string name { get; set; }
-
-        [DataMember]
-        public string id { get; set; }
-
-        [DataMember]
-        public string parentId { get; set; }
-
-        [DataMember]
-        public string materialId { get; set; }
-
-        [DataMember]
-        public bool isEnabled { get; set; }
-
-        [DataMember]
-        public bool isVisible { get; set; }
-
-        [DataMember]
-        public float[] position { get; set; }
-
-        [DataMember]
-        public float[] rotation { get; set; }
-
-        [DataMember]
-        public float[] scaling { get; set; }
-
-        [DataMember]
-        public float[] localMatrix { get; set; }
-
-        [DataMember]
-        public float[] positions { get; set; }
-
-        [DataMember]
-        public float[] normals { get; set; }
-
-        [DataMember]
-        public float[] uvs { get; set; }
-
-        [DataMember]
-        public float[] uvs2 { get; set; }
-
-        [DataMember]
-        public float[] colors { get; set; }
-
-        [DataMember]
-        public int[] matricesIndices { get; set; }
-
-        [DataMember]
-        public float[] matricesWeights { get; set; }
-
-        [DataMember]
-        public int[] indices { get; set; }
-
-        [DataMember]
-        public bool checkCollisions { get; set; }
-
-        [DataMember]
-        public bool receiveShadows { get; set; }    
-    
-        [DataMember]
-        public bool infiniteDistance { get; set; }
-        
-        [DataMember]
-        public int billboardMode { get; set; }
-
-        [DataMember]
-        public float visibility { get; set; }
-
-        [DataMember]
-        public BabylonSubMesh[] subMeshes { get; set; }
-
-        [DataMember]
-        public int skeletonId { get; set; }
-
-        [DataMember]
-        public bool autoAnimate { get; set; }
-
-        [DataMember]
-        public int autoAnimateFrom { get; set; }
-
-        [DataMember]
-        public int autoAnimateTo { get; set; }
-
-        [DataMember]
-        public bool autoAnimateLoop { get; set; }
-
-        [DataMember]
-        public BabylonAnimation[] animations { get; set; }
-
-        public BabylonMesh()
-        {
-            isEnabled = true;
-            isVisible = true;
-
-            position = new[] { 0f, 0f, 0f };
-            rotation = new[] { 0f, 0f, 0f };
-            scaling = new[] { 1f, 1f, 1f };
-
-            billboardMode = 0;
-
-            visibility = 1.0f;
-
-            skeletonId = -1;
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonMultiMaterial.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonMultiMaterial.cs
deleted file mode 100644
index 10efd6d..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonMultiMaterial.cs	
+++ /dev/null
@@ -1,17 +0,0 @@
-﻿using System.Runtime.Serialization;
-
-namespace BabylonExport.Core
-{
-    [DataContract]
-    public class BabylonMultiMaterial
-    {
-        [DataMember]
-        public string name { get; set; }
-
-        [DataMember]
-        public string id { get; set; }
-
-        [DataMember]
-        public string[] materials { get; set; }        
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonParticleSystem.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonParticleSystem.cs
deleted file mode 100644
index 8779b91..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonParticleSystem.cs	
+++ /dev/null
@@ -1,86 +0,0 @@
-﻿using System.Runtime.Serialization;
-
-namespace BabylonExport.Core
-{
-    [DataContract]
-    public class BabylonParticleSystem
-    {
-        [DataMember]
-        public string emitterId { get; set; }
-
-        [DataMember]
-        public float[] gravity { get; set; }
-
-        [DataMember]
-        public float[] direction1 { get; set; }
-
-        [DataMember]
-        public float[] direction2 { get; set; }
-
-        [DataMember]
-        public float[] minEmitBox { get; set; }
-
-        [DataMember]
-        public float[] maxEmitBox { get; set; }
-
-        [DataMember]
-        public float[] color1 { get; set; }
-
-        [DataMember]
-        public float[] color2 { get; set; }
-
-        [DataMember]
-        public float[] colorDead { get; set; }
-
-        [DataMember]
-        public float deadAlpha { get; set; }
-
-        [DataMember]
-        public float emitRate { get; set; }
-
-        [DataMember]
-        public float updateSpeed { get; set; }
-
-        [DataMember]
-        public int targetStopFrame { get; set; }
-
-        [DataMember]
-        public float minEmitPower { get; set; }
-
-        [DataMember]
-        public float maxEmitPower { get; set; }
-
-        [DataMember]
-        public float minLifeTime { get; set; }
-
-        [DataMember]
-        public float maxLifeTime { get; set; }
-
-        [DataMember]
-        public float minSize { get; set; }
-
-        [DataMember]
-        public float maxSize { get; set; }
-
-        [DataMember]
-        public float minAngularSpeed { get; set; }
-
-        [DataMember]
-        public float maxAngularSpeed { get; set; }
-
-        [DataMember]
-        public string textureName { get; set; }
-
-        [DataMember]
-        public int blendMode { get; set; }
-
-        [DataMember]
-        public int capacity { get; set; }
-
-        [DataMember]
-        public float[] textureMask { get; set; }
-
-        [DataMember]
-        public bool linkToEmitter { get; set; }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonScene.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonScene.cs
deleted file mode 100644
index 51d6c4b..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonScene.cs	
+++ /dev/null
@@ -1,163 +0,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Runtime.Serialization;
-using SharpDX;
-
-namespace BabylonExport.Core
-{
-    [DataContract]
-    public class BabylonScene
-    {
-        [DataMember]
-        public bool autoClear { get; set; }
-
-        [DataMember]
-        public float[] clearColor { get; set; }
-
-        [DataMember]
-        public float[] ambientColor { get; set; }
-
-        [DataMember]
-        public int fogMode { get; set; }
-
-        [DataMember]
-        public float[] fogColor { get; set; }
-
-        [DataMember]
-        public float fogStart { get; set; }
-
-        [DataMember]
-        public float fogEnd { get; set; }
-
-        [DataMember]
-        public float fogDensity { get; set; }
-
-        [DataMember]
-        public float[] gravity { get; set; }
-
-        [DataMember]
-        public BabylonCamera[] cameras { get; set; }
-
-        [DataMember]
-        public string activeCameraID { get; set; }
-
-        [DataMember]
-        public BabylonLight[] lights { get; set; }
-
-        [DataMember]
-        public BabylonMesh[] meshes { get; set; }
-
-        [DataMember]
-        public BabylonMaterial[] materials { get; set; }
-
-        [DataMember]
-        public BabylonMultiMaterial[] multiMaterials { get; set; }
-
-        [DataMember]
-        public BabylonParticleSystem[] particleSystems { get; set; }
-
-        [DataMember]
-        public BabylonLensFlareSystem[] lensFlareSystems { get; set; }
-
-        [DataMember]
-        public BabylonShadowGenerator[] shadowGenerators { get; set; }
-
-        [DataMember]
-        public BabylonSkeleton[] skeletons { get; set; }
-        
-        public Vector3 MaxVector { get; set; }
-        public Vector3 MinVector { get; set; }
-
-        public string OutputPath { get; private set; }
-
-        internal List<BabylonMesh> MeshesList { get; private set; }
-        internal List<BabylonCamera> CamerasList { get; private set; }
-        internal List<BabylonLight> LightsList { get; private set; }
-        internal List<BabylonMaterial> MaterialsList { get; private set; }
-        internal List<BabylonMultiMaterial> MultiMaterialsList { get; private set; }
-        internal List<BabylonShadowGenerator> ShadowGeneratorsList { get; private set; }
-        internal List<BabylonSkeleton> SkeletonsList { get; private set; }
-
-        readonly List<string> exportedTextures = new List<string>();
-
-        public BabylonScene(string outputPath)
-        {
-            OutputPath = outputPath;
-
-            MeshesList = new List<BabylonMesh>();
-            MaterialsList = new List<BabylonMaterial>();
-            CamerasList = new List<BabylonCamera>();
-            LightsList = new List<BabylonLight>();
-            MultiMaterialsList = new List<BabylonMultiMaterial>();
-            ShadowGeneratorsList = new List<BabylonShadowGenerator>();
-            SkeletonsList = new List<BabylonSkeleton>();
-
-            // Default values
-            autoClear = true;
-            clearColor = new[] { 0.2f, 0.2f, 0.3f };
-            ambientColor = new[] {0f, 0f, 0f };
-            gravity = new[] {0f, 0f, -0.9f};
-        }
-
-        public void Prepare(bool generateDefaultLight = true)
-        {
-            meshes = MeshesList.ToArray();
-
-            materials = MaterialsList.ToArray();
-            multiMaterials = MultiMaterialsList.ToArray();
-            shadowGenerators = ShadowGeneratorsList.ToArray();
-            skeletons = SkeletonsList.ToArray();
-
-            if (CamerasList.Count == 0)
-            {
-                var camera = new BabylonCamera {name = "Default camera", id = Guid.NewGuid().ToString()};
-
-                var distanceVector = MaxVector - MinVector;
-                var midPoint = MinVector +distanceVector / 2;
-                camera.target = midPoint.ToArray();
-                camera.position = (midPoint + distanceVector).ToArray();
-
-                var distance = distanceVector.Length();
-                camera.speed =  distance/ 50.0f;
-                camera.maxZ = distance * 4f;
-
-                camera.minZ = distance < 100.0f ? 0.1f : 1.0f;
-
-                CamerasList.Add(camera);
-            }
-
-            if (LightsList.Count == 0 && generateDefaultLight)
-            {
-                var light = new BabylonLight {name = "Default light", id = Guid.NewGuid().ToString()};
-
-                var midPoint = MinVector + (MaxVector - MinVector) / 2;
-                light.type = 0;
-                light.position = (midPoint + (MaxVector - MinVector)).ToArray();
-
-                light.diffuse = new Vector3(1, 1, 1).ToArray();
-                light.specular = new Vector3(1, 1, 1).ToArray();
-
-                LightsList.Add(light);
-            }
-            
-            cameras = CamerasList.ToArray();
-            lights = LightsList.ToArray();
-
-            if (activeCameraID == null)
-            {
-                activeCameraID = CamerasList[0].id;
-            }
-        }
-
-        public void AddTexture(string diffuseTexture)
-        {
-            if (exportedTextures.Contains(diffuseTexture))
-                return;
-
-            exportedTextures.Add(diffuseTexture);
-
-            File.Copy(diffuseTexture, Path.Combine(OutputPath, Path.GetFileName(diffuseTexture)), true);
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonShadowGenerator.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonShadowGenerator.cs
deleted file mode 100644
index 0238acb..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonShadowGenerator.cs	
+++ /dev/null
@@ -1,22 +0,0 @@
-﻿using System.Runtime.Serialization;
-using Vertice.Nova.Animations;
-
-namespace BabylonExport.Core
-{
-    [DataContract]
-    public class BabylonShadowGenerator
-    {
-        [DataMember]
-        public int mapSize { get; set; }
-
-        [DataMember]
-        public string lightId { get; set; }
-
-        [DataMember]
-        public bool useVarianceShadowMap { get; set; }
-
-        [DataMember]
-        public string[] renderList { get; set; }
-
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonSkeleton.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonSkeleton.cs
deleted file mode 100644
index b75067c..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonSkeleton.cs	
+++ /dev/null
@@ -1,18 +0,0 @@
-﻿using System.Runtime.Serialization;
-using Vertice.Nova.Animations;
-
-namespace BabylonExport.Core
-{
-    [DataContract]
-    public class BabylonSkeleton
-    {
-        [DataMember]
-        public int id { get; set; }
-        
-        [DataMember]
-        public string name { get; set; }
-
-        [DataMember]
-        public BabylonBone[] bones { get; set; }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonSubMesh.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonSubMesh.cs
deleted file mode 100644
index c136ff1..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonSubMesh.cs	
+++ /dev/null
@@ -1,24 +0,0 @@
-﻿using System.Runtime.Serialization;
-
-namespace BabylonExport.Core
-{
-    [DataContract]
-    public class BabylonSubMesh
-    {
-        [DataMember]
-        public int materialIndex { get; set; }
-
-        [DataMember]
-        public int verticesStart { get; set; }
-
-        [DataMember]
-        public int verticesCount { get; set; }
-
-        [DataMember]
-        public int indexStart { get; set; }
-
-        [DataMember]
-        public int indexCount { get; set; }
-
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonTexture.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonTexture.cs
deleted file mode 100644
index 8e5f540..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Export/BabylonTexture.cs	
+++ /dev/null
@@ -1,84 +0,0 @@
-﻿using System.Runtime.Serialization;
-
-namespace BabylonExport.Core
-{
-    [DataContract]
-    public class BabylonTexture
-    {
-        [DataMember]
-        public string name { get; set; }
-
-        [DataMember]
-        public float level { get; set; }
-
-        [DataMember]
-        public bool hasAlpha { get; set; }
-
-        [DataMember]
-        public int coordinatesMode { get; set; }
-        
-        [DataMember]
-        public bool isCube { get; set; }
-
-        [DataMember]
-        public float uOffset { get; set; }
-
-        [DataMember]
-        public float vOffset { get; set; }
-
-        [DataMember]
-        public float uScale { get; set; }
-
-        [DataMember]
-        public float vScale { get; set; }
-
-        [DataMember]
-        public float uAng { get; set; }
-
-        [DataMember]
-        public float vAng { get; set; }
-
-        [DataMember]
-        public float wAng { get; set; }
-
-        [DataMember]
-        public int wrapU { get; set; }
-
-        [DataMember]
-        public int wrapV { get; set; }
-
-        [DataMember]
-        public int coordinatesIndex { get; set; }
-
-        [DataMember]
-        public bool isRenderTarget { get; set; }
-
-        [DataMember]
-        public int renderTargetSize { get; set; }
-
-        [DataMember]
-        public float[] mirrorPlane { get; set; }
-
-        [DataMember]
-        public string[] renderList { get; set; }
-
-        [DataMember]
-        public BabylonAnimation[] animations { get; set; }
-        
-        public BabylonTexture()
-        {
-            level = 1.0f;
-            uOffset = 0;
-            vOffset = 0;
-            uScale = 1.0f;
-            vScale = 1.0f;
-            uAng = 0;
-            vAng = 0;
-            wAng = 0;
-            wrapU = 1;
-            wrapV = 1;
-            hasAlpha = false;
-            coordinatesIndex = 0;
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/IDumpable.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/IDumpable.cs
deleted file mode 100644
index d3c98be..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/IDumpable.cs	
+++ /dev/null
@@ -1,15 +0,0 @@
-﻿using System.Collections.Generic;
-
-namespace BabylonExport.Core
-{
-    public interface IDumpable
-    {
-        void DumpPositions(List<float> list);
-        void DumpNormals(List<float> list);
-        void DumpUVs(List<float> list);
-        void DumpUVs2(List<float> list);
-        void DumpColors(List<float> list);
-        void DumpMatricesIndices(List<int> list);
-        void DumpMatricesWeights(List<float> list);
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/IQueryable.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/IQueryable.cs
deleted file mode 100644
index b8d98ea..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/IQueryable.cs	
+++ /dev/null
@@ -1,14 +0,0 @@
-﻿using SharpDX;
-
-namespace BabylonExport.Core
-{
-    public interface IQueryable
-    {
-        bool HasWeights
-        {
-            get;
-        }
-
-        Vector3 GetPosition();
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Mesh.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Mesh.cs
deleted file mode 100644
index 633107e..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/Mesh.cs	
+++ /dev/null
@@ -1,138 +0,0 @@
-﻿using System;
-using System.Collections.Generic;
-using BabylonExport.Core.Exporters;
-using SharpDX;
-
-namespace BabylonExport.Core
-{
-    public class Mesh<T> where T : struct, IDumpable, IQueryable
-    {
-        readonly List<T> vertices = new List<T>();
-        readonly List<int> indices = new List<int>();
-        string concatenatedName = "";
-
-        public Guid ID 
-        {
-            get;
-            private set;
-        }
-
-        public StandardMaterial Material { get; private set; }
-        
-        public Mesh(StandardMaterial material)
-        {
-            ID = Guid.NewGuid();
-            Material = material;
-        }
-
-        public void AddPart(string name, List<T> addedVertices, List<int> addedIndices)
-        {
-            if (concatenatedName == "")
-                concatenatedName += " # ";
-
-            concatenatedName += name;
-
-            var offset = vertices.Count;
-            vertices.AddRange(addedVertices);
-
-            foreach (int index in addedIndices)
-            {
-                indices.Add(index + offset);
-            }
-        }
-
-        public void CreateBabylonMesh(BabylonScene scene, Guid? parentID = null, BabylonSkeleton skeleton = null)
-        {
-            var babylonMesh = new BabylonMesh();
-            scene.MeshesList.Add(babylonMesh);
-
-            // Guid
-            babylonMesh.id = ID.ToString();
-
-            // Name
-            babylonMesh.name = concatenatedName;
-
-            // Parent
-            if (parentID.HasValue)
-                babylonMesh.parentId = parentID.Value.ToString();
-            else
-                babylonMesh.parentId = "";
-
-            // Material ID
-            if (Material == null)
-            {
-                babylonMesh.materialId = "";
-            }
-            else
-            {
-                babylonMesh.materialId = Material.ID.ToString();
-            }
-
-            // Skeleton ID
-            if (skeleton != null)
-            {
-                babylonMesh.skeletonId = skeleton.id;
-            }
-
-            // Position
-            babylonMesh.position = Vector3.Zero.ToArray();
-
-            // Vertices
-            var positions = new List<float>();
-            var normals = new List<float>();
-            var uvs = new List<float>();
-            var uvs2 = new List<float>();
-            var colors = new List<float>();
-            var matricesIndices = new List<int>();
-            var matricesWeights = new List<float>();
-
-            for (int index = 0; index < vertices.Count; index++)
-            {
-                var position = vertices[index].GetPosition();
-
-                scene.MinVector = Vector3.Min(scene.MinVector, position);
-                scene.MaxVector = Vector3.Max(scene.MaxVector, position);
-
-                vertices[index].DumpPositions(positions);
-                vertices[index].DumpNormals(normals);
-                vertices[index].DumpUVs(uvs);
-                vertices[index].DumpUVs2(uvs2);
-                vertices[index].DumpColors(colors);
-                vertices[index].DumpMatricesIndices(matricesIndices);
-                vertices[index].DumpMatricesWeights(matricesWeights);
-            }
-
-            if (positions.Count > 0)
-            {
-                babylonMesh.positions = positions.ToArray();
-            }
-            if (normals.Count > 0)
-            {
-                babylonMesh.normals = normals.ToArray();
-            }
-            if (uvs.Count > 0)
-            {
-                babylonMesh.uvs = uvs.ToArray();
-            }
-            if (uvs2.Count > 0)
-            {
-                babylonMesh.uvs2 = uvs2.ToArray();
-            }
-            if (colors.Count > 0)
-            {
-                babylonMesh.colors = colors.ToArray();
-            }
-            if (matricesIndices.Count > 0)
-            {
-                babylonMesh.matricesIndices = matricesIndices.ToArray();
-            }
-            if (matricesWeights.Count > 0)
-            {
-                babylonMesh.matricesWeights = matricesWeights.ToArray();
-            }
-
-            // Faces
-            babylonMesh.indices = indices.ToArray();
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/PositionNormalTextured.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/PositionNormalTextured.cs
deleted file mode 100644
index a5ac924..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/PositionNormalTextured.cs	
+++ /dev/null
@@ -1,69 +0,0 @@
-﻿using System.Collections.Generic;
-using System.Globalization;
-using SharpDX;
-
-namespace BabylonExport.Core
-{
-    public struct PositionNormalTextured : IDumpable, IQueryable
-    {
-        public const int Stride = 32;
-        public Vector3 Position;
-        public Vector3 Normal;
-        public Vector2 TextureCoordinates;
-
-        public PositionNormalTextured(Vector3 position, Vector3 normal, Vector2 textureCoordinates)
-        {
-            Position = position;
-            Normal = normal;
-            TextureCoordinates = textureCoordinates;
-        }
-
-        public override string ToString()
-        {
-            return string.Format(CultureInfo.CurrentCulture, "P:{0} N:{1} TV:{2}", Position, Normal, TextureCoordinates);
-        }
-
-        public bool HasWeights
-        {
-            get { return false; }
-        }
-
-        public Vector3 GetPosition()
-        {
-            return Position;
-        }
-
-        public void DumpPositions(List<float> list)
-        {
-            list.Add(Position.X); list.Add(Position.Y); list.Add(Position.Z);
-        }
-
-        public void DumpNormals(List<float> list)
-        {
-            Normal.Normalize();
-            list.Add(Normal.X); list.Add(Normal.Y); list.Add(Normal.Z);
-        }
-
-        public void DumpUVs(List<float> list)
-        {
-            list.Add(TextureCoordinates.X); list.Add(TextureCoordinates.Y);
-        }
-
-        public void DumpUVs2(List<float> list)
-        {
-        }
-
-        public void DumpColors(List<float> list)
-        {
-        }
-
-
-        public void DumpMatricesIndices(List<int> list)
-        {
-        }
-
-        public void DumpMatricesWeights(List<float> list)
-        {
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/PositionNormalTexturedWeights.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/PositionNormalTexturedWeights.cs
deleted file mode 100644
index 04b5956..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/PositionNormalTexturedWeights.cs	
+++ /dev/null
@@ -1,75 +0,0 @@
-﻿using System.Collections.Generic;
-using System.Globalization;
-using SharpDX;
-
-namespace BabylonExport.Core
-{
-    public struct PositionNormalTexturedWeights : IDumpable, IQueryable
-    {
-        public const int Stride = 64;
-        public Vector3 Position;
-        public int Indices;
-        public Vector4 Weights;
-        public Vector3 Normal;
-        public Vector2 TextureCoordinates;
-
-        public PositionNormalTexturedWeights(Vector3 position, Vector3 normal, Vector4 weights, int indices, Vector2 textureCoordinates)
-        {
-            Position = position;
-            Normal = normal;
-            Weights = weights;
-            Indices = indices;
-            TextureCoordinates = textureCoordinates;
-        }
-
-        public override string ToString()
-        {
-            return string.Format(CultureInfo.CurrentCulture, "P:{0} N:{1} TV:{4} W:{2} I:{3}", Position, Normal, Weights, Indices, TextureCoordinates);
-        }
-
-        public bool HasWeights
-        {
-            get { return true; }
-        }
-
-        public Vector3 GetPosition()
-        {
-            return Position;
-        }
-
-        public void DumpPositions(List<float> list)
-        {
-            list.Add(Position.X); list.Add(Position.Y); list.Add(Position.Z);
-        }
-
-        public void DumpNormals(List<float> list)
-        {
-            Normal.Normalize();
-            list.Add(Normal.X); list.Add(Normal.Y); list.Add(Normal.Z);
-        }
-
-        public void DumpUVs(List<float> list)
-        {
-            list.Add(TextureCoordinates.X); list.Add(TextureCoordinates.Y);
-        }
-
-        public void DumpUVs2(List<float> list)
-        {
-        }
-
-        public void DumpColors(List<float> list)
-        {
-        }
-
-
-        public void DumpMatricesIndices(List<int> list)
-        {
-            list.Add(Indices);
-        }
-
-        public void DumpMatricesWeights(List<float> list)
-        {
-            list.Add(Weights.X); list.Add(Weights.Y); list.Add(Weights.Z); list.Add(Weights.W);
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/ProxyMesh.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/ProxyMesh.cs
deleted file mode 100644
index 92c0319..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/ProxyMesh.cs	
+++ /dev/null
@@ -1,42 +0,0 @@
-﻿using System;
-using BabylonExport.Core.Exporters;
-using SharpDX;
-
-namespace BabylonExport.Core
-{
-    public class ProxyMesh
-    {
-        public static Guid CreateBabylonMesh(string name, BabylonScene scene)
-        {
-            var babylonMesh = new BabylonMesh();
-            scene.MeshesList.Add(babylonMesh);
-
-            // Guid
-            var id = Guid.NewGuid();
-            babylonMesh.id = id.ToString();
-
-            // Name
-            babylonMesh.name = name;
-
-            // Parent
-            babylonMesh.parentId = "";
-
-            // Visible
-            babylonMesh.isVisible = false;
-
-            // Material ID
-            babylonMesh.materialId = "";
-
-            // Position
-            babylonMesh.position = Vector3.Zero.ToArray();
-
-            // Vertices
-            babylonMesh.positions = null;
-
-            // Faces
-            babylonMesh.indices = null;
-
-            return id;
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/StandardMaterial.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Entities/StandardMaterial.cs
deleted file mode 100644
index fb45877..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Entities/StandardMaterial.cs	
+++ /dev/null
@@ -1,76 +0,0 @@
-﻿using System;
-using System.IO;
-using BabylonExport.Core.Exporters;
-using SharpDX;
-
-namespace BabylonExport.Core
-{
-    public class StandardMaterial
-    {
-        public string Name { get; set; }
-
-        public Color3 Diffuse { get; set; }
-        public Color3 Emissive { get; set; }
-        public Color3 Specular { get; set; }
-
-        public float Alpha { get; set; }
-        public float SpecularPower { get; set; }
-
-        public string DiffuseTexture { get; set; }
-
-        public bool BackFaceCulling { get; set; }
-
-        public Guid ID
-        {
-            get;
-            private set;
-        }
-
-        public StandardMaterial(string name)
-        {
-            ID = Guid.NewGuid();
-            Name = name;
-            DiffuseTexture = "";
-
-            Diffuse = new Color3(1, 1, 1);
-            Specular = new Color3(1, 1, 1);
-
-            SpecularPower = 32;
-
-            Alpha = 1.0f;
-
-            BackFaceCulling = true;
-        }
-
-        public void CreateBabylonMaterial(BabylonScene scene)
-        {
-            var babylonMaterial = new BabylonMaterial();
-            scene.MaterialsList.Add(babylonMaterial);
-
-            // Guid
-            babylonMaterial.id = ID.ToString();
-
-            // Name
-            babylonMaterial.name = Name;
-
-            // Data
-            babylonMaterial.backFaceCulling = BackFaceCulling;
-            babylonMaterial.diffuse = Diffuse.ToArray();
-            babylonMaterial.emissive = Emissive.ToArray();
-            babylonMaterial.specular = Specular.ToArray();
-            babylonMaterial.specularPower = SpecularPower;
-            babylonMaterial.alpha = Alpha;
-
-            if (string.IsNullOrEmpty(DiffuseTexture))
-            {
-                babylonMaterial.diffuseTexture = null;
-                return;
-            }
-
-            babylonMaterial.diffuseTexture = new BabylonTexture();
-            babylonMaterial.diffuseTexture.name = Path.GetFileName(DiffuseTexture);
-
-            scene.AddTexture(DiffuseTexture);
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/Blender/io_export_babylon.py b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/Blender/io_export_babylon.py
deleted file mode 100644
index ee68f53..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/Blender/io_export_babylon.py	
+++ /dev/null
@@ -1,1003 +0,0 @@
-bl_info = {
-    "name": "Babylon.js",
-    "author": "David Catuhe",
-    "version": (1, 0),
-    "blender": (2, 67, 0),
-    "location": "File > Export > Babylon.js (.babylon)",
-    "description": "Export Babylon.js scenes (.babylon)",
-    "warning": "",
-    "wiki_url": "",
-    "tracker_url": "",
-    "category": "Import-Export"}
-    
-import math
-import os
-import bpy
-import string
-import bpy_extras.io_utils
-from bpy.props import *
-import mathutils, math
-import struct
-import shutil
-from os import remove
-from bpy_extras.io_utils import (ExportHelper, axis_conversion)
-from bpy.props import (BoolProperty, FloatProperty, StringProperty, EnumProperty, FloatVectorProperty)
-from math import radians
-from mathutils import *
-
-class SubMesh:
-    materialIndex = 0
-    verticesStart = 0
-    verticesCount = 0
-    indexStart = 0
-    indexCount = 0
-    
-class MultiMaterial:
-    name = ""
-    materials = []
-
-class Export_babylon(bpy.types.Operator, ExportHelper):  
-    """Export Babylon.js scene (.babylon)""" 
-    bl_idname = "scene.babylon"
-    bl_label = "Export Babylon.js scene"
-
-    filename_ext = ".babylon"
-    filepath = ""
-    
-    # global_scale = FloatProperty(name="Scale", min=0.01, max=1000.0, default=1.0)
-
-    def execute(self, context):
-           return Export_babylon.save(self, context, **self.as_keywords(ignore=("check_existing", "filter_glob", "global_scale")))
-           
-    def mesh_triangulate(mesh):
-        try:
-            import bmesh
-            bm = bmesh.new()
-            bm.from_mesh(mesh)
-            bmesh.ops.triangulate(bm, faces=bm.faces)
-            bm.to_mesh(mesh)
-            mesh.calc_tessface()
-            bm.free()
-        except:
-            pass
-
-    def write_matrix4(file_handler, name, matrix):
-        file_handler.write(",\""+name+"\":[")
-
-        tempMatrix = matrix.copy()
-        tempMatrix.transpose()
-
-        first = True
-        for vect in tempMatrix:
-            if (first != True):
-                file_handler.write(",")
-            first = False;
-
-            file_handler.write("%.4f,%.4f,%.4f,%.4f"%(vect[0],vect[1], vect[2], vect[3]))
-                
-        file_handler.write("]")
-            
-    def write_array3(file_handler, name, array):
-        file_handler.write(",\""+name+"\":[" + "%.4f,%.4f,%.4f"%(array[0],array[1],array[2]) + "]")     
-    
-    def write_color(file_handler, name, color):
-        file_handler.write(",\""+name+"\":[" + "%.4f,%.4f,%.4f"%(color.r,color.g,color.b) + "]")
-
-    def write_vector(file_handler, name, vector):
-        file_handler.write(",\""+name+"\":[" + "%.4f,%.4f,%.4f"%(vector.x,vector.z,vector.y) + "]")
-
-    def write_quaternion(file_handler, name, quaternion):
-        file_handler.write(",\""+name+"\":[" + "%.4f,%.4f,%.4f,%.4f"%(quaternion.x,quaternion.z,quaternion.y, -quaternion.w) + "]")
-
-    def write_vectorScaled(file_handler, name, vector, mult):
-        file_handler.write(",\""+name+"\":[" + "%.4f,%.4f,%.4f"%(vector.x * mult, vector.z * mult, vector.y * mult) + "]")
-    
-    def write_string(file_handler, name, string, noComma=False):
-        if noComma == False:
-            file_handler.write(",")
-        file_handler.write("\""+name+"\":\"" + string + "\"")
-    
-    def write_float(file_handler, name, float):
-        file_handler.write(",\""+name+"\":" + "%.4f"%(float))
-        
-    def write_int(file_handler, name, int, noComma=False):
-        if noComma == False:
-            file_handler.write(",")
-        file_handler.write("\""+name+"\":" + str(int))
-        
-    def write_bool(file_handler, name, bool, noComma=False):    
-        if noComma == False:
-            file_handler.write(",") 
-        if bool:
-            file_handler.write("\""+name+"\":" + "true")
-        else:
-            file_handler.write("\""+name+"\":" + "false")
-            
-    def getDirection(matrix):
-        return (matrix.to_3x3() * mathutils.Vector((0.0, 0.0, -1.0))).normalized()
-            
-    def export_camera(object, scene, file_handler):     
-        invWorld = object.matrix_world.copy()
-        invWorld.invert()
-        
-        target = mathutils.Vector((0, 1, 0)) * invWorld
-    
-        file_handler.write("{")
-        Export_babylon.write_string(file_handler, "name", object.name, True)        
-        Export_babylon.write_string(file_handler, "id", object.name)
-        Export_babylon.write_vector(file_handler, "position", object.location)
-        Export_babylon.write_vector(file_handler, "target", target)
-        Export_babylon.write_float(file_handler, "fov", object.data.angle)
-        Export_babylon.write_float(file_handler, "minZ", object.data.clip_start)
-        Export_babylon.write_float(file_handler, "maxZ", object.data.clip_end)
-        Export_babylon.write_float(file_handler, "speed", 1.0)
-        Export_babylon.write_float(file_handler, "inertia", 0.9)
-        Export_babylon.write_bool(file_handler, "checkCollisions", object.data.checkCollisions)
-        Export_babylon.write_bool(file_handler, "applyGravity", object.data.applyGravity)
-        Export_babylon.write_array3(file_handler, "ellipsoid", object.data.ellipsoid)
-
-        locAnim = False
-        coma = False
-
-        if object.animation_data:
-            if object.animation_data.action:
-                file_handler.write(",\"animations\":[")
-                for fcurve in object.animation_data.action.fcurves:
-                    if fcurve.data_path == "location" and locAnim == False:
-                        Export_babylon.export_animation(object, scene, file_handler, "location", "position", coma, 1)
-                        locAnim = coma = True
-                file_handler.write("]")
-                #Set Animations
-                Export_babylon.write_bool(file_handler, "autoAnimate", True)
-                Export_babylon.write_int(file_handler, "autoAnimateFrom", 0)
-                Export_babylon.write_int(file_handler, "autoAnimateTo", bpy.context.scene.frame_end - bpy.context.scene.frame_start + 1)
-                Export_babylon.write_bool(file_handler, "autoAnimateLoop", True)
-
-        file_handler.write("}")
-        
-    def export_light(object, scene, file_handler):      
-        light_type_items = {'POINT': 0, 'SUN': 1, 'SPOT': 2, 'HEMI': 3, 'AREA': 0}
-        light_type = light_type_items[object.data.type]
-        
-        file_handler.write("{")
-        Export_babylon.write_string(file_handler, "name", object.name, True)        
-        Export_babylon.write_string(file_handler, "id", object.name)        
-        Export_babylon.write_float(file_handler, "type", light_type)
-        if light_type == 0:
-            Export_babylon.write_vector(file_handler, "position", object.location)
-        elif light_type == 1:
-            direction = Export_babylon.getDirection(object.matrix_world)
-            Export_babylon.write_vector(file_handler, "position", object.location)
-            Export_babylon.write_vector(file_handler, "direction", direction)
-        elif light_type == 2:
-            Export_babylon.write_vector(file_handler, "position", object.location)
-            direction = Export_babylon.getDirection(object.matrix_world)
-            Export_babylon.write_vector(file_handler, "direction", direction)
-            Export_babylon.write_float(file_handler, "angle", object.data.spot_size)
-            Export_babylon.write_float(file_handler, "exponent", object.data.spot_blend * 2)
-        else:
-            matrix_world = object.matrix_world.copy()
-            matrix_world.translation = mathutils.Vector((0, 0, 0))
-            direction = mathutils.Vector((0, 0, -1)) * matrix_world
-            Export_babylon.write_vector(file_handler, "direction", -direction)
-            Export_babylon.write_color(file_handler, "groundColor", mathutils.Color((0, 0, 0)))
-            
-        Export_babylon.write_float(file_handler, "intensity", object.data.energy)
-        
-        if object.data.use_diffuse:
-            Export_babylon.write_color(file_handler, "diffuse", object.data.color)
-        else:
-            Export_babylon.write_color(file_handler, "diffuse", mathutils.Color((0, 0, 0)))
-
-        if object.data.use_specular:
-            Export_babylon.write_color(file_handler, "specular", object.data.color)
-        else:
-            Export_babylon.write_color(file_handler, "specular", mathutils.Color((0, 0, 0)))
-            
-        file_handler.write("}")     
-    
-    def export_texture(slot, level, texture, scene, file_handler, filepath):    
-        # Copy image to output
-        try:
-            image = texture.texture.image
-            imageFilepath = os.path.normpath(bpy.path.abspath(image.filepath))
-            basename = os.path.basename(imageFilepath)
-            targetdir = os.path.dirname(filepath)
-            targetpath = os.path.join(targetdir, basename)
-            
-            if image.packed_file:
-                image.save_render(targetpath)
-            else:
-                sourcepath = bpy.path.abspath(image.filepath)
-                shutil.copy(sourcepath, targetdir)
-        except:
-            pass
-        
-        # Export
-        file_handler.write(",\""+slot+"\":{")
-        Export_babylon.write_string(file_handler, "name", basename, True)
-        Export_babylon.write_float(file_handler, "level", level)
-        Export_babylon.write_float(file_handler, "hasAlpha", texture.texture.use_alpha)
-        
-        coordinatesMode = 0;
-        if (texture.mapping == "CUBE"):
-            coordinatesMode = 3;
-        if (texture.mapping == "SPHERE"):
-            coordinatesMode = 1;        
-        Export_babylon.write_int(file_handler, "coordinatesMode", coordinatesMode)
-        Export_babylon.write_float(file_handler, "uOffset", texture.offset.x)
-        Export_babylon.write_float(file_handler, "vOffset", texture.offset.y)
-        Export_babylon.write_float(file_handler, "uScale", texture.scale.x)
-        Export_babylon.write_float(file_handler, "vScale", texture.scale.y)
-        Export_babylon.write_float(file_handler, "uAng", 0)
-        Export_babylon.write_float(file_handler, "vAng", 0)     
-        Export_babylon.write_float(file_handler, "wAng", 0)
-        
-        if (texture.texture.extension == "REPEAT"):
-            Export_babylon.write_bool(file_handler, "wrapU", True)      
-            Export_babylon.write_bool(file_handler, "wrapV", True)
-        else:
-            Export_babylon.write_bool(file_handler, "wrapU", False)     
-            Export_babylon.write_bool(file_handler, "wrapV", False)
-            
-        Export_babylon.write_int(file_handler, "coordinatesIndex", 0)
-        
-        file_handler.write("}") 
-        
-    def export_material(material, scene, file_handler, filepath):       
-        file_handler.write("{")
-        Export_babylon.write_string(file_handler, "name", material.name, True)      
-        Export_babylon.write_string(file_handler, "id", material.name)
-        Export_babylon.write_color(file_handler, "ambient", material.ambient * material.diffuse_color)
-        Export_babylon.write_color(file_handler, "diffuse", material.diffuse_intensity * material.diffuse_color)
-        Export_babylon.write_color(file_handler, "specular", material.specular_intensity * material.specular_color)
-        Export_babylon.write_float(file_handler, "specularPower", material.specular_hardness)
-        Export_babylon.write_color(file_handler, "emissive", material.emit * material.diffuse_color)        
-        Export_babylon.write_float(file_handler, "alpha", material.alpha)
-        Export_babylon.write_bool(file_handler, "backFaceCulling", material.game_settings.use_backface_culling)
-                
-        # Textures
-        for mtex in material.texture_slots:
-            if mtex and mtex.texture and mtex.texture.type == 'IMAGE':
-                if mtex.texture.image:
-                    if (mtex.use_map_color_diffuse and(mtex.texture_coords != 'REFLECTION')):
-                        # Diffuse
-                        Export_babylon.export_texture("diffuseTexture", mtex.diffuse_color_factor, mtex, scene, file_handler, filepath)
-                    if mtex.use_map_ambient:
-                        # Ambient
-                        Export_babylon.export_texture("ambientTexture", mtex.ambient_factor, mtex, scene, file_handler, filepath)
-                    if mtex.use_map_alpha:
-                        # Opacity
-                        Export_babylon.export_texture("opacityTexture", mtex.alpha_factor, mtex, scene, file_handler, filepath)
-                    if mtex.use_map_color_diffuse and (mtex.texture_coords == 'REFLECTION'):
-                        # Reflection
-                        Export_babylon.export_texture("reflectionTexture", mtex.diffuse_color_factor, mtex, scene, file_handler, filepath)
-                    if mtex.use_map_emit:
-                        # Emissive
-                        Export_babylon.export_texture("emissiveTexture", mtex.emit_factor, mtex, scene, file_handler, filepath)     
-                    if mtex.use_map_normal:
-                        # Bump
-                        Export_babylon.export_texture("bumpTexture", mtex.emit_factor, mtex, scene, file_handler, filepath)                         
-        
-        file_handler.write("}")         
-    
-    def export_multimaterial(multimaterial, scene, file_handler):       
-        file_handler.write("{")
-        Export_babylon.write_string(file_handler, "name", multimaterial.name, True)
-        Export_babylon.write_string(file_handler, "id", multimaterial.name)
-        
-        file_handler.write(",\"materials\":[")
-        first = True
-        for materialName in multimaterial.materials:
-            if first != True:
-                file_handler.write(",")
-            file_handler.write("\"" + materialName +"\"")
-            first = False
-        file_handler.write("]")
-        file_handler.write("}")
-
-    def export_animation(object, scene, file_handler, typeBl, typeBa, coma, mult):
-        if coma == True:
-            file_handler.write(",")
-        
-        file_handler.write("{")
-        Export_babylon.write_int(file_handler, "dataType", 1, True)
-        Export_babylon.write_int(file_handler, "framePerSecond", 30)
-        Export_babylon.write_int(file_handler, "loopBehavior", 1)
-        Export_babylon.write_string(file_handler, "name", typeBa+" animation")
-        Export_babylon.write_string(file_handler, "property", typeBa)
-        
-        file_handler.write(",\"keys\":[")
-            
-        frames = dict() 
-        for fcurve in object.animation_data.action.fcurves:
-            if fcurve.data_path == typeBl:
-                for key in fcurve.keyframe_points: 
-                    frame = key.co.x 
-                    frames[frame] = 1
-            
-        #for each frame (next step ==> set for key frames)
-        i = 0
-        for Frame in sorted(frames):
-            if i == 0 and Frame != 0.0:
-                file_handler.write("{")
-                Export_babylon.write_int(file_handler, "frame", 0, True)
-                bpy.context.scene.frame_set(int(Frame + bpy.context.scene.frame_start))
-                Export_babylon.write_vectorScaled(file_handler, "values", getattr(object,typeBl), mult)
-                file_handler.write("},")
-            i = i + 1
-            file_handler.write("{")
-            Export_babylon.write_int(file_handler, "frame", Frame, True)
-            bpy.context.scene.frame_set(int(Frame + bpy.context.scene.frame_start))
-            Export_babylon.write_vectorScaled(file_handler, "values", getattr(object,typeBl), mult)
-            file_handler.write("}")
-            if i != len(frames):
-                file_handler.write(",")
-            else:
-                file_handler.write(",{")
-                Export_babylon.write_int(file_handler, "frame", bpy.context.scene.frame_end - bpy.context.scene.frame_start + 1, True)
-                bpy.context.scene.frame_set(int(Frame + bpy.context.scene.frame_start))
-                Export_babylon.write_vectorScaled(file_handler, "values", getattr(object,typeBl), mult)
-                file_handler.write("}")
-        
-        file_handler.write("]}")
-
-    def export_mesh(object, scene, file_handler, multiMaterials):
-        # Get mesh  
-        mesh = object.to_mesh(scene, True, "PREVIEW")
-        
-        # Transform
-        loc = mathutils.Vector((0, 0, 0))
-        rot = mathutils.Quaternion((0, 0, 0, 1))
-        scale = mathutils.Vector((1, 1, 1))
-        
-        world = object.matrix_world
-        if object.parent and object.parent.type == "ARMATURE" and len(object.vertex_groups) > 0:
-            hasSkeleton = True
-        else:
-            hasSkeleton = False
-            if (object.parent):
-                world = object.parent.matrix_world.inverted() * object.matrix_world
-
-        loc, rot, scale = world.decompose()
-                                                
-        # Triangulate mesh if required
-        Export_babylon.mesh_triangulate(mesh)
-        
-        # Getting vertices and indices
-        positions=",\"positions\":["
-        normals=",\"normals\":["
-        indices=",\"indices\":["    
-
-        hasUV = True;
-        hasUV2 = True;
-        hasVertexColor = True
-
-        if len(mesh.tessface_uv_textures) > 0:
-            UVmap=mesh.tessface_uv_textures[0].data
-            uvs=",\"uvs\":["    
-        else:
-            hasUV = False
-            
-        if len(mesh.tessface_uv_textures) > 1:
-            UV2map=mesh.tessface_uv_textures[1].data
-            uvs2=",\"uvs2\":["  
-        else:
-            hasUV2 = False
-
-        if len(mesh.vertex_colors) > 0:
-            Colormap = mesh.tessface_vertex_colors.active.data
-            colors=",\"colors\":["  
-        else:
-            hasVertexColor = False
-
-        if hasSkeleton:
-            skeletonWeight = ",\"matricesWeights\":["
-            skeletonIndices = ",\"matricesIndices\":["
-            
-        alreadySavedVertices = []
-        vertices_UVs=[]
-        vertices_UV2s=[]
-        vertices_Colors=[]
-        vertices_indices=[]
-        subMeshes = []
-                
-        for v in range(0, len(mesh.vertices)):
-            alreadySavedVertices.append(False)
-            vertices_UVs.append([])
-            vertices_UV2s.append([])
-            vertices_Colors.append([])
-            vertices_indices.append([])
-                       
-        materialsCount = max(1, len(object.material_slots))
-        verticesCount = 0
-        indicesCount = 0
-
-        for materialIndex in range(materialsCount):
-            subMeshes.append(SubMesh())
-            subMeshes[materialIndex].materialIndex = materialIndex
-            subMeshes[materialIndex].verticesStart = verticesCount
-            subMeshes[materialIndex].indexStart = indicesCount
-        
-            for face in mesh.tessfaces:  # For each face
-                
-                if face.material_index != materialIndex:
-                    continue
-                
-                for v in range(3): # For each vertex in face
-                    vertex_index = face.vertices[v]
-                    vertex = mesh.vertices[vertex_index]
-                    position = vertex.co
-                    normal = vertex.normal
-
-                    #skeletons
-                    if hasSkeleton:
-                        matricesWeights = []
-                        matricesIndices = 0
-                        matricesWeights.append(0.0)
-                        matricesWeights.append(0.0)
-                        matricesWeights.append(0.0)
-                        matricesWeights.append(0.0)
-
-                        # Getting influences
-                        i = 0
-                        offset = 0
-                        for group in vertex.groups:
-                            index = group.group
-                            weight = group.weight
-
-                            for boneIndex, bone in enumerate(object.parent.pose.bones):
-                                if object.vertex_groups[index].name == bone.name:
-                                    matricesWeights[i] = weight
-                                    matricesIndices += boneIndex << offset
-                                    offset = offset + 8
-
-                                    i = i + 1
-                                    if (i == 4):
-                                        break;
-                            if (i == 4):
-                                break;
-
-
-                    # Texture coordinates
-                    if hasUV:
-                        vertex_UV = UVmap[face.index].uv[v]
-                        
-                    if hasUV2:
-                        vertex_UV2 = UV2map[face.index].uv[v]
-
-                    # Vertex color
-                    if hasVertexColor:      
-                        if v == 0:              
-                            vertex_Color = Colormap[face.index].color1
-                        if v == 1:              
-                            vertex_Color = Colormap[face.index].color2
-                        if v == 2:              
-                            vertex_Color = Colormap[face.index].color3
-                        
-                    # Check if the current vertex is already saved                  
-                    alreadySaved = alreadySavedVertices[vertex_index] and not hasSkeleton
-                    if alreadySaved:
-                        alreadySaved=False                      
-                    
-                        # UV
-                        index_UV = 0
-                        for savedIndex in vertices_indices[vertex_index]:
-                            if hasUV:                                               
-                                vUV = vertices_UVs[vertex_index][index_UV]
-                                if (vUV[0]!=vertex_UV[0] or vUV[1]!=vertex_UV[1]):
-                                    continue
-
-                            if hasUV2:
-                                vUV2 = vertices_UV2s[vertex_index][index_UV]
-                                if (vUV2[0]!=vertex_UV2[0] or vUV2[1]!=vertex_UV2[1]):
-                                    continue
-
-                            if hasVertexColor:
-                                vColor = vertices_Colors[vertex_index][index_UV]
-                                if (vColor.r!=vertex_Color.r or vColor.g!=vertex_Color.g or vColor.b!=vertex_Color.b):
-                                    continue
-
-                            if vertices_indices[vertex_index][index_UV] >= subMeshes[materialIndex].verticesStart:
-                                alreadySaved=True
-                                break
-
-                            index_UV+=1                 
-
-                    if (alreadySaved):
-                        # Reuse vertex
-                        index=vertices_indices[vertex_index][index_UV]
-                    else:
-                        # Export new one
-                        index=verticesCount
-                        alreadySavedVertices[vertex_index]=True
-                        if hasUV:
-                            vertices_UVs[vertex_index].append(vertex_UV)
-                            uvs+="%.4f,%.4f,"%(vertex_UV[0], vertex_UV[1])
-                        if hasUV2:
-                            vertices_UV2s[vertex_index].append(vertex_UV2)
-                            uvs2+="%.4f,%.4f,"%(vertex_UV2[0], vertex_UV2[1])
-                        if hasVertexColor:  
-                            vertices_Colors[vertex_index].append(vertex_Color)
-                            colors+="%.4f,%.4f,%.4f,"%(vertex_Color.r,vertex_Color.g,vertex_Color.b)
-                        if hasSkeleton:
-                            skeletonWeight+="%.4f,%.4f,%.4f,%.4f,"%(matricesWeights[0], matricesWeights[1], matricesWeights[2], matricesWeights[3])
-                            skeletonIndices+="%i,"%(matricesIndices)
-
-
-                        vertices_indices[vertex_index].append(index)
-                        
-                        positions+="%.4f,%.4f,%.4f,"%(position.x,position.z,position.y)             
-                        normals+="%.4f,%.4f,%.4f,"%(normal.x,normal.z,normal.y)                     
-                        
-                        verticesCount += 1
-                    indices+="%i,"%(index)
-                    indicesCount += 1           
-                    
-            subMeshes[materialIndex].verticesCount = verticesCount - subMeshes[materialIndex].verticesStart
-            subMeshes[materialIndex].indexCount = indicesCount - subMeshes[materialIndex].indexStart
-                
-        positions=positions.rstrip(',')
-        normals=normals.rstrip(',')
-        indices=indices.rstrip(',')
-            
-        positions+="]\n"
-        normals+="]\n"
-        indices+="]\n"  
-
-        if hasUV:
-            uvs=uvs.rstrip(',')
-            uvs+="]\n"
-
-        if hasUV2:
-            uvs2=uvs.rstrip(',')
-            uvs2+="]\n"
-
-        if hasVertexColor:
-            colors=uvs.rstrip(',')
-            colors+="]\n"
-
-        if hasSkeleton:
-            skeletonWeight=skeletonWeight.rstrip(', ')
-            skeletonWeight+="]\n"
-            skeletonIndices= skeletonIndices.rstrip(', ')
-            skeletonIndices+="]\n"
-
-                
-        # Writing mesh      
-        file_handler.write("{")
-        
-        Export_babylon.write_string(file_handler, "name", object.name, True)        
-        Export_babylon.write_string(file_handler, "id", object.name)        
-        if object.parent != None:
-            Export_babylon.write_string(file_handler, "parentId", object.parent.name)
-        
-        if len(object.material_slots) == 1:
-            material = object.material_slots[0].material
-            Export_babylon.write_string(file_handler, "materialId", object.material_slots[0].name)
-            
-            if material.game_settings.face_orientation != "BILLBOARD":
-                billboardMode = 0
-            else:
-                billboardMode = 7
-        elif len(object.material_slots) > 1:
-            multimat = MultiMaterial()
-            multimat.name = "Multimaterial#" + str(len(multiMaterials))
-            multimat.materials = []
-            Export_babylon.write_string(file_handler, "materialId", multimat.name)
-            for mat in object.material_slots:
-                multimat.materials.append(mat.name)
-                
-            multiMaterials.append(multimat)
-            billboardMode = 0
-        else:
-            billboardMode = 0
-            
-        Export_babylon.write_vector(file_handler, "position", loc)
-        Export_babylon.write_vectorScaled(file_handler, "rotation", rot.to_euler("XYZ"), -1)
-        Export_babylon.write_vector(file_handler, "scaling", scale)
-        Export_babylon.write_bool(file_handler, "isVisible", object.is_visible(scene))
-        Export_babylon.write_bool(file_handler, "isEnabled", True)
-        Export_babylon.write_bool(file_handler, "checkCollisions", object.data.checkCollisions)
-        Export_babylon.write_int(file_handler, "billboardMode", billboardMode)
-        Export_babylon.write_bool(file_handler, "receiveShadows", object.data.receiveShadows)
-        if hasSkeleton:
-            i = 0
-            for obj in [object for object in scene.objects if object.is_visible(scene)]:
-                if (obj.type == 'ARMATURE'):
-                   if (obj.name == object.parent.name):
-                        Export_babylon.write_int(file_handler, "skeletonId", i)
-                   else:
-                       i = i+1
-                
-        file_handler.write(positions)
-        file_handler.write(normals)
-
-        if hasUV:
-            file_handler.write(uvs)
-
-        if hasUV2:
-            file_handler.write(uvs2)
-
-        if hasVertexColor:
-            file_handler.write(colors)
-
-        if hasSkeleton:
-            file_handler.write(skeletonWeight)
-            file_handler.write(skeletonIndices)
-
-
-        file_handler.write(indices) 
-        
-        # Sub meshes
-        file_handler.write(",\"subMeshes\":[")
-        first = True
-        for subMesh in subMeshes:
-            if first == False:
-                file_handler.write(",")
-            file_handler.write("{")
-            Export_babylon.write_int(file_handler, "materialIndex", subMesh.materialIndex, True)
-            Export_babylon.write_int(file_handler, "verticesStart", subMesh.verticesStart)
-            Export_babylon.write_int(file_handler, "verticesCount", subMesh.verticesCount)
-            Export_babylon.write_int(file_handler, "indexStart", subMesh.indexStart)
-            Export_babylon.write_int(file_handler, "indexCount", subMesh.indexCount)
-            file_handler.write("}")
-            first = False
-        file_handler.write("]")
-                
-        #Export Animations
-        
-        rotAnim = False
-        locAnim = False
-        scaAnim = False
-        coma = False
-        
-        if object.animation_data:
-            if object.animation_data.action:
-                file_handler.write(",\"animations\":[")
-                for fcurve in object.animation_data.action.fcurves:
-                    if fcurve.data_path == "rotation_euler" and rotAnim == False:
-                        Export_babylon.export_animation(object, scene, file_handler, "rotation_euler", "rotation", coma, -1)
-                        rotAnim = coma = True
-                    elif fcurve.data_path == "location" and locAnim == False:
-                        Export_babylon.export_animation(object, scene, file_handler, "location", "position", coma, 1)
-                        locAnim = coma = True
-                    elif fcurve.data_path == "scale" and scaAnim == False:
-                        Export_babylon.export_animation(object, scene, file_handler, "scale", "scaling", coma, 1)
-                        locAnim = coma = True
-                file_handler.write("]")
-                #Set Animations
-                Export_babylon.write_bool(file_handler, "autoAnimate", True)
-                Export_babylon.write_int(file_handler, "autoAnimateFrom", 0)
-                Export_babylon.write_int(file_handler, "autoAnimateTo", bpy.context.scene.frame_end - bpy.context.scene.frame_start + 1)
-                Export_babylon.write_bool(file_handler, "autoAnimateLoop", True)
-
-
-        # Closing
-        file_handler.write("}")
-        
-    def export_shadowGenerator(lamp, scene, file_handler):      
-        file_handler.write("{")
-        if lamp.data.shadowMap == 'VAR':
-            Export_babylon.write_bool(file_handler, "useVarianceShadowMap", True, True)
-        else:
-            Export_babylon.write_bool(file_handler, "useVarianceShadowMap", False, True)
-            
-        Export_babylon.write_int(file_handler, "mapSize", lamp.data.shadowMapSize)  
-        Export_babylon.write_string(file_handler, "lightId", lamp.name)     
-        
-        file_handler.write(",\"renderList\":[")
-        multiMaterials = []
-        first = True
-        for object in [object for object in scene.objects]:
-            if (object.type == 'MESH' and object.data.castShadows):
-                if first != True:
-                    file_handler.write(",")
-
-                first = False
-                file_handler.write("\"" + object.name + "\"")
-        file_handler.write("]")         
-        file_handler.write("}") 
-
-    def export_bone_matrix(armature, bone, label, file_handler):
-        SystemMatrix = Matrix.Scale(-1, 4, Vector((0, 0, 1))) * Matrix.Rotation(radians(-90), 4, 'X')
-
-        if (bone.parent):
-            Export_babylon.write_matrix4(file_handler, label, (SystemMatrix * armature.matrix_world * bone.parent.matrix).inverted() * (SystemMatrix * armature.matrix_world * bone.matrix))
-        else:
-            Export_babylon.write_matrix4(file_handler, label, SystemMatrix * armature.matrix_world * bone.matrix)
-
-
-    def export_bones(armature, scene, file_handler, id):
-        file_handler.write("{")
-
-        Export_babylon.write_string(file_handler, "name", armature.name, True)
-        Export_babylon.write_int(file_handler, "id", id)
-        
-        file_handler.write(",\"bones\":[")
-        bones = armature.pose.bones
-        first = True
-        j = 0
-        for bone in bones:
-            if first != True:
-                file_handler.write(",")
-            first = False
-
-            file_handler.write("{")
-            Export_babylon.write_string(file_handler, "name", bone.name, True)
-            Export_babylon.write_int(file_handler, "index", j)
-
-            Export_babylon.export_bone_matrix(armature, bone, "matrix", file_handler)
-
-            if (bone.parent):
-                parentId = 0
-                for parent in bones:
-                    if parent == bone.parent:
-                        break;
-                    parentId += 1
-
-                Export_babylon.write_int(file_handler, "parentBoneIndex", parentId)
-            else:
-                Export_babylon.write_int(file_handler, "parentBoneIndex", -1)
-
-            #animation
-            if (armature.animation_data.action):
-               Export_babylon.export_bonesAnimation(armature, bone, scene, file_handler)
-            
-            j = j + 1
-
-            file_handler.write("}")
-
-        file_handler.write("]")
-
-        file_handler.write("}") 
-
-    def export_bonesAnimation(armature, bone, scene, file_handler):
-        file_handler.write(",\"animation\": {")
-
-        start_frame = scene.frame_start
-        end_frame = scene.frame_end
-        fps = scene.render.fps
-
-        Export_babylon.write_int(file_handler, "dataType", 3, True)
-        Export_babylon.write_int(file_handler, "framePerSecond", fps)
-
-        #keys
-        file_handler.write(",\"keys\":[")
-                        
-        for Frame in range(start_frame, end_frame + 1):
-                
-            file_handler.write("{")
-
-            Export_babylon.write_int(file_handler, "frame", Frame, True)
-            bpy.context.scene.frame_set(Frame)
-
-            Export_babylon.export_bone_matrix(armature, bone, "values", file_handler)
-
-            if Frame == end_frame:
-                file_handler.write("}")
-            else:
-                file_handler.write("},")
-        
-        file_handler.write("]")
-            
-        Export_babylon.write_int(file_handler, "loopBehavior", 1)
-        Export_babylon.write_string(file_handler, "name", "anim")
-        Export_babylon.write_string(file_handler, "property", "_matrix")
-
-        file_handler.write("}")
-        bpy.context.scene.frame_set(start_frame)
-
-    def save(operator, context, filepath="",
-        use_apply_modifiers=False,
-        use_triangulate=True,
-        use_compress=False):
-
-        # Open file
-        file_handler = open(filepath, 'w')  
-            
-        if bpy.ops.object.mode_set.poll():
-            bpy.ops.object.mode_set(mode='OBJECT')      
-
-        # Writing scene
-        scene=context.scene
-        
-        world = scene.world
-        if world:
-            world_ambient = world.ambient_color
-        else:
-            world_ambient = Color((0.0, 0.0, 0.0))
-
-        bpy.ops.screen.animation_cancel()
-        currentFrame = bpy.context.scene.frame_current
-        bpy.context.scene.frame_set(0)
-    
-        file_handler.write("{")
-        file_handler.write("\"autoClear\":true")
-        Export_babylon.write_color(file_handler, "clearColor", world_ambient)
-        Export_babylon.write_color(file_handler, "ambientColor", world_ambient)
-        Export_babylon.write_vector(file_handler, "gravity", scene.gravity)
-        
-        if world and world.mist_settings.use_mist:
-                Export_babylon.write_int(file_handler, "fogMode", 3)
-                Export_babylon.write_color(file_handler, "fogColor", world.horizon_color)
-                Export_babylon.write_float(file_handler, "fogStart", world.mist_settings.start)
-                Export_babylon.write_float(file_handler, "fogEnd", world.mist_settings.depth)
-                Export_babylon.write_float(file_handler, "fogDensity", 0.1)
-        
-        # Cameras
-        file_handler.write(",\"cameras\":[")
-        first = True
-        for object in [object for object in scene.objects if object.is_visible(scene)]:
-            if (object.type == 'CAMERA'):
-                if first != True:
-                    file_handler.write(",")
-
-                first = False
-                data_string = Export_babylon.export_camera(object, scene, file_handler)
-        file_handler.write("]")
-                        
-        # Active camera
-        if scene.camera != None:
-            Export_babylon.write_string(file_handler, "activeCamera", scene.camera.name)
-            
-        # Lights
-        file_handler.write(",\"lights\":[")
-        first = True
-        for object in [object for object in scene.objects if object.is_visible(scene)]:
-            if (object.type == 'LAMP'):
-                if first != True:
-                    file_handler.write(",")
-
-                first = False
-                data_string = Export_babylon.export_light(object, scene, file_handler)
-        file_handler.write("]")
-        
-        # Materials
-        materials = [mat for mat in bpy.data.materials if mat.users >= 1]
-        file_handler.write(",\"materials\":[")
-        first = True
-        for material in materials:
-            if first != True:
-                file_handler.write(",")
-
-            first = False
-            data_string = Export_babylon.export_material(material, scene, file_handler, filepath)
-        file_handler.write("]")
-        
-        # Meshes
-        file_handler.write(",\"meshes\":[")
-        multiMaterials = []
-        first = True
-        for object in [object for object in scene.objects]:
-            if (object.type == 'MESH'):
-                if first != True:
-                    file_handler.write(",")
-
-                first = False
-                data_string = Export_babylon.export_mesh(object, scene, file_handler, multiMaterials)
-        file_handler.write("]")
-        
-        # Multi-materials
-        file_handler.write(",\"multiMaterials\":[")
-        first = True
-        for multimaterial in multiMaterials:
-            if first != True:
-                file_handler.write(",")
-
-            first = False
-            data_string = Export_babylon.export_multimaterial(multimaterial, scene, file_handler)
-        file_handler.write("]")
-        
-        # Shadow generators
-        file_handler.write(",\"shadowGenerators\":[")
-        first = True
-        for object in [object for object in scene.objects if object.is_visible(scene)]:
-            if (object.type == 'LAMP' and object.data.shadowMap != 'NONE'):
-                if first != True:
-                    file_handler.write(",")
-
-                first = False
-                data_string = Export_babylon.export_shadowGenerator(object, scene, file_handler)
-        file_handler.write("]")
-
-        # Armatures/Bones
-        file_handler.write(",\"skeletons\":[")
-        first = True
-        i = 0
-        for object in [object for object in scene.objects if object.is_visible(scene)]:
-            if (object.type == 'ARMATURE'):
-                if first != True:
-                    file_handler.write(",")
-
-                first = False
-                data_string = Export_babylon.export_bones(object, scene, file_handler, i)
-                i = i+1
-        file_handler.write("]")     
-        
-        # Closing
-        file_handler.write("}")
-        file_handler.close()
-
-        bpy.context.scene.frame_set(currentFrame)
-        
-        return {'FINISHED'}
-
-# UI
-bpy.types.Mesh.checkCollisions = BoolProperty(
-    name="Check Collisions", 
-    default = False)
-    
-bpy.types.Mesh.castShadows = BoolProperty(
-    name="Cast Shadows", 
-    default = False)
-    
-bpy.types.Mesh.receiveShadows = BoolProperty(
-    name="Receive Shadows", 
-    default = False)
-    
-bpy.types.Camera.checkCollisions = BoolProperty(
-    name="Check Collisions", 
-    default = False)
-    
-bpy.types.Camera.applyGravity = BoolProperty(
-    name="Apply Gravity", 
-    default = False)    
-    
-bpy.types.Camera.ellipsoid = FloatVectorProperty(
-    name="Ellipsoid", 
-    default = mathutils.Vector((0.2, 0.9, 0.2)))
-
-bpy.types.Lamp.shadowMap = EnumProperty(
-    name="Shadow Map Type", 
-    items = (('NONE', "None", "No Shadow Maps"), ('STD', "Standard", "Use Standard Shadow Maps"), ('VAR', "Variance", "Use Variance Shadow Maps")),
-    default = 'NONE')
-    
-bpy.types.Lamp.shadowMapSize = IntProperty(
-    name="Shadow Map Size", 
-    default = 512)  
-
-class ObjectPanel(bpy.types.Panel):
-    bl_label = "Babylon.js"
-    bl_space_type = "PROPERTIES"
-    bl_region_type = "WINDOW"
-    bl_context = "data"
-    
-    def draw(self, context):
-        ob = context.object
-        if not ob or not ob.data:
-            return
-            
-        layout = self.layout
-        isMesh = isinstance(ob.data, bpy.types.Mesh)
-        isCamera = isinstance(ob.data, bpy.types.Camera)
-        isLight = isinstance(ob.data, bpy.types.Lamp)
-        
-        if isMesh:
-            layout.prop(ob.data, 'checkCollisions')     
-            layout.prop(ob.data, 'castShadows')     
-            layout.prop(ob.data, 'receiveShadows')      
-        elif isCamera:
-            layout.prop(ob.data, 'checkCollisions')
-            layout.prop(ob.data, 'applyGravity')
-            layout.prop(ob.data, 'ellipsoid')
-        elif isLight:
-            layout.prop(ob.data, 'shadowMap')
-            layout.prop(ob.data, 'shadowMapSize')   
-            
-### REGISTER ###
-
-def menu_func(self, context):
-    self.layout.operator(Export_babylon.bl_idname, text="Babylon.js (.babylon)")
-
-def register():
-    bpy.utils.register_module(__name__)
-    bpy.types.INFO_MT_file_export.append(menu_func)
-
-def unregister():
-    bpy.utils.unregister_module(__name__)
-    bpy.types.INFO_MT_file_export.remove(menu_func)
-
-    
-if __name__ == "__main__":
-    register()
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/FBXExporter.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/FBXExporter.cs
deleted file mode 100644
index 7f8979c..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/FBXExporter.cs	
+++ /dev/null
@@ -1,299 +0,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Runtime.Serialization.Json;
-using System.Windows.Forms;
-using BabylonExport.Core.Exporters.FBX;
-using Microsoft.Xna.Framework.Content;
-using Microsoft.Xna.Framework.Graphics;
-using SkinnedModel;
-using Vertice.Nova.Animations;
-
-namespace BabylonExport.Core.Exporters
-{
-    public class FBXExporter : IExporter
-    {
-        public event Action<int> OnImportProgressChanged;
-
-        readonly Dictionary<string, string> exportedTexturesFilename = new Dictionary<string, string>();
-        readonly List<StandardMaterial> exportedMaterials = new List<StandardMaterial>();
-
-        private int texturesCount = 0;
-
-        public string SupportedExtensions
-        {
-            get
-            {
-                return ".fbx";
-            }
-        }
-
-        public void GenerateBabylonFile(string file, string outputFile, bool skinned)
-        {
-            if (OnImportProgressChanged != null)
-                OnImportProgressChanged(0);
-
-
-            var scene = new BabylonScene(Path.GetDirectoryName(outputFile));
-
-            var services = new ServiceContainer();
-
-            // Create a graphics device
-            var form = new Form();
-            
-            services.AddService<IGraphicsDeviceService>(GraphicsDeviceService.AddRef(form.Handle, 1, 1));
-
-            var contentBuilder = new ContentBuilder();
-            var contentManager = new ContentManager(services, contentBuilder.OutputDirectory);
-
-            // Tell the ContentBuilder what to build.
-            contentBuilder.Clear();
-            contentBuilder.Add(Path.GetFullPath(file), "Model", null, skinned ? "SkinnedModelProcessor" : "ModelProcessor");
-
-            // Build this new model data.
-            string buildError = contentBuilder.Build();
-
-            if (string.IsNullOrEmpty(buildError))
-            {
-                var model = contentManager.Load<Model>("Model");
-                ParseModel(model, scene);
-            }
-            else
-            {
-                throw new Exception(buildError);
-            }
-
-            // Output
-            scene.Prepare();
-            using (var outputStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
-            {
-                var ser = new DataContractJsonSerializer(typeof(BabylonScene));
-                ser.WriteObject(outputStream, scene);
-            }
-
-            // Cleaning
-            foreach (var path in exportedTexturesFilename.Values)
-            {
-                File.Delete(path);
-            }
-
-            if (OnImportProgressChanged != null)
-                OnImportProgressChanged(100);
-        }
-
-        void ParseModel(Model model, BabylonScene scene)
-        {
-            var effects = model.Meshes.SelectMany(m => m.Effects).ToList();
-            var meshes = model.Meshes.ToList();
-            var total = effects.Count + meshes.Count;
-            var progress = 0;
-            SkinningData skinningData = null;
-            BabylonSkeleton currentSkeleton = null;
-
-            if (model.Tag != null)
-            {
-                skinningData = model.Tag as SkinningData;
-            }
-
-            if (skinningData != null)
-            {
-                var skeleton = new BabylonSkeleton();
-                skeleton.id = scene.SkeletonsList.Count;
-                skeleton.name = "Skeleton" + scene.SkeletonsList.Count;
-                ParseBones(skinningData, skeleton);
-
-                // Animations
-                ParseAnimationClip(skinningData, skeleton);
-
-                scene.SkeletonsList.Add(skeleton);
-                currentSkeleton = skeleton;
-            }
-
-            foreach (Effect effect in effects)
-            {
-                ParseEffect(effect, scene);
-                if (OnImportProgressChanged != null)
-                    OnImportProgressChanged(((progress++) * 100) / total);
-            }
-
-            foreach (var mesh in meshes)
-            {
-                ParseMesh(mesh, scene, currentSkeleton);
-                if (OnImportProgressChanged != null)
-                    OnImportProgressChanged(((progress++) * 100) / total);
-            }
-        }
-
-        private void ParseAnimationClip(SkinningData skinningData, BabylonSkeleton skeleton)
-        {
-            foreach (var clipKey in skinningData.AnimationClips.Keys)
-            {
-                var clip = skinningData.AnimationClips[clipKey];
-                var duration = clip.Duration.TotalMilliseconds;
-                var dic = new Dictionary<int, List<BabylonAnimationKey>>();
-
-                foreach (var keyframe in clip.Keyframes)
-                {
-                    if (!dic.ContainsKey(keyframe.Bone))
-                    {
-                        dic.Add(keyframe.Bone, new List<BabylonAnimationKey>());
-                    }
-
-                    var currentTime = (float)(keyframe.Time.TotalMilliseconds * 100.0 / duration);
-
-                    dic[keyframe.Bone].Add(new BabylonAnimationKey
-                    {
-                        frame = currentTime,
-                        values = keyframe.Transform.ToMatrix().ToArray()
-                    });
-                }
-
-                foreach (var index in dic.Keys)
-                {
-                    var bone = skeleton.bones[index];
-                    var babylonAnimation = new BabylonAnimation { name = bone.name + "Animation", property = "_matrix", dataType = BabylonAnimation.DataType.Matrix, loopBehavior = InterpolationLoop.Cycle, framePerSecond = 60 };
-                    babylonAnimation.keys = dic[index].ToArray();
-                    bone.animation = babylonAnimation;
-                }
-
-                return; // Only one animation track
-            }
-        }
-
-        private void ParseBones(SkinningData skinningData, BabylonSkeleton skeleton)
-        {
-            // Bones
-            var bones = new List<BabylonBone>();
-            for (int boneIndex = 0; boneIndex < skinningData.BindPose.Count; boneIndex++)
-            {
-                var newBone = new BabylonBone();
-                bones.Add(newBone);
-
-                newBone.name = "bone" + boneIndex;
-                newBone.index = boneIndex;
-                newBone.matrix = skinningData.BindPose[boneIndex].ToMatrix().ToArray();
-                newBone.parentBoneIndex = skinningData.SkeletonHierarchy[boneIndex];
-            }
-
-            skeleton.bones = bones.ToArray();
-        }
-
-        void ParseMesh(ModelMesh modelMesh, BabylonScene scene, BabylonSkeleton skeleton)
-        {
-            var proxyID = ProxyMesh.CreateBabylonMesh(modelMesh.Name, scene);
-            int indexName = 0;
-
-            foreach (var part in modelMesh.MeshParts)
-            {
-                var material = exportedMaterials.First(m => m.Name == part.Effect.GetHashCode().ToString());
-
-                var indices = new ushort[part.PrimitiveCount * 3];
-                part.IndexBuffer.GetData(part.StartIndex * 2, indices, 0, indices.Length);
-
-                if (part.VertexBuffer.VertexDeclaration.VertexStride >= PositionNormalTexturedWeights.Stride)
-                {
-                    var mesh = new Mesh<PositionNormalTexturedWeights>(material);
-                    var vertices = new PositionNormalTexturedWeights[part.NumVertices];
-
-                    part.VertexBuffer.GetData(part.VertexOffset * part.VertexBuffer.VertexDeclaration.VertexStride, vertices, 0, vertices.Length, part.VertexBuffer.VertexDeclaration.VertexStride);
-
-                    for (int index = 0; index < vertices.Length; index++)
-                    {
-                        vertices[index].TextureCoordinates.Y = 1.0f - vertices[index].TextureCoordinates.Y;
-                    }
-
-                    mesh.AddPart(indexName.ToString(), vertices.ToList(), indices.Select(i => (int)i).ToList());
-                    mesh.CreateBabylonMesh(scene, proxyID, skeleton);
-                }
-                else
-                {
-                    var mesh = new Mesh<PositionNormalTextured>(material);
-                    var vertices = new PositionNormalTextured[part.NumVertices];
-                    part.VertexBuffer.GetData(part.VertexOffset * PositionNormalTextured.Stride, vertices, 0, vertices.Length, PositionNormalTextured.Stride);
-
-                    for (int index = 0; index < vertices.Length; index++)
-                    {
-                        vertices[index].TextureCoordinates.Y = 1.0f - vertices[index].TextureCoordinates.Y;
-                    }
-
-                    mesh.AddPart(indexName.ToString(), vertices.ToList(), indices.Select(i => (int)i).ToList());
-                    mesh.CreateBabylonMesh(scene, proxyID, skeleton);
-                }
-
-                indexName++;
-            }
-        }
-
-        void ParseEffect(Effect effect, BabylonScene scene)
-        {
-            var material = new StandardMaterial(effect.GetHashCode().ToString());
-
-            exportedMaterials.Add(material);
-
-            var basicEffect = effect as BasicEffect;
-            var skinnedEffect = effect as SkinnedEffect;
-
-            if (basicEffect != null)
-            {
-                material.Alpha = basicEffect.Alpha;
-                material.Diffuse = basicEffect.DiffuseColor.ToColor3();
-                material.Emissive = basicEffect.EmissiveColor.ToColor3();
-                material.Specular = basicEffect.SpecularColor.ToColor3();
-                material.SpecularPower = basicEffect.SpecularPower;
-            }
-            else
-            {
-                material.Alpha = skinnedEffect.Alpha;
-                material.Diffuse = skinnedEffect.DiffuseColor.ToColor3();
-                material.Emissive = skinnedEffect.EmissiveColor.ToColor3();
-                material.Specular = skinnedEffect.SpecularColor.ToColor3();
-                material.SpecularPower = skinnedEffect.SpecularPower;
-            }
-
-            var texture = basicEffect != null ? basicEffect.Texture : skinnedEffect.Texture;
-
-            if (texture != null)
-            {
-                var id = texture.GetHashCode().ToString();
-
-                if (!exportedTexturesFilename.ContainsKey(id))
-                {
-                    var tempPath = Path.GetTempPath();
-                    var width = texture.Width;
-                    var height = texture.Height;
-                    string filename;
-
-                    if (texture.Format != SurfaceFormat.Dxt1)
-                    {
-                        filename = Path.Combine(tempPath, texturesCount + ".png");
-                    }
-                    else
-                    {
-                        filename = Path.Combine(tempPath, texturesCount + ".jpg");
-                    }
-
-                    texturesCount++;
-
-                    using (var file = new FileStream(filename, FileMode.Create, FileAccess.Write))
-                    {
-                        if (texture.Format != SurfaceFormat.Dxt1)
-                        {
-                            texture.SaveAsPng(file, width, height);
-                        }
-                        else
-                        {
-                            texture.SaveAsJpeg(file, width, height);
-                        }
-                    }
-
-                    exportedTexturesFilename.Add(id, filename);
-                }
-
-                material.DiffuseTexture = exportedTexturesFilename[id];
-            }
-
-            material.CreateBabylonMaterial(scene);
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/ContentBuilder.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/ContentBuilder.cs
deleted file mode 100644
index 1049753..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/ContentBuilder.cs	
+++ /dev/null
@@ -1,194 +0,0 @@
-using System;
-using System.IO;
-using System.Diagnostics;
-using System.Collections.Generic;
-using Microsoft.Build.Construction;
-using Microsoft.Build.Evaluation;
-using Microsoft.Build.Execution;
-using Microsoft.Build.Framework;
-using System.Windows.Forms;
-
-namespace BabylonExport.Core.Exporters.FBX
-{
-    class ContentBuilder : IDisposable
-    {
-        const string xnaVersion = ", Version=4.0.0.0, PublicKeyToken=842cf8be1de50553";
-
-        static readonly string[] pipelineAssemblies =
-        {
-            "Microsoft.Xna.Framework.Content.Pipeline.FBXImporter" + xnaVersion,
-            "Microsoft.Xna.Framework.Content.Pipeline.XImporter" + xnaVersion,
-            "Microsoft.Xna.Framework.Content.Pipeline.TextureImporter" + xnaVersion,
-            "Microsoft.Xna.Framework.Content.Pipeline.EffectImporter" + xnaVersion,
-            "SkinnedModelPipeline"
-        };
-
-        Project buildProject;
-        ProjectRootElement projectRootElement;
-        BuildParameters buildParameters;
-        readonly List<ProjectItem> projectItems = new List<ProjectItem>();
-        ErrorLogger errorLogger;
-
-        string buildDirectory;
-        string processDirectory;
-        string baseDirectory;
-
-        static int directorySalt;
-
-        public string OutputDirectory
-        {
-            get { return Path.Combine(buildDirectory, "bin"); }
-        }
-
-        public ContentBuilder()
-        {
-            CreateTempDirectory();
-            CreateBuildProject();
-        }
-
-        public void Dispose()
-        {
-            DeleteTempDirectory();
-        }
-
-        void CreateBuildProject()
-        {
-            string projectPath = Path.Combine(buildDirectory, "content.contentproj");
-            string outputPath = Path.Combine(buildDirectory, "bin");
-
-            // Create the build project.
-            projectRootElement = ProjectRootElement.Create(projectPath);
-
-            // Include the standard targets file that defines how to build XNA Framework content.
-            projectRootElement.AddImport(Application.StartupPath + "\\Exporters\\FBX\\XNA\\XNA Game Studio\\" +
-                                         "v4.0\\Microsoft.Xna.GameStudio.ContentPipeline.targets");
-
-            buildProject = new Project(projectRootElement);
-
-            buildProject.SetProperty("XnaPlatform", "Windows");
-            buildProject.SetProperty("XnaProfile", "Reach");
-            buildProject.SetProperty("XnaFrameworkVersion", "v4.0");
-            buildProject.SetProperty("Configuration", "Release");
-            buildProject.SetProperty("OutputPath", outputPath);
-            buildProject.SetProperty("ContentRootDirectory", ".");
-            buildProject.SetProperty("ReferencePath", Application.StartupPath);
-
-            // Register any custom importers or processors.
-            foreach (string pipelineAssembly in pipelineAssemblies)
-            {
-                buildProject.AddItem("Reference", pipelineAssembly);
-            }
-
-            // Hook up our custom error logger.
-            errorLogger = new ErrorLogger();
-
-            buildParameters = new BuildParameters(ProjectCollection.GlobalProjectCollection)
-                                  {Loggers = new ILogger[] {errorLogger}};
-        }
-
-        public void Add(string filename, string name, string importer, string processor)
-        {
-            ProjectItem item = buildProject.AddItem("Compile", filename)[0];
-
-            item.SetMetadataValue("Link", Path.GetFileName(filename));
-            item.SetMetadataValue("Name", name);
-
-            if (!string.IsNullOrEmpty(importer))
-                item.SetMetadataValue("Importer", importer);
-
-            if (!string.IsNullOrEmpty(processor))
-                item.SetMetadataValue("Processor", processor);
-
-            projectItems.Add(item);
-        }
-
-        public void Clear()
-        {
-            buildProject.RemoveItems(projectItems);
-
-            projectItems.Clear();
-        }
-
-        public string Build()
-        {
-            // Clear any previous errors.
-            errorLogger.Errors.Clear();
-
-            // Create and submit a new asynchronous build request.
-            BuildManager.DefaultBuildManager.BeginBuild(buildParameters);
-            
-            var request = new BuildRequestData(buildProject.CreateProjectInstance(), new string[0]);
-            BuildSubmission submission = BuildManager.DefaultBuildManager.PendBuildRequest(request);
-
-            submission.ExecuteAsync(null, null);
-
-            // Wait for the build to finish.
-            submission.WaitHandle.WaitOne();
-
-            BuildManager.DefaultBuildManager.EndBuild();
-
-            // If the build failed, return an error string.
-            if (submission.BuildResult.OverallResult == BuildResultCode.Failure)
-            {
-                return string.Join("\n", errorLogger.Errors.ToArray());
-            }
-
-            return null;
-        }
-
-        void CreateTempDirectory()
-        {
-            baseDirectory = Path.Combine(Path.GetTempPath(), GetType().FullName);
-            int processId = Process.GetCurrentProcess().Id;
-
-            processDirectory = Path.Combine(baseDirectory, processId.ToString());
-            directorySalt++;
-
-            buildDirectory = Path.Combine(processDirectory, directorySalt.ToString());
-
-            Directory.CreateDirectory(buildDirectory);
-
-            PurgeStaleTempDirectories();
-        }
-
-        void DeleteTempDirectory()
-        {
-            Directory.Delete(buildDirectory, true);
-
-            if (Directory.GetDirectories(processDirectory).Length == 0)
-            {
-                Directory.Delete(processDirectory);
-
-                if (Directory.GetDirectories(baseDirectory).Length == 0)
-                {
-                    Directory.Delete(baseDirectory);
-                }
-            }
-        }
-
-
-        void PurgeStaleTempDirectories()
-        {
-            // Check all subdirectories of our base location.
-            foreach (string directory in Directory.GetDirectories(baseDirectory))
-            {
-                // The subdirectory name is the ID of the process which created it.
-                int processId;
-
-                if (int.TryParse(Path.GetFileName(directory), out processId))
-                {
-                    try
-                    {
-                        // Is the creator process still running?
-                        Process.GetProcessById(processId);
-                    }
-                    catch (ArgumentException)
-                    {
-                        // If the process is gone, we can delete its temp directory.
-                        Directory.Delete(directory, true);
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/ErrorLogger.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/ErrorLogger.cs
deleted file mode 100644
index 960f46f..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/ErrorLogger.cs	
+++ /dev/null
@@ -1,49 +0,0 @@
-using System.Collections.Generic;
-using Microsoft.Build.Framework;
-
-namespace BabylonExport.Core.Exporters.FBX
-{
-    class ErrorLogger : ILogger
-    {
-        public void Initialize(IEventSource eventSource)
-        {
-            if (eventSource != null)
-            {
-                eventSource.ErrorRaised += ErrorRaised;
-            }
-        }
-
-        public void Shutdown()
-        {
-        }
-
-        void ErrorRaised(object sender, BuildErrorEventArgs e)
-        {
-            errors.Add(e.Message);
-        }
-
-        public List<string> Errors
-        {
-            get { return errors; }
-        }
-
-        List<string> errors = new List<string>();
-
-
-        string ILogger.Parameters
-        {
-            get { return parameters; }
-            set { parameters = value; }
-        }
-
-        string parameters;
-
-        LoggerVerbosity ILogger.Verbosity
-        {
-            get { return verbosity; }
-            set { verbosity = value; }
-        }
-
-        LoggerVerbosity verbosity = LoggerVerbosity.Detailed;
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/GraphicsDeviceService.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/GraphicsDeviceService.cs
deleted file mode 100644
index 99ffc2d..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/GraphicsDeviceService.cs	
+++ /dev/null
@@ -1,93 +0,0 @@
-using System;
-using System.Threading;
-using Microsoft.Xna.Framework.Graphics;
-
-#pragma warning disable 67
-
-namespace BabylonExport.Core.Exporters.FBX
-{
-    public class GraphicsDeviceService : IGraphicsDeviceService
-    {
-        static int referenceCount;
-
-        public static GraphicsDeviceService SingletonInstance
-        {
-            get;
-            private set;
-        }
-
-        GraphicsDeviceService(IntPtr windowHandle, int width, int height)
-        {
-            parameters = new PresentationParameters();
-
-            parameters.BackBufferWidth = Math.Max(width, 1);
-            parameters.BackBufferHeight = Math.Max(height, 1);
-            parameters.BackBufferFormat = SurfaceFormat.Color;
-            parameters.DepthStencilFormat = DepthFormat.Depth24;
-            parameters.DeviceWindowHandle = windowHandle;
-            parameters.PresentationInterval = PresentInterval.Immediate;
-            parameters.IsFullScreen = false;
-
-            GraphicsAdapter.UseReferenceDevice = true;
-
-            graphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter,
-                                                GraphicsProfile.Reach,
-                                                parameters);
-        }
-
-        public static GraphicsDeviceService AddRef(IntPtr windowHandle, int width, int height)
-        {
-            if (Interlocked.Increment(ref referenceCount) == 1)
-            {
-                SingletonInstance = new GraphicsDeviceService(windowHandle, width, height);
-            }
-
-            return SingletonInstance;
-        }
-
-        public void Release(bool disposing)
-        {
-            if (Interlocked.Decrement(ref referenceCount) == 0)
-            {
-                if (disposing)
-                {
-                    if (DeviceDisposing != null)
-                        DeviceDisposing(this, EventArgs.Empty);
-
-                    graphicsDevice.Dispose();
-                }
-
-                graphicsDevice = null;
-            }
-        }
-
-        public void ResetDevice(int width, int height)
-        {
-            if (DeviceResetting != null)
-                DeviceResetting(this, EventArgs.Empty);
-
-            parameters.BackBufferWidth = Math.Max(parameters.BackBufferWidth, width);
-            parameters.BackBufferHeight = Math.Max(parameters.BackBufferHeight, height);
-
-            graphicsDevice.Reset(parameters);
-
-            if (DeviceReset != null)
-                DeviceReset(this, EventArgs.Empty);
-        }
-
-        
-        public GraphicsDevice GraphicsDevice
-        {
-            get { return graphicsDevice; }
-        }
-
-        GraphicsDevice graphicsDevice;
-
-        PresentationParameters parameters;
-
-        public event EventHandler<EventArgs> DeviceCreated;
-        public event EventHandler<EventArgs> DeviceDisposing;
-        public event EventHandler<EventArgs> DeviceReset;
-        public event EventHandler<EventArgs> DeviceResetting;
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/ServiceContainer.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/ServiceContainer.cs
deleted file mode 100644
index 7973e65..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/ServiceContainer.cs	
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace BabylonExport.Core.Exporters.FBX
-{
-    public class ServiceContainer : IServiceProvider
-    {
-        Dictionary<Type, object> services = new Dictionary<Type, object>();
-
-        /// <summary>
-        /// Adds a new service to the collection.
-        /// </summary>
-        public void AddService<T>(T service)
-        {
-            services.Add(typeof(T), service);
-        }
-
-        /// <summary>
-        /// Looks up the specified service.
-        /// </summary>
-        public object GetService(Type serviceType)
-        {
-            object service;
-
-            services.TryGetValue(serviceType, out service);
-
-            return service;
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/Microsoft.Xna.GameStudio.ContentPipelineExtensions.targets b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/Microsoft.Xna.GameStudio.ContentPipelineExtensions.targets
deleted file mode 100644
index a67255e..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/Microsoft.Xna.GameStudio.ContentPipelineExtensions.targets	
+++ /dev/null
@@ -1,28 +0,0 @@
-﻿<!--
-***********************************************************************************************
-Microsoft.Xna.GameStudio.ContentPipelineExtensions.targets
-
-WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
-          created a backup copy.  Incorrect changes to this file will make it
-          impossible to load or build your projects from the command-line or the IDE.
-
-This file imports the version- and platform-specific targets for the project importing
-this file. This file also defines targets to produce an error if the specified targets
-file does not exist, but the project is built anyway (command-line or IDE build).
-
-Copyright (C) Microsoft Corporation. All rights reserved.
-***********************************************************************************************
--->
-
-<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
-  <PropertyGroup>
-    <_XnaVersionSpecificAvailablePlatforms>$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\$(XnaFrameworkVersion)\Microsoft.Xna.GameStudio.AvailablePlatforms.targets</_XnaVersionSpecificAvailablePlatforms>
-  </PropertyGroup>
-
-  <!--
-    Import the appropriate targets file, if it exists.
-  -->
-  <Import Condition="Exists('$(_XnaVersionSpecificAvailablePlatforms)')" Project="$(_XnaVersionSpecificAvailablePlatforms)" />
-
-</Project>
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/Microsoft.Xna.GameStudio.targets b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/Microsoft.Xna.GameStudio.targets
deleted file mode 100644
index 55e546b..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/Microsoft.Xna.GameStudio.targets	
+++ /dev/null
@@ -1,42 +0,0 @@
-﻿<!--
-***********************************************************************************************
-Microsoft.Xna.GameStudio.targets
-
-WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
-          created a backup copy.  Incorrect changes to this file will make it
-          impossible to load or build your projects from the command-line or the IDE.
-
-This file imports the version- and platform-specific targets for the project importing
-this file. This file also defines targets to produce an error if the specified targets
-file does not exist, but the project is built anyway (command-line or IDE build).
-
-Copyright (C) Microsoft Corporation. All rights reserved.
-***********************************************************************************************
--->
-
-<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
-  <PropertyGroup>
-    <_XnaVersionSpecificImportPath>$(XnaFrameworkVersion)\</_XnaVersionSpecificImportPath>
-    <_XnaPlatformSpecificTargetsFile>Microsoft.Xna.GameStudio.$(XnaPlatform).targets</_XnaPlatformSpecificTargetsFile>
-    <_XnaPlatformSpecificTargetsPath>$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\$(_XnaVersionSpecificImportPath)$(_XnaPlatformSpecificTargetsFile)</_XnaPlatformSpecificTargetsPath>
-  </PropertyGroup>
-
-  <!--
-    If the appropriate targets file exists, it will be imported and will override
-    this target definition. If it does not exist, then this target will produce an
-    error for the user if the user attempts to build.
-  -->
-  <PropertyGroup>
-    <PrepareForBuildDependsOn Condition="!Exists('$(_XnaPlatformSpecificTargetsPath)')">UnsupportedXnaProject;$(PrepareForBuildDependsOn)</PrepareForBuildDependsOn>
-  </PropertyGroup>
-  <Target Name="UnsupportedXnaProject">
-    <Error Text="Your installation of XNA Game Studio does not support this project (XNA Platform = '$(XnaPlatform)', XNA Framework Version = '$(XnaFrameworkVersion)')." />
-  </Target>
-
-  <!--
-    Import the appropriate targets file, if it exists.
-  -->
-  <Import Condition="Exists('$(_XnaPlatformSpecificTargetsPath)')" Project="$(_XnaPlatformSpecificTargetsPath)" />
-
-</Project>
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll
deleted file mode 100644
index ac8b20f..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.AvailablePlatforms.targets b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.AvailablePlatforms.targets
deleted file mode 100644
index 7343e0c..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.AvailablePlatforms.targets	
+++ /dev/null
@@ -1,24 +0,0 @@
-﻿<!--
-***********************************************************************************************
-Microsoft.Xna.GameStudio.AvailablePlatforms.targets
-
-WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
-          created a backup copy.  Incorrect changes to this file will make it
-          impossible to load or build your projects from the command-line or the IDE.
-
-This file defines the version-specific AvailablePlatforms property for Content Pipeline
-Extension Library (CPEL) projects. This definition makes the specified platforms available
-in the IDE's Configuration Manager. That way, upgraded CPEL projects can add new platform
-configurations if the newer version supports new platforms.
-
-Copyright (C) Microsoft Corporation. All rights reserved.
-***********************************************************************************************
--->
-
-<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
-  <PropertyGroup>
-    <AvailablePlatforms>x86,Xbox 360,Windows Phone</AvailablePlatforms>
-  </PropertyGroup>
-
-</Project>
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Common.targets b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Common.targets
deleted file mode 100644
index 8081e49..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Common.targets	
+++ /dev/null
@@ -1,286 +0,0 @@
-﻿<!--
-***********************************************************************************************
-Microsoft.Xna.GameStudio.Common.targets
-
-WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
-          created a backup copy.  Incorrect changes to this file will make it
-          impossible to load or build your projects from the command-line or the IDE.
-
-This file defines the steps in the standard build process specific for C# .NET projects.
-For example, it contains the step that actually calls the C# compiler.  The remainder
-of the build process is defined in Microsoft.Common.targets, which is imported by 
-this file.
-
-Copyright (C) Microsoft Corporation. All rights reserved.
-***********************************************************************************************
--->
-
-<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
-  <!-- These tasks are specific to the build process defined in this file, and are not considered general-purpose build tasks. -->
-  <UsingTask TaskName="XnaClubPackageTask" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\v4.0\Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll"/>
-
-  <!--
-    If the appropriate targets file exists, it will be imported and will override
-    this target definition. If it does not exist, then this target will produce an
-    error for the user if the user attempts to build.
-  -->
-  <PropertyGroup>
-    <PrepareForBuildDependsOn Condition="'$(_XnaPlatformSpecificTargetsPath)' == ''">XnaProjectFileNeedsUpgrade;$(PrepareForBuildDependsOn)</PrepareForBuildDependsOn>
-  </PropertyGroup>
-  <Target Name="XnaProjectFileNeedsUpgrade">
-    <Error Text="The project file '$(ProjectFileName)' appears to have been created with XNA Game Studio 3.0 CTP. For instructions on how to upgrade this project to work with the current version, copy and paste this link into your browser: http://go.microsoft.com/fwlink/?LinkId=121512." />
-  </Target>
-
-  <!-- Have our package build run after the user builds the project. -->
-  <PropertyGroup>
-    <BuildDependsOn>
-      $(BuildDependsOn);
-      XNAPackageBuild;
-    </BuildDependsOn>
-  </PropertyGroup>
-
-  <!--
-    Windows platform supports C# 4.0, while non-Windows platforms currently support up to C# 3.0.
-    For Windows platform, do not alter the setting.
-    For non-Windows platforms, set it to C# 3.0 if the user has not explicitly set it to something else.
-  -->
-  <PropertyGroup Condition=" '$(XnaPlatform)' != 'Windows' ">
-    <LangVersion Condition=" '$(LangVersion)' == '' ">3</LangVersion>
-  </PropertyGroup>
-
-  <!--
-        We will not look in the TargetFrameworkDirectory for Xbox 360, nor in the GAC.
-    -->
-  <PropertyGroup>
-    <!--
-        The SearchPaths property is set to find assemblies in the following order:
-
-            (1) Files from current project - indicated by {CandidateAssemblyFiles}
-            (2) $(ReferencePath) - the reference path property, which comes from the .USER file.
-            (3) The hintpath from the referenced item itself, indicated by {HintPathFromItem}.
-            (4) The directory of MSBuild's "target" runtime from GetFrameworkPath.
-                The "target" runtime folder is the folder of the runtime that MSBuild is a part of.
-            (5) Registered assembly folders, indicated by {Registry:*,*,*}
-            (6) Legacy registered assembly folders, indicated by {AssemblyFolders}
-            (7) Look in the application's output folder (like bin\debug)
-            (8) Resolve to the GAC.
-            (9) Treat the reference's Include as if it were a real file name.
-        -->
-    <AssemblySearchPaths Condition=" '$(XnaPlatform)' != 'Windows' ">
-      {CandidateAssemblyFiles};
-      $(ReferencePath);
-      {HintPathFromItem};
-      ;
-      {Registry:$(FrameworkRegistryBase),$(XnaFrameworkVersion),$(AssemblyFoldersSuffix)};
-      ;
-      ;
-      {RawFileName};
-      $(OutputPath)
-    </AssemblySearchPaths>
-  </PropertyGroup>
-
-  <!--
-    In VS 2008, a new feature was introduced to speed up the "F5" scenario when
-    no changes have occurred. It does this by skipping the build entirely if the
-    IDE believes there are no changes. This is fast, but unreliable because it
-    does not check all the same files as msbuild does. In XNA game projects, for
-    example, the IDE does not check if any content needs to be rebuilt. As a
-    result, F5 is way faster, but you may start debugging a project that is out
-    of date. To disable the new feature, we set DisableFastUpToDateCheck to true.
-  -->
-  <PropertyGroup>
-    <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
-  </PropertyGroup>
-
-  <!--
-    The TargetFrameworkAttribute is not available in the Compact Framework.
-  -->
-  <PropertyGroup>
-    <GenerateTargetFrameworkAttribute Condition="'$(XnaPlatform)' != 'Windows'">false</GenerateTargetFrameworkAttribute>
-  </PropertyGroup>
-
-  <!--  Build the Package if the Create XNA Club Package menu was selected.  -->
-  <Target Name="XnaPackageBuild">
-
-    <XnaClubPackageTask XnaFrameworkVersion="$(XnaFrameworkVersion)" XnaPlatform="$(XnaPlatform)" ProjectPath="$(ProjectDir)" OutputPath="$(OutputPath)" AssemblyName="$(AssemblyName)" TargetExt="$(TargetExt)" ArchiveName="$(XnaArchiveName)">
-      <Output PropertyName="XnaPackageVersion" TaskParameter="XnaFrameworkVersion" />
-      <Output PropertyName="XnaPackagePlatform" TaskParameter="XnaPlatform" />
-      <Output PropertyName="XnaPackageToolPath" TaskParameter="ToolPath" />
-      <Output PropertyName="DoPackageBuild" TaskParameter="ShouldPackage" />
-      <Output PropertyName="XnaPackageThumbnail" TaskParameter="Thumbnail" />
-      <Output PropertyName="XnaPackageOutputPath" TaskParameter="OutputPath" />
-    </XnaClubPackageTask>
-
-  </Target>
-
-  <PropertyGroup>
-    <!-- Default the runtime profile to the XNA Framework version being targeted. -->
-    <XnaFrameworkRuntimeProfile Condition="'$(XnaFrameworkRuntimeProfile)'==''">$(XnaPlatform).$(XnaFrameworkVersion).$(XnaProfile)</XnaFrameworkRuntimeProfile>
-
-    <!-- Define the intermediate file into which we write the runtime profile token. -->
-    <XnaFrameworkRuntimeProfileFile Condition="'$(XnaFrameworkRuntimeProfileFile)'==''">Microsoft.Xna.Framework.RuntimeProfile.txt</XnaFrameworkRuntimeProfileFile>
-
-    <!-- Make sure our target runs before the EmbeddedResource items are processed. -->
-    <PrepareResourceNamesDependsOn>
-      EmbedXnaFrameworkRuntimeProfile;
-      $(PrepareResourceNamesDependsOn)
-    </PrepareResourceNamesDependsOn>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ToBeEmbeddedResource Include="$(IntermediateOutputPath)$(XnaFrameworkRuntimeProfileFile)">
-      <LogicalName>Microsoft.Xna.Framework.RuntimeProfile</LogicalName>
-    </ToBeEmbeddedResource>
-  </ItemGroup>
-
-  <Target Name="EmbedXnaFrameworkRuntimeProfile"
-          Condition="'$(XnaFrameworkRuntimeProfile)' != '' and '$(BuildingProject)'=='true'"
-          Inputs="$(MSBuildProjectFile)"
-          Outputs="$(IntermediateOutputPath)$(XnaFrameworkRuntimeProfileFile)" >
-
-    <CreateItem Include="$(XnaFrameworkRuntimeProfile)">
-      <Output TaskParameter="Include" ItemName="_XnaFrameworkRuntimeProfile"/>
-    </CreateItem>
-
-    <WriteLinesToFile
-      File="$(IntermediateOutputPath)$(XnaFrameworkRuntimeProfileFile)"
-      Lines="@(_XnaFrameworkRuntimeProfile)"
-      Overwrite="true"/>
-
-    <CreateItem Include="$(IntermediateOutputPath)$(XnaFrameworkRuntimeProfileFile)">
-      <Output TaskParameter="Include" ItemName="FileWrites"/>
-    </CreateItem>
-
-    <CreateItem Include="@(ToBeEmbeddedResource)">
-      <Output TaskParameter="Include" ItemName="EmbeddedResource"/>
-    </CreateItem>
-
-  </Target>
-
-
-
-  <!-- Write the cache file listing all items to be copied to the output directory. -->
-  <Target
-      Name="XnaWriteCacheFile"
-      Inputs="@(AllItemsFullPathWithTargetPath)"
-      Outputs="$(MSBuildProjectFullPath).$(Configuration).cachefile"
-      AfterTargets="GetCopyToOutputDirectoryItems">
-
-    <WriteLinesToFile File="$(MSBuildProjectFullPath).$(Configuration).cachefile"
-                      Lines="@(AllItemsFullPathWithTargetPath->'%(TargetPath)')"
-                      Overwrite="true"/>
-  </Target>
-
-
-  <!--
-    ============================================================
-                                        XNAReadDependenciesCacheFile
-
-    Reads all cache files that we output from referenced XNA projects.  
-    Cache files contain the Content files target path information, which 
-    we use to populate the manifest ItemGroup _DeploymentManifestFiles
-    ============================================================
-    -->
-
-  <PropertyGroup>
-    <GenerateManifestsDependsOn>
-      _SplitProjectReferencesByFileExistence;
-      _CopySourceItemsToOutputDirectory;
-      XNAReadDependenciesCacheFile;
-      $(GenerateManifestsDependsOn)
-    </GenerateManifestsDependsOn>
-  </PropertyGroup>
-
-  <Target
-    Name="XNAReadDependenciesCacheFile">
-
-    <CreateItem Include="%(_MSBuildProjectReferenceExistent.Identity).$(Configuration).cachefile">
-      <Output ItemName="XNADependenciesCacheFiles" TaskParameter="Include"/>
-    </CreateItem>
-
-    <ReadLinesFromFile File="%(XNADependenciesCacheFiles.Identity)"
-                       Condition="'@(XNADependenciesCacheFiles)' != ''">
-      <Output TaskParameter="Lines" ItemName="_FromBuiltDependencyContentTargetPath"/>
-    </ReadLinesFromFile>
-
-    <CreateItem Include="$(OutputPath)%(_FromBuiltDependencyContentTargetPath.Identity)"
-                AdditionalMetadata="TargetPath=%(_FromBuiltDependencyContentTargetPath.Identity);IsDataFile=false"
-                Condition="'@(_FromBuiltDependencyContentTargetPath)' != ''">
-      <Output ItemName="_DeploymentManifestFiles" TaskParameter="Include" />
-    </CreateItem>
-  </Target>
-
-  <!--
-      ============================================================
-                                          GetReferenceAssemblyPaths
-
-      Redefines the standard GetReferenceAssemblyPaths to make the original
-      target conditional on the XnaPlatform property. The original target is
-      defined below as "RealGetReferenceAssemblyPaths".
-      
-      The additional paths are specific to the desktop framework, and we do not
-      want those appended to our reference paths in non-Windows projects.
-      ============================================================
-      -->
-  <Target
-      Name="GetReferenceAssemblyPaths"
-      DependsOnTargets="RealGetReferenceAssemblyPaths">
-  </Target>
-
-  <!--
-      ============================================================
-                                          RealGetReferenceAssemblyPaths
-
-      Get the paths for the Reference Assemblies for the known versions of the
-      .NET Framework.
-
-      These paths are used by the build process in order to resolve the correct
-      assemblies from the various directories, and to support multi-targeting
-      ============================================================
-      -->
-  <Target
-      Name="RealGetReferenceAssemblyPaths"
-      DependsOnTargets="$(GetReferenceAssemblyPathsDependsOn)"
-      Condition="'$(XnaPlatform)' == 'Windows'">
-
-    <!-- if TargetFrameworkDirectory doesn't have a custom value, clear it out; that way we can get reference paths and target framework directories all in the right order -->
-    <PropertyGroup>
-      <TargetFrameworkDirectory Condition="'@(_CombinedTargetFrameworkDirectoriesItem)' == '$(TargetFrameworkDirectory)'"/>
-    </PropertyGroup>
-
-    <!-- By default if there is no root path set then the task will assume it is Program Files\Reference Assemblies\Microsoft\Framework-->
-    <GetReferenceAssemblyPaths
-        Condition="'$(TargetFrameworkMoniker)' != '' and ('$(_TargetFrameworkDirectories)' == '' or '$(_FullFrameworkReferenceAssemblyPaths)' == '')"
-        TargetFrameworkMoniker="$(TargetFrameworkMoniker)"
-        RootPath="$(TargetFrameworkRootPath)"
-        BypassFrameworkInstallChecks="$(BypassFrameworkInstallChecks)"
-          >
-      <Output TaskParameter="ReferenceAssemblyPaths" PropertyName="_TargetFrameworkDirectories"/>
-      <Output TaskParameter="FullFrameworkReferenceAssemblyPaths" PropertyName="_FullFrameworkReferenceAssemblyPaths"/>
-      <Output TaskParameter="TargetFrameworkMonikerDisplayName" PropertyName="TargetFrameworkMonikerDisplayName" Condition="'$(TargetFrameworkMonikerDisplayName)' == ''"/>
-    </GetReferenceAssemblyPaths>
-
-    <PropertyGroup>
-      <TargetFrameworkDirectory>$(_TargetFrameworkDirectories);$(TargetFrameworkDirectory);$(WinFXAssemblyDirectory)</TargetFrameworkDirectory>
-    </PropertyGroup>
-
-    <!-- Remove the AssemblyFolders if no target framework directories could be found. This is to prevent us from
-               resolving from the assemblyfolders global location if we are not acutally targeting a framework-->
-
-    <PropertyGroup>
-      <RemoveAssemblyFoldersIfNoTargetFramework Condition="'$(RemoveAssemblyFoldersIfNoTargetFramework)' == ''">true</RemoveAssemblyFoldersIfNoTargetFramework>
-    </PropertyGroup>
-
-    <PropertyGroup Condition="'$(_TargetFrameworkDirectories)' == '' and '$(AssemblySearchPaths)' != '' and '$(RemoveAssemblyFoldersIfNoTargetFramework)' == 'true'">
-      <AssemblySearchPaths>$(AssemblySearchPaths.Replace('{AssemblyFolders}', '').Split(';'))</AssemblySearchPaths>
-    </PropertyGroup>
-
-    <PropertyGroup Condition="'$(_TargetFrameworkDirectories)' == ''">
-      <TargetFrameworkProfile/>
-    </PropertyGroup>
-  </Target>
-
-
-</Project>
-
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Content.targets b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Content.targets
deleted file mode 100644
index 7542506..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Content.targets	
+++ /dev/null
@@ -1,343 +0,0 @@
-<!--
-***********************************************************************************************
-Microsoft.Xna.GameStudio.Content.targets
-
-WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
-          created a backup copy.  Incorrect changes to this file will make it
-          impossible to load or build your projects from the command-line or the IDE.
-
-This file defines the steps in the standard build process specific for handling nested
-XNA Game Content projects. For example, it contains the step that builds the nested content
-and copies the built content to the output directory. The remainder of the build process is
-defined in Microsoft.Common.targets, which should be imported before importing this file.
-
-Copyright (C) Microsoft Corporation. All rights reserved.
-***********************************************************************************************
--->
-
-<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
-  <!-- Have our package build run after the user builds the project. -->
-  <PropertyGroup>
-    <CoreBuildDependsOn>
-      BuildContentProjects;
-      $(CoreBuildDependsOn)
-    </CoreBuildDependsOn>
-
-    <CoreCleanDependsOn>
-      CleanContentProjects;
-      $(CoreCleanDependsOn)
-    </CoreCleanDependsOn>
-  </PropertyGroup>
-
-  <!-- Specifies the platform and profile for which content will be built,
-       in case they are not the same as the code project. -->
-  <PropertyGroup>
-    <XnaContentPlatform Condition="'$(XnaContentPlatform)' == ''" >$(XnaPlatform)</XnaContentPlatform>
-    <XnaContentProfile Condition="'$(XnaContentProfile)' == ''" >$(XnaProfile)</XnaContentProfile>
-  </PropertyGroup>
-
-  <!--
-    ============================================================
-                                        _GetContentReferences
-
-    Creates ContentReference items for ProjectReference items which
-    are content project references. Also splits referenced projects
-    into two lists: those that exist on disk and those that don't.
-    ============================================================
-    -->
-  <Target
-    Name="_GetContentReferences">
-
-    <ItemGroup>
-      <ContentReference Include="@(ProjectReference)" Condition="'%(ProjectReference.XnaReferenceType)' == 'Content'" />
-      <!-- Break the project list into two lists: those that exist on disk and those that don't. -->
-      <_MSBuildContentProjectExistent Include="@(ContentReference)" Condition="Exists('%(Identity)')" />
-      <_MSBuildContentProjectReferenceNonexistent Include="@(ContentReference)" Condition="!Exists('%(Identity)')" />
-    </ItemGroup>   
-  </Target>
-
-  <!--
-    ============================================================
-                                BeforeAssignProjectConfiguration
-    
-    Removes content project references from the ProjectReference
-    item group. This is to opt out of the assembly resolution
-    and project reference configuration processes because content
-    projects do not produce DLLs.
-    ============================================================
-    -->
-  <PropertyGroup>
-    <BeforeAssignProjectConfigurationDependsOn>
-      _GetContentReferences
-    </BeforeAssignProjectConfigurationDependsOn>
-  </PropertyGroup>
-  
-  <Target
-    Name="BeforeAssignProjectConfiguration"
-    DependsOnTargets="$(BeforeAssignProjectConfigurationDependsOn)"
-    BeforeTargets="AssignProjectConfiguration">
-    
-    <ItemGroup>
-      <ProjectReference Remove="@(ContentReference)" />
-    </ItemGroup>
-  </Target>
-
-  <!--
-    ============================================================
-                                        SetParentOutputDir
-    ============================================================
-    -->  
-  <Target
-    Name="SetParentOutputDir">
-    
-    <CreateProperty Value="$(TargetDir)">
-      <Output TaskParameter="Value" PropertyName="ParentOutputDir"/>
-    </CreateProperty>
-    <CreateProperty Value="$(MSBuildProjectDirectory)\$(IntermediateOutputPath)">
-      <Output TaskParameter="Value" PropertyName="ParentIntermediateDir"/>
-    </CreateProperty>
-  </Target>
-  
-  <!--
-    ============================================================
-                                        BuildContentProjects
-
-    Builds nested content projects to match the current platform
-    and configuration. Projects can skip this target by setting
-    SkipNestedContentBuild to true.
-    ============================================================
-    -->
-  <PropertyGroup>
-    <BuildContentProjectsDependsOn>
-      PrepareForBuild;
-      _GetContentReferences;
-      SetParentOutputDir
-    </BuildContentProjectsDependsOn>
-  </PropertyGroup>
-
-  <Target
-    Name="BuildContentProjects"
-    DependsOnTargets="$(BuildContentProjectsDependsOn)"
-    Condition="'$(SkipNestedContentBuild)'!='true'" >
-
-    <!--
-        Always build nested content projects, because the IDE and/or solution does not build them.
-        
-        The $(ContentProjectBuildTargets) will normally be blank so that the project's
-        default target is used during a P2P reference. However if a custom build process requires
-        that the referenced project has a different target to build it can be specified.
-        -->
-
-    <MSBuild
-      Projects="@(_MSBuildContentProjectExistent)"
-      BuildInParallel="true"
-      Targets="$(ContentProjectBuildTargets)"
-      Properties="Configuration=$(Configuration); Platform=$(Platform); XnaPlatform=$(XnaContentPlatform); XnaProfile=$(XnaContentProfile); ParentOutputDir=$(ParentOutputDir); ParentIntermediateDir=$(ParentIntermediateDir); ParentProjectDir=$(ProjectDir); XnaCompressContent=$(XnaCompressContent)"
-      Condition="'@(_MSBuildContentProjectExistent)'!=''">
-
-      <Output TaskParameter="TargetOutputs" ItemName="_BuiltNestedContentFiles"/>
-
-    </MSBuild>
-
-  </Target>
-
-  <!--
-    ============================================================
-                                        CleanContentProjects
-
-    Cleans nested content projects matching the current platform
-    and configuration.
-    ============================================================
-    -->
-  <PropertyGroup>
-    <CleanContentProjectsDependsOn>
-      _GetContentReferences;
-      SetParentOutputDir
-    </CleanContentProjectsDependsOn>
-  </PropertyGroup>
-  
-  <Target
-    Name="CleanContentProjects"
-    DependsOnTargets="$(CleanContentProjectsDependsOn)">
-
-    <MSBuild
-      Projects="@(_MSBuildContentProjectExistent)"
-      Targets="Clean"
-      Properties="Configuration=$(Configuration); Platform=$(Platform); XnaPlatform=$(XnaContentPlatform); XnaProfile=$(XnaContentProfile); ParentOutputDir=$(ParentOutputDir); ParentIntermediateDir=$(ParentIntermediateDir)"
-      Condition="'@(_MSBuildContentProjectExistent)'!=''" />
-
-  </Target>
-
-  <!--
-    ============================================================
-                                        GetCopyToOutputDirectoryContentProjectItems
-
-    Creates an item group of all the most-recently-built outputs
-    from the nested projects. This target is meant to be chained
-    by GetCopyToOutputDirectoryItems, so that content can be added
-    to the list of files to copy from projects referencing this
-    one.
-    
-    Also hooking into MSBuild's preexisting GetCopyToOutputDirectoryItemDependsOn
-    (which now exists as a property in MSBuild3.5, where it didn't in MSBuild 2.0)
-    ============================================================
-    -->
-
-  <PropertyGroup>
-    <GetCopyToOutputDirectoryItemsDependsOn>
-      $(GetCopyToOutputDirectoryItemsDependsOn);
-      GetCopyToOutputDirectoryContentProjectItems
-    </GetCopyToOutputDirectoryItemsDependsOn>
-  </PropertyGroup>
-  
-  <PropertyGroup>
-    <GetCopyToOutputDirectoryContentProjectItemsDependsOn>
-      _GetContentReferences;
-      SetParentOutputDir
-    </GetCopyToOutputDirectoryContentProjectItemsDependsOn>
-  </PropertyGroup>
-
-  <Target
-    Name="GetCopyToOutputDirectoryContentProjectItems"
-    DependsOnTargets="$(GetCopyToOutputDirectoryContentProjectItemsDependsOn)">
-
-    <!-- Get items from child projects first. -->
-    <MSBuild
-      Projects="@(_MSBuildContentProjectExistent)"
-      Targets="GetCopyToOutputDirectoryItems"
-      Properties="Configuration=$(Configuration); Platform=$(Platform); XnaPlatform=$(XnaContentPlatform); XnaProfile=$(XnaContentProfile); ParentOutputDir=$(ParentOutputDir); ParentIntermediateDir=$(ParentIntermediateDir)"
-      Condition="'@(_MSBuildContentProjectExistent)'!=''">
-
-      <Output TaskParameter="TargetOutputs" ItemName="_AllNestedContentProjectItemsWithTargetPath"/>
-
-    </MSBuild>
-
-    <!-- Target outputs must be full paths because they will be consumed by a different project. -->
-    <CreateItem
-      Include="@(_AllNestedContentProjectItemsWithTargetPath->'%(FullPath)')"
-      Condition="'%(_AllNestedContentProjectItemsWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(_AllNestedContentProjectItemsWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"
-                >
-      <Output TaskParameter="Include" ItemName="AllItemsFullPathWithTargetPath"/>
-      <Output TaskParameter="Include" ItemName="_NestedContentItemsToCopyToOutputDirectoryAlways"
-              Condition="'%(_AllNestedContentProjectItemsWithTargetPath.CopyToOutputDirectory)'=='Always'"/>
-      <Output TaskParameter="Include" ItemName="_NestedContentItemsToCopyToOutputDirectory"
-              Condition="'%(_AllNestedContentProjectItemsWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"/>
-    </CreateItem>
-
-  </Target>
-
-  <!--
-  ============================================================
-                                      _CopySourceItemsToOutputDirectory
-  ============================================================
-  -->
-  <Target
-      Name="_CopySourceItemsToOutputDirectory"
-      DependsOnTargets="
-            GetCopyToOutputDirectoryItems;
-            _CopyOutOfDateSourceItemsToOutputDirectory;
-            _CopyOutOfDateSourceItemsToOutputDirectoryAlways;
-            GetCopyToOutputDirectoryContentProjectItems;
-            _CopyOutOfDateNestedContentItemsToOutputDirectory;
-            _CopyOutOfDateNestedContentItemsToOutputDirectoryAlways;"/>
-
-  
-
-
-  
-  <!--
-  ============================================================
-                                      _CopyOutOfDateNestedContentItemsToOutputDirectory
-
-  Copy files that have the CopyToOutputDirectory attribute set to 'PreserveNewest'.
-  ============================================================
-  -->
-  <Target
-      Name="_CopyOutOfDateNestedContentItemsToOutputDirectory"
-      Condition=" '@(_NestedContentItemsToCopyToOutputDirectory)' != '' "
-      Inputs="@(_NestedContentItemsToCopyToOutputDirectory)"
-      Outputs="@(_NestedContentItemsToCopyToOutputDirectory->'$(OutDir)%(TargetPath)')">
-
-    <!--
-    Not using SkipUnchangedFiles="true" because the application may want to change
-    one of these files and not have an incremental build replace it.
-    -->
-    <Copy
-        SourceFiles = "@(_NestedContentItemsToCopyToOutputDirectory)"
-        DestinationFiles = "@(_NestedContentItemsToCopyToOutputDirectory->'$(OutDir)%(TargetPath)')">
-
-      <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
-
-    </Copy>
-
-  </Target>
-
-  <!--
-  ============================================================
-                                      _CopyOutOfDateNestedContentItemsToOutputDirectoryAlways
-
-  Copy files that have the CopyToOutputDirectory attribute set to 'Always'.
-  ============================================================
-  -->
-  <Target
-      Name="_CopyOutOfDateNestedContentItemsToOutputDirectoryAlways"
-      Condition=" '@(_NestedContentItemsToCopyToOutputDirectoryAlways)' != '' ">
-
-    <!--
-    Not using SkipUnchangedFiles="true" because the application may want to change
-    one of these files and not have an incremental build replace it.
-    -->
-    <Copy
-        SourceFiles = "@(_NestedContentItemsToCopyToOutputDirectoryAlways)"
-        DestinationFiles = "@(_NestedContentItemsToCopyToOutputDirectoryAlways->'$(OutDir)%(TargetPath)')">
-
-      <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
-
-    </Copy>
-
-  </Target>
-
-
-  <!--
-    ============================================================
-                                        XNAReadContentCacheFile
-
-    Reads all cache files that we output to the intermediate path during the 
-    content build process.  Cache files contain the Content files target path 
-    information, which we use to populate the manifest ItemGroup 
-    _DeploymentManifestFiles
-    ============================================================
-    -->
-
-  <PropertyGroup>
-    <GenerateManifestsDependsOn>
-      _GetContentReferences;
-      _CopySourceItemsToOutputDirectory;
-      XNAReadContentCacheFile;
-      $(GenerateManifestsDependsOn)
-    </GenerateManifestsDependsOn>
-  </PropertyGroup>
-
-  <Target Name="XNAReadContentCacheFile">    
-    <XmlPeek XmlInputPath="%(ContentReference.Identity)" 
-             Namespaces="&lt;Namespace Prefix='msbuild' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/&gt;"
-             Query="/msbuild:Project/msbuild:PropertyGroup/msbuild:ProjectGuid/text()">
-      <Output TaskParameter="Result" ItemName="ContentProjectGuid" />
-    </XmlPeek>
-    <CreateItem Include="$(MSBuildProjectDirectory)\$(IntermediateOutputPath)cachefile-%(ContentProjectGuid.Identity)-targetpath.txt">
-      <Output ItemName="XNAAllCacheFiles" TaskParameter="Include"/>
-    </CreateItem>
-    
-    <ReadLinesFromFile File="%(XNAAllCacheFiles.Identity)" 
-                       Condition="'@(XNAAllCacheFiles)' != ''">
-      <Output TaskParameter="Lines" ItemName="_FromBuiltContentTargetPath"/>
-    </ReadLinesFromFile>
-
-    <CreateItem Include="$(OutputPath)%(_FromBuiltContentTargetPath.Identity)" 
-                AdditionalMetadata="TargetPath=%(_FromBuiltContentTargetPath.Identity);IsDataFile=false"
-                Condition="'@(_FromBuiltContentTargetPath)' != ''">
-      <Output ItemName="_DeploymentManifestFiles" TaskParameter="Include" />
-    </CreateItem>
-  </Target>
-</Project>
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.ContentPipeline.targets b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.ContentPipeline.targets
deleted file mode 100644
index 0d026ff..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.ContentPipeline.targets	
+++ /dev/null
@@ -1,493 +0,0 @@
-﻿<!--
-***********************************************************************************************
-Microsoft.Xna.GameStudio.ContentPipeline.targets
-
-WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
-          created a backup copy.  Incorrect changes to this file will make it
-          impossible to load or build your projects from the command-line or the IDE.
-
-This file defines the steps in the standard content build process for XNA Game Studio projects.
-
-Copyright (C) Microsoft Corporation. All rights reserved.
-***********************************************************************************************
--->
-
-<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
-  <!-- These tasks are specific to the build process defined in this file, and are not considered general-purpose build tasks. -->
-  <UsingTask TaskName="BuildContent"      AssemblyName="Microsoft.Xna.Framework.Content.Pipeline, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"/>
-  <UsingTask TaskName="BuildXact"         AssemblyName="Microsoft.Xna.Framework.Content.Pipeline, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"/>
-  <UsingTask TaskName="CleanContent"      AssemblyName="Microsoft.Xna.Framework.Content.Pipeline, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"/>
-  <UsingTask TaskName="GetLastOutputs"    AssemblyName="Microsoft.Xna.Framework.Content.Pipeline, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"/>
-  
-  <!--
-    ============================================================
-                                        _BuildXNAContentLists
-
-    Build the ItemGroups of content we want to process with the
-    XNA Content Pipeline.
-    ============================================================
-    -->
-  <Target 
-    Name="_BuildXNAContentLists" 
-    Condition="'$(BuildingProject)'=='true' or '$(BuildXnaContent)' == 'true'">
-
-    <CreateItem
-      Include="@(Compile)"
-      Condition="'%(Compile.Importer)' != 'XactImporter'">
-      <Output ItemName="XNAContent" TaskParameter="Include"/>
-    </CreateItem>
-
-    <CreateItem
-      Include="@(Compile)"
-      Condition="'%(Compile.Importer)' == 'XactImporter'">
-      <Output ItemName="XACTContent" TaskParameter="Include"/>
-    </CreateItem>
-
-  </Target>
-
-  <!--
-    ============================================================
-                                        CreateManifestResourceNames
-
-    This target is required by Microsoft.Common.targets.
-    ============================================================
-    -->
-  <Target
-    Name="CreateManifestResourceNames"
-    Condition="false"
-    DependsOnTargets="$(CreateManifestResourceNamesDependsOn)"/>
-
-  <!--
-    ============================================================
-                                        CoreCompile
-
-    This target is required by Microsoft.Common.targets. It compiles
-    content using the XNA Framework Content Pipeline.
-    ============================================================
-    -->
-  <Target 
-    Name="CoreCompile"
-    DependsOnTargets="$(CoreCompileDependsOn)" 
-    Condition="'$(BuildingProject)'=='true' or '$(BuildXnaContent)' == 'true'">
-
-    <Error Condition="'$(XNAContentPipelineTargetPlatform)' == ''" Text="The XNAContentPipelineTargetPlatform property is required to build content." />
-    <Error Condition="'$(XNAContentPipelineTargetProfile)' == ''"  Text="The XNAContentPipelineTargetProfile property is required to build content." />
-    
-    <!-- Build the non-XACT content. -->
-    <BuildContent
-      BuildConfiguration="$(Configuration)"
-      IntermediateDirectory="$(ProjectDir)$(IntermediateOutputPath)"
-      OutputDirectory="$(ParentOutputDir)$(ContentRootDirectory)"
-      PipelineAssemblies="@(ReferencePath)"
-      PipelineAssemblyDependencies="@(ReferenceDependencyPaths)"
-      RebuildAll="$(XNARebuildContent)"
-      RootDirectory="$(ProjectDir)"
-      LoggerRootDirectory="$(ParentProjectDir)"
-      SourceAssets="@(XNAContent)"
-      TargetPlatform="$(XNAContentPipelineTargetPlatform)"
-      TargetProfile="$(XNAContentPipelineTargetProfile)"
-      CompressContent="$(XNACompressContent)">
-      <Output ItemName="XNAIntermediateContentFiles" TaskParameter="IntermediateFiles"/>
-      <Output ItemName="XNAOutputContentFiles" TaskParameter="OutputContentFiles"/>
-      <Output ItemName="XNARebuiltContentFiles" TaskParameter="RebuiltContentFiles"/>
-    </BuildContent>
-
-    <!-- Build the XACT content.
-    <BuildXact
-      BuildConfiguration="$(Configuration)"
-      IntermediateDirectory="$(ProjectDir)$(IntermediateOutputPath)"
-      OutputDirectory="$(ParentOutputDir)$(ContentRootDirectory)"
-      RebuildAll="$(XNARebuildContent)"
-      RootDirectory="$(ProjectDir)"
-      LoggerRootDirectory="$(ParentProjectDir)"
-      TargetPlatform="$(XNAContentPipelineTargetPlatform)"
-      TargetProfile="$(XNAContentPipelineTargetProfile)"
-      XactProjects="@(XACTContent)"
-      XnaFrameworkVersion="$(XnaFrameworkVersion)">
-      <Output ItemName="_XNAIntermediateXactFiles" TaskParameter="IntermediateFiles"/>
-      <Output ItemName="XNAIntermediateContentFiles" TaskParameter="IntermediateFiles"/>
-      <Output ItemName="XNAOutputContentFiles" TaskParameter="OutputXactFiles"/>
-      <Output ItemName="XNARebuiltContentFiles" TaskParameter="RebuiltXactFiles"/>
-      <Output ItemName="_AllBuiltXactFiles" TaskParameter="OutputXactFiles"/>
-      <Output ItemName="_AddBuiltXactFiles" TaskParameter="RebuiltXactFiles"/>
-    </BuildXact>
-
-    <AssignTargetPath
-      Files="@(_XNAIntermediateXactFiles)"
-      RootFolder="$(ProjectDir)">
-      <Output TaskParameter="AssignedFiles" ItemName="_XNAIntermediateXactFilesWithTargetPath"/>
-    </AssignTargetPath>
-
-    <CreateItem
-      Include="@(_XNAIntermediateXactFilesWithTargetPath->'%(TargetPath)')">
-      <Output TaskParameter="Include" ItemName="FileWrites"/>
-    </CreateItem>
-
-    <AssignTargetPath
-      Files="@(_AllBuiltXactFiles)"
-      RootFolder="$(ParentOutputDir)">
-      <Output TaskParameter="AssignedFiles" ItemName="_AllBuiltXactFilesWithTargetPath"/>
-    </AssignTargetPath>
-    
-    <RemoveDuplicates
-      Inputs="@(_AllBuiltXactFilesWithTargetPath->'%(TargetPath)')">
-      <Output TaskParameter="Filtered" ItemName="_AllBuiltXactFilesNoDuplicates"/>
-    </RemoveDuplicates>
-    
-    <WriteLinesToFile
-      File="$(BaseIntermediateOutputPath)$(XactOutputCacheFile)"
-      Lines="@(_AllBuiltXactFilesNoDuplicates)"
-      Overwrite="true"/>
-
-    <CreateItem
-      Include="$(BaseIntermediateOutputPath)$(XactOutputCacheFile)">
-      <Output TaskParameter="Include" ItemName="FileWrites"/>
-    </CreateItem>
-     -->
-    <!-- Items in the Content item group are not built by the XNA Framework
-         Content Pipeline. This warning is for informational purposes only,
-         but can be disabled by advanced users if custom targets have been
-         defined.
-     -->
-    <Warning
-      Condition="'@(Content)'!='' and '$(DisableContentItemWarning)'!='true'"
-      Text="Project item '%(Content.Identity)' was not built with the XNA Framework Content Pipeline. Set its Build Action property to Compile to build it."/>
-
-    <!-- Items in the EmbeddedResource item group are not supported in nested
-         content projects. This error can be disabled by advanced users if custom
-         targets have been defined.
-     -->
-    <Error
-      Condition="'@(EmbeddedResource)'!='' and '$(DisableEmbeddedResourceItemError)'!='true'"
-      Text="Project item '%(EmbeddedResource.Identity)' could not be built. Embedded Resource is not a supported Build Action for items in the Content subproject."/>
-
-
-    <!-- Begin figuring out files that should go into cache file -->
-
-    <AssignTargetPath
-      Files="@(XNAOutputContentFiles)"
-      RootFolder="$(ParentOutputDir)">
-      <Output TaskParameter="AssignedFiles" ItemName="_XNAOutputCacheFilesWithTargetPath"/>
-    </AssignTargetPath>
-
-    <!-- Grab everything marked as 'Copy always' or 'Copy if newer' 
-         Do this for files marked with build action 'None', 'Compile', and 'Content'-->
-    <CreateItem
-      Include="@(ContentWithTargetPath->'%(FullPath)')"
-      Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(ContentWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'">
-      <Output TaskParameter="Include" ItemName="_XNAOutputCacheFilesWithTargetPath"/>
-    </CreateItem>
-
-    <CreateItem
-      Include="@(Compile->'%(FullPath)')"
-      Condition="'%(Compile.CopyToOutputDirectory)'=='Always' or '%(Compile.CopyToOutputDirectory)'=='PreserveNewest'">
-      <Output TaskParameter="Include" ItemName="_CacheCompileItemsToCopy"/>
-    </CreateItem>
-    <AssignTargetPath Files="@(_CacheCompileItemsToCopy)" RootFolder="$(MSBuildProjectDirectory)">
-      <Output TaskParameter="AssignedFiles" ItemName="_CacheCompileItemsToCopyWithTargetPathTemp" />
-    </AssignTargetPath>
-    <CreateItem
-      Include="@(_CacheCompileItemsToCopyWithTargetPathTemp)"
-      AdditionalMetadata="TargetPath=$(ContentRootDirectoryDir)%(_CacheCompileItemsToCopyWithTargetPathTemp.TargetPath)">
-      <Output TaskParameter="Include" ItemName="_CacheCompileItemsToCopyWithTargetPath"/>
-    </CreateItem>
-    <CreateItem Include="@(_CacheCompileItemsToCopyWithTargetPath)">
-      <Output TaskParameter="Include" ItemName="_XNAOutputCacheFilesWithTargetPath"/>
-    </CreateItem>
-
-    <CreateItem
-        Include="@(_NoneWithTargetPath->'%(FullPath)')"
-        Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'">
-      <Output TaskParameter="Include" ItemName="_XNAOutputCacheFilesWithTargetPath"/>
-    </CreateItem>
-
-    <WriteLinesToFile
-      File="$(ParentIntermediateDir)cachefile-$(ProjectGuid)-targetpath.txt"
-      Lines="@(_XNAOutputCacheFilesWithTargetPath->'%(TargetPath)')"
-      Overwrite="true" />
-  </Target>
-
-  <!--
-    ============================================================
-                                        XNAContentClean
-
-    Clean the XNA content from the project.
-    ============================================================
-    -->
-  <Target Name="XNAContentClean">
-
-    <CleanContent
-      BuildConfiguration="$(Configuration)"
-      IntermediateDirectory="$(ProjectDir)$(IntermediateOutputPath)"
-      OutputDirectory="$(ParentOutputDir)$(ContentRootDirectory)"
-      RootDirectory="$(ProjectDir)"
-      TargetPlatform="$(XNAContentPipelineTargetPlatform)"
-      TargetProfile="$(XNAContentPipelineTargetProfile)">
-    </CleanContent>
-
-    <Delete
-      Files="$(BaseIntermediateOutputPath)$(XactOutputCacheFile)"
-      Condition="Exists('$(BaseIntermediateOutputPath)$(XactOutputCacheFile)')"
-      TreatErrorsAsWarnings="true"/>
-
-    <CreateItem Include="$(ParentIntermediateDir)cachefile-*-targetpath.txt">
-      <Output TaskParameter="Include" ItemName="_XNAContentCleanCacheFiles"/>
-    </CreateItem>
-    
-    <Delete
-      Files="@(_XNAContentCleanCacheFiles)"
-      Condition="'@(_XNAContentCleanCacheFiles)' != ''"
-      TreatErrorsAsWarnings="true" />
-  </Target>
-
-  <!--
-    ============================================================
-                                        GetBuiltContentWithTargetPaths
-
-    Gathers the built content so that it can be copied by parent
-    projects.
-    ============================================================
-    -->
-  <Target
-    Name="GetBuiltContentWithTargetPaths"
-    Outputs="@(BuiltContentWithTargetPaths)">
-
-    <GetLastOutputs
-      IntermediateDirectory="$(ProjectDir)$(IntermediateOutputPath)">
-      <Output TaskParameter="OutputContentFiles" ItemName="LastBuiltContentFiles" />
-    </GetLastOutputs>
-
-    <!-- Add metadata so only new built content is copied to the output directory. -->
-    <CreateItem
-      Include="@(LastBuiltContentFiles)"
-      AdditionalMetadata="CopyToOutputDirectory=PreserveNewest">
-      <Output TaskParameter="Include" ItemName="LastBuiltContentFilesPreserveNewest"/>
-    </CreateItem>
-    
-    <AssignTargetPath
-      Files="@(LastBuiltContentFilesPreserveNewest)"
-      RootFolder="$(ParentOutputDir)">
-      <Output TaskParameter="AssignedFiles" ItemName="BuiltContentWithTargetPaths" />
-    </AssignTargetPath>
-
-  </Target>
-
-  <!--
-    ============================================================
-                                        GetBuiltXactContentWithTargetPaths
-
-    Gathers the built XACT content so that it can be copied by
-    parent projects.
-    ============================================================
-    -->
-  <Target
-    Name="GetBuiltXactContentWithTargetPaths"
-    Outputs="@(BuiltXactContentWithTargetPaths">
-
-    <ReadLinesFromFile
-      File="$(BaseIntermediateOutputPath)$(XactOutputCacheFile)"
-      Condition="Exists('$(BaseIntermediateOutputPath)$(XactOutputCacheFile)')">
-      <Output TaskParameter="Lines" ItemName="LastBuiltXactContent"/>
-    </ReadLinesFromFile>
-
-    <!-- Add metadata so only new built content is copied to the output directory. -->
-    <CreateItem
-      Include="@(LastBuiltXactContent->'$(ParentOutputDir)%(Identity)')"
-      AdditionalMetadata="CopyToOutputDirectory=PreserveNewest">
-      <Output TaskParameter="Include" ItemName="LastBuiltXactContentPreserveNewest"/>
-    </CreateItem>
-    
-    <AssignTargetPath
-      Files="@(LastBuiltXactContentPreserveNewest)"
-      RootFolder="$(ParentOutputDir)">
-      <Output TaskParameter="AssignedFiles" ItemName="BuiltXactContentWithTargetPaths" />
-    </AssignTargetPath>
-    
-  </Target>
-  
-  <!-- Microsoft.Common.targets must be imported *before* overriding anything in it. -->
-  
-  <Import Project="$(MSBuildBinPath)\Microsoft.Common.targets" />
-  
-  <PropertyGroup>
-    <!-- This is specified as an input to CoreCompile so that msbuild recognizes a project is dirty when the targets file changes. -->
-    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\v4.0\Microsoft.Xna.GameStudio.ContentPipeline.targets</MSBuildAllProjects>
-    <!-- This is normally specified by the parent code project, but we'll define it when content is being built stand-alone. -->
-    <ParentOutputDir Condition="'$(ParentOutputDir)'==''">$(TargetDir)</ParentOutputDir>
-
-    <!-- Have our content build run when the user builds the project. -->
-    <CoreCompileDependsOn>_BuildXNAContentLists</CoreCompileDependsOn>
-
-    <!-- Have our clean targets run when the user cleans the project (also invoked by Rebuild). -->
-    <CleanDependsOn>
-      XNAContentClean;
-      $(CleanDependsOn)
-    </CleanDependsOn>
-
-    <!-- Create a property with the correct target platform for the XNA Content Pipeline BuildContent task. -->
-    <XNAContentPipelineTargetPlatform Condition="'$(XNAContentPipelineTargetPlatform)' == ''">$(XnaPlatform)</XNAContentPipelineTargetPlatform>
-    <XNAContentPipelineTargetPlatform Condition="'$(XNAContentPipelineTargetPlatform)' == 'Xbox 360'">Xbox360</XNAContentPipelineTargetPlatform>
-    <XNAContentPipelineTargetPlatform Condition="'$(XNAContentPipelineTargetPlatform)' == 'Windows Phone'">WindowsPhone</XNAContentPipelineTargetPlatform>
-
-
-    <XNAContentPipelineTargetProfile Condition="'$(XNAContentPipelineTargetProfile)' == ''">$(XnaProfile)</XNAContentPipelineTargetProfile>
-
-    <ContentRootDirectory Condition="'$(ContentRootDirectory)' == ''">$(ProjectName)</ContentRootDirectory>  <!-- Example, Content\ -->
-    <!-- Make sure this is set to String.Empty for our special case as some tasks we don't own don't like /./ in paths -->
-    <ContentRootDirectoryDir Condition="'$(ContentRootDirectoryDir)' == '' and '$(ContentRootDirectory)' != '.'">$(ContentRootDirectory)</ContentRootDirectoryDir>
-    <!-- Ensure ContentDir has a trailing slash, so it can be concatenated -->
-    <ContentRootDirectoryDir Condition="'$(ContentRootDirectoryDir)' != '' and !HasTrailingSlash('$(ContentRootDirectoryDir)')">$(ContentRootDirectory)\</ContentRootDirectoryDir>
-
-    <XactOutputCacheFile Condition="'$(XactOutputCacheFile)'==''">$(MSBuildProjectFile).XactOutput.FileList.txt</XactOutputCacheFile>
-
-    <!-- AvailablePlatforms is the list of platform targets available. -->
-    <AvailablePlatforms>Xbox 360,x86,Windows Phone</AvailablePlatforms>
-  </PropertyGroup>
-
-  <!--
-    ============================================================
-                                        AssignTargetPaths
-
-    This target creates <TargetPath> tags for items. <TargetPath> is a relative folder plus filename
-    for the destination of this item. Overridden so that the nested project's source items can be
-    copied to the output directory.
-    ============================================================
-    -->
-  <Target
-      Name="AssignTargetPaths">
-
-    <AssignTargetPath Files="@(Content)" RootFolder="$(MSBuildProjectDirectory)">
-      <Output TaskParameter="AssignedFiles" ItemName="ContentWithTargetPathTemp" />
-    </AssignTargetPath>
-
-    <CreateItem
-      Include="@(ContentWithTargetPathTemp)"
-      AdditionalMetadata="TargetPath=$(ContentRootDirectoryDir)%(ContentWithTargetPathTemp.TargetPath)">
-      <Output TaskParameter="Include" ItemName="ContentWithTargetPath"/>
-    </CreateItem>
-
-    <AssignTargetPath Files="@(None)" RootFolder="$(MSBuildProjectDirectory)">
-      <Output TaskParameter="AssignedFiles" ItemName="_NoneWithTargetPathTemp" />
-    </AssignTargetPath>
-
-    <CreateItem
-      Include="@(_NoneWithTargetPathTemp)"
-      AdditionalMetadata="TargetPath=$(ContentRootDirectoryDir)%(_NoneWithTargetPathTemp.TargetPath)">
-      <Output TaskParameter="Include" ItemName="_NoneWithTargetPath"/>
-    </CreateItem>
-
-  </Target>
-
-  <!--
-    ============================================================
-                                        GetCopyToOutputDirectoryItems
-
-    Override the standard Microsoft.Common.targets' definition of
-    GetCopyToOutputDirectoryItems in order to add our built content
-    to @(AllItemsFullPathWithTargetPath).
-    ============================================================
-    -->
-  <PropertyGroup>
-    <GetCopyToOutputDirectoryItemsDependsOn>
-      GetBuiltContentWithTargetPaths;
-      GetBuiltXactContentWithTargetPaths;
-      AssignTargetPaths
-    </GetCopyToOutputDirectoryItemsDependsOn>
-  </PropertyGroup>
-
-  <Target
-      Name="GetCopyToOutputDirectoryItems"
-      Outputs="@(AllItemsFullPathWithTargetPath)"
-      DependsOnTargets="$(GetCopyToOutputDirectoryItemsDependsOn)">
-
-    <!-- Do not get items from child projects. Referenced projects are used by the Content Pipeline,
-         and we do not want to pass build-related assemblies to projects that reference this one. This
-         also means a Content project cannot reference another Content project. -->
-
-    <!-- Get built content items from this project. -->
-    <CreateItem
-        Include="@(BuiltContentWithTargetPaths->'%(FullPath)')"
-        Condition="'%(BuiltContentWithTargetPaths.CopyToOutputDirectory)'=='Always' or '%(BuiltContentWithTargetPaths.CopyToOutputDirectory)'=='PreserveNewest'"
-                >
-      <Output TaskParameter="Include" ItemName="AllItemsFullPathWithTargetPath"/>
-      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectoryAlways"
-              Condition="'%(BuiltContentWithTargetPaths.CopyToOutputDirectory)'=='Always'"/>
-      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectory"
-              Condition="'%(BuiltContentWithTargetPaths.CopyToOutputDirectory)'=='PreserveNewest'"/>
-    </CreateItem>
-
-    <!-- Get built XACT content items from this project. -->
-    <CreateItem
-        Include="@(BuiltXactContentWithTargetPaths->'%(FullPath)')"
-        Condition="'%(BuiltXactContentWithTargetPaths.CopyToOutputDirectory)'=='Always' or '%(BuiltXactContentWithTargetPaths.CopyToOutputDirectory)'=='PreserveNewest'"
-                >
-      <Output TaskParameter="Include" ItemName="AllItemsFullPathWithTargetPath"/>
-      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectoryAlways"
-              Condition="'%(BuiltXactContentWithTargetPaths.CopyToOutputDirectory)'=='Always'"/>
-      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectory"
-              Condition="'%(BuiltXactContentWithTargetPaths.CopyToOutputDirectory)'=='PreserveNewest'"/>
-    </CreateItem>
-
-    <!-- Get source items from this project. -->
-    <CreateItem
-        Include="@(ContentWithTargetPath->'%(FullPath)')"
-        Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(ContentWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"
-                >
-      <Output TaskParameter="Include" ItemName="AllItemsFullPathWithTargetPath"/>
-      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectoryAlways"
-              Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='Always'"/>
-      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectory"
-              Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"/>
-    </CreateItem>
-
-    <!-- Content projects do not have Embedded Resource build actions. -->
-
-    <CreateItem
-        Include="@(Compile->'%(FullPath)')"
-        Condition="'%(Compile.CopyToOutputDirectory)'=='Always' or '%(Compile.CopyToOutputDirectory)'=='PreserveNewest'">
-      <Output TaskParameter="Include" ItemName="_CompileItemsToCopy"/>
-    </CreateItem>
-    <AssignTargetPath Files="@(_CompileItemsToCopy)" RootFolder="$(MSBuildProjectDirectory)">
-      <Output TaskParameter="AssignedFiles" ItemName="_CompileItemsToCopyWithTargetPathTemp" />
-    </AssignTargetPath>
-    <CreateItem
-      Include="@(_CompileItemsToCopyWithTargetPathTemp)"
-      AdditionalMetadata="TargetPath=$(ContentRootDirectoryDir)%(_CompileItemsToCopyWithTargetPathTemp.TargetPath)">
-      <Output TaskParameter="Include" ItemName="_CompileItemsToCopyWithTargetPath"/>
-    </CreateItem>
-    <CreateItem Include="@(_CompileItemsToCopyWithTargetPath)">
-      <Output TaskParameter="Include" ItemName="AllItemsFullPathWithTargetPath"/>
-      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectoryAlways"
-              Condition="'%(_CompileItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='Always'"/>
-      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectory"
-              Condition="'%(_CompileItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"/>
-    </CreateItem>
-
-    <CreateItem
-        Include="@(_NoneWithTargetPath->'%(FullPath)')"
-        Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"
-                >
-      <Output TaskParameter="Include" ItemName="AllItemsFullPathWithTargetPath"/>
-      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectoryAlways"
-              Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always'"/>
-      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectory"
-              Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"/>
-    </CreateItem>
-
-  </Target>
-
-  <!--
-    ============================================================
-                                        CopyFilesToOutputDirectory
-
-    Override the standard Microsoft.Common.targets CopyFilesToOutputDirectory, since our content
-    project type doesn't build most of the regular code build outputs. We also don't copy references
-    that were copy local into the output directory, since references are for use during build only,
-    not runtime. Finally, we leave it up to the parent project to copy any of our source items to
-    its own output directory.
-    ============================================================
-    -->
-  <Target Name="CopyFilesToOutputDirectory"/>
-  
-</Project>
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Windows.targets b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Windows.targets
deleted file mode 100644
index 12ae2f4..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Windows.targets	
+++ /dev/null
@@ -1,26 +0,0 @@
-﻿<!--
-***********************************************************************************************
-Microsoft.Xna.GameStudio.Windows.targets
-
-WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
-          created a backup copy.  Incorrect changes to this file will make it
-          impossible to load or build your projects from the command-line or the IDE.
-
-This file defines the steps in the standard build process specific for XNA Game Studio
-projects targeting the Windows platform.
-
-Copyright (C) Microsoft Corporation. All rights reserved.
-***********************************************************************************************
--->
-
-<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
-  <!-- AvailablePlatforms is the list of platform targets available. -->
-  <PropertyGroup>
-    <AvailablePlatforms>x86</AvailablePlatforms>
-  </PropertyGroup>
-
-  <Import Project="Microsoft.Xna.GameStudio.Common.targets" />
-  <Import Project="Microsoft.Xna.GameStudio.Content.targets" />
-
-</Project>
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Xbox 360.targets b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Xbox 360.targets
deleted file mode 100644
index 23e1eb4..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/FBX/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Xbox 360.targets	
+++ /dev/null
@@ -1,54 +0,0 @@
-﻿<!--
-***********************************************************************************************
-Microsoft.Xna.GameStudio.Xbox 360.targets
-
-WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
-          created a backup copy.  Incorrect changes to this file will make it
-          impossible to load or build your projects from the command-line or the IDE.
-
-This file defines the steps in the standard build process specific for XNA Game Studio
-projects targeting the Xbox 360 platform.
-
-Copyright (C) Microsoft Corporation. All rights reserved.
-***********************************************************************************************
--->
-
-<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
-  <!-- AvailablePlatforms is the list of platform targets available. -->
-  <PropertyGroup>
-    <AvailablePlatforms>Xbox 360</AvailablePlatforms>
-  </PropertyGroup>
-
-  <!--
-        These are used to have the AssemblySearchPaths include the following registry location
-        when resolving assemblies:
-              
-            HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\XNA\AssemblyFolders\$(XnaFrameworkVersion)\$(XnaPlatform)\AssemblyFoldersEx
-
-    -->
-  <PropertyGroup>
-    <FrameworkRegistryBase>SOFTWARE\Microsoft\XNA\AssemblyFolders</FrameworkRegistryBase>
-    <AssemblyFoldersSuffix>$(XnaPlatform)\AssemblyFoldersEx</AssemblyFoldersSuffix>
-  </PropertyGroup>
-
-  <!--
-    In MSBuild 3.5, the ResolveAssemblyReference takes a new, redundant input
-    parameter to define the TargetFrameworkDirectory. We want this path defined
-    only for Windows platforms, because it allows resolution against Windows-only
-    assemblies.
-  -->
-  <Target
-    Name="GetFrameworkPaths"
-    DependsOnTargets="$(GetFrameworkPathsDependsOn)"
-    >
-
-    <PropertyGroup>
-      <TargetFrameworkDirectory Condition=" '$(XnaPlatform)' == 'Xbox 360' ">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\XNA\Game Studio\v4.0@InstallPath)References\Xbox360\</TargetFrameworkDirectory>
-    </PropertyGroup>
-  </Target>
-
-  <Import Project="Microsoft.Xna.GameStudio.Common.targets" />
-  <Import Project="Microsoft.Xna.GameStudio.Content.targets" />
-
-</Project>
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/IExporter.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/IExporter.cs
deleted file mode 100644
index 30f14b0..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/IExporter.cs	
+++ /dev/null
@@ -1,13 +0,0 @@
-﻿using System;
-
-namespace BabylonExport.Core
-{
-    public interface IExporter
-    {
-        event Action<int> OnImportProgressChanged;
-
-        string SupportedExtensions { get; }
-
-        void GenerateBabylonFile(string file, string outputFile, bool skinned);
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/MXB/NovaExporter.Materials.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/MXB/NovaExporter.Materials.cs
deleted file mode 100644
index 7f967db..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/MXB/NovaExporter.Materials.cs	
+++ /dev/null
@@ -1,468 +0,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Drawing.Imaging;
-using System.IO;
-using System.Linq;
-using BabylonExport;
-using SharpDX.Direct3D9;
-using Vertice.Core;
-using Vertice.Nova;
-using Vertice.Nova.Core;
-using Vertice.Nova.Materials;
-using System.Windows.Forms;
-
-namespace BabylonExport.Core.Exporters
-{
-    partial class NovaExporter
-    {
-        void DumpMaterials(BabylonScene babylonScene)
-        {
-            var count = 0;
-            foreach (NovaMaterial material in materialsToExport)
-            {
-                var stdMaterial = material as NovaStandardMaterial;
-
-                if (stdMaterial != null)
-                {
-                    DumpStandardMaterial(stdMaterial, babylonScene);
-                    continue;
-                }
-
-                var perPixelShader = material as NovaPerPixelShader;
-
-                if (perPixelShader != null)
-                {
-                    DumpPerPixelShader(perPixelShader, babylonScene);
-                    continue;
-                }
-
-                var multiMaterial = material as NovaMultiMaterial;
-
-                if (multiMaterial != null)
-                {
-                    DumpMultiMaterial(multiMaterial, babylonScene);
-                }
-
-                ReportProgressChanged(75 + (count++ * 25) / materialsToExport.Count);
-            }
-        }
-
-        void AttachMirrorPlane(BabylonTexture babylonTexture, NovaObject novaObject)
-        {
-            // Mirror plane
-            int f1, f2, f3;
-
-            if (novaObject.Is32bits)
-            {
-                f1 = novaObject.Indices32[2];
-                f2 = novaObject.Indices32[1];
-                f3 = novaObject.Indices32[0];
-            }
-            else
-            {
-                f1 = novaObject.Indices[2];
-                f2 = novaObject.Indices[1];
-                f3 = novaObject.Indices[0];
-            }
-            Vector3 a = novaObject.PositionOnlyVertices[f1];
-            Vector3 b = novaObject.PositionOnlyVertices[f2];
-            Vector3 c = novaObject.PositionOnlyVertices[f3];
-
-            var mainPlane = new Plane(a, b, c);
-
-            Matrix matrix = Matrix.Invert(novaObject.WorldMatrix);
-            matrix = Matrix.Transpose(matrix);
-            Plane plane = Plane.Transform(mainPlane, matrix);
-
-            babylonTexture.mirrorPlane = new[] { plane.Normal.X, plane.Normal.Y, plane.Normal.Z, plane.D };
-        }
-
-        void DumpStandardMaterial(NovaStandardMaterial stdMaterial, BabylonScene babylonScene)
-        {
-            var babylonMaterial = new BabylonMaterial();
-            babylonScene.MaterialsList.Add(babylonMaterial);
-
-            babylonMaterial.name = stdMaterial.Name;
-            babylonMaterial.id = stdMaterial.ID.ToString();
-            babylonMaterial.alpha = stdMaterial.Alpha;
-            babylonMaterial.ambient = (stdMaterial.Ambient * (1.0f - stdMaterial.SelfIllumination)).ToArray();
-            babylonMaterial.diffuse = (stdMaterial.Diffuse * (1.0f - stdMaterial.SelfIllumination)).ToArray();
-            babylonMaterial.emissive = (stdMaterial.Emissive * stdMaterial.SelfIllumination).ToArray();
-            babylonMaterial.specular = stdMaterial.Specular.ToArray();
-            babylonMaterial.specularPower = stdMaterial.SpecularSharpness;
-            babylonMaterial.backFaceCulling = (stdMaterial.CullMode == NovaCull.CounterClockwise);
-
-            if (stdMaterial.DiffuseTexture != null && stdMaterial.DiffuseTexture.HasTextureData && stdMaterial.OpacityTexture != null && stdMaterial.OpacityTexture.HasTextureData)
-            {
-                if (stdMaterial.DiffuseTexture.LoadedTexture == stdMaterial.OpacityTexture.LoadedTexture)
-                {
-                    stdMaterial.DiffuseTexture = stdMaterial.OpacityTexture;
-                    stdMaterial.OpacityTexture = null;
-                }
-            }
-
-            if (stdMaterial.DiffuseTexture != null && stdMaterial.DiffuseTexture.HasTextureData && !stdMaterial.DiffuseTexture.IsVideo && !stdMaterial.DiffuseTexture.IsCubeRender)
-            {
-                babylonMaterial.diffuseTexture = new BabylonTexture();
-                DumpTexture(stdMaterial.DiffuseTexture, babylonMaterial.diffuseTexture, babylonScene);
-            }
-
-            if (stdMaterial.AmbientTexture != null && stdMaterial.AmbientTexture.HasTextureData && !stdMaterial.AmbientTexture.IsVideo && !stdMaterial.AmbientTexture.IsCubeRender)
-            {
-                babylonMaterial.ambientTexture = new BabylonTexture();
-                DumpTexture(stdMaterial.AmbientTexture, babylonMaterial.ambientTexture, babylonScene);
-            }
-
-            if (stdMaterial.OpacityTexture != null && stdMaterial.OpacityTexture.HasTextureData && !stdMaterial.OpacityTexture.IsVideo && !stdMaterial.OpacityTexture.IsCubeRender)
-            {
-                babylonMaterial.opacityTexture = new BabylonTexture();
-                DumpTexture(stdMaterial.OpacityTexture, babylonMaterial.opacityTexture, babylonScene);
-            }
-
-            if (mirrorsMaterials.ContainsKey(stdMaterial))
-            {
-                babylonMaterial.reflectionTexture = new BabylonTexture();
-                var novaObject = mirrorsMaterials[stdMaterial];
-                DumpRenderTargetTexture(stdMaterial.ReflectionTexture, babylonMaterial.reflectionTexture, novaObject.MirrorMapSize, novaObject.MirrorLevel, novaObject.MirroredObjects);
-
-                AttachMirrorPlane(babylonMaterial.reflectionTexture, novaObject);
-            }
-            else if (stdMaterial.ReflectionTexture != null && stdMaterial.ReflectionTexture.HasTextureData && !stdMaterial.ReflectionTexture.IsVideo && !stdMaterial.ReflectionTexture.IsCubeRender)
-            {
-                babylonMaterial.reflectionTexture = new BabylonTexture();
-                DumpTexture(stdMaterial.ReflectionTexture, babylonMaterial.reflectionTexture, babylonScene);
-            }
-
-            if (stdMaterial.EmissiveTexture != null && stdMaterial.EmissiveTexture.HasTextureData && !stdMaterial.EmissiveTexture.IsVideo && !stdMaterial.EmissiveTexture.IsCubeRender)
-            {
-                babylonMaterial.emissiveTexture = new BabylonTexture();
-                DumpTexture(stdMaterial.EmissiveTexture, babylonMaterial.emissiveTexture, babylonScene);
-            }
-
-            if (stdMaterial.SpecularTexture != null && stdMaterial.SpecularTexture.HasTextureData && !stdMaterial.SpecularTexture.IsVideo && !stdMaterial.SpecularTexture.IsCubeRender)
-            {
-                babylonMaterial.specularTexture = new BabylonTexture();
-                DumpTexture(stdMaterial.SpecularTexture, babylonMaterial.specularTexture, babylonScene);
-            }
-
-            if (stdMaterial.BumpTexture != null && stdMaterial.BumpTexture.HasTextureData && !stdMaterial.BumpTexture.IsVideo && !stdMaterial.BumpTexture.IsCubeRender)
-            {
-                babylonMaterial.bumpTexture = new BabylonTexture();
-                DumpTexture(stdMaterial.BumpTexture, babylonMaterial.bumpTexture, babylonScene);
-                babylonMaterial.bumpTexture.level /= 2.0f;
-            }
-        }
-
-        void DumpPerPixelShader(NovaPerPixelShader ppShader, BabylonScene babylonScene)
-        {
-            var babylonMaterial = new BabylonMaterial();
-            babylonScene.MaterialsList.Add(babylonMaterial);
-
-            babylonMaterial.name = ppShader.Name;
-            babylonMaterial.id = ppShader.ID.ToString();
-            babylonMaterial.alpha = ppShader.Alpha;
-            babylonMaterial.ambient = (ppShader.Ambient * (1.0f - ppShader.SelfIllumination)).ToArray();
-            babylonMaterial.diffuse = (ppShader.Diffuse * (1.0f - ppShader.SelfIllumination)).ToArray();
-            babylonMaterial.emissive = (ppShader.Emissive * ppShader.SelfIllumination).ToArray();
-            babylonMaterial.specular = ppShader.Specular.ToArray();
-            babylonMaterial.specularPower = ppShader.SpecularSharpness;
-            babylonMaterial.backFaceCulling = (ppShader.CullMode == NovaCull.CounterClockwise);
-
-            if (ppShader.DiffuseTexture != null && ppShader.DiffuseTexture.HasTextureData && ppShader.OpacityTexture != null && ppShader.OpacityTexture.HasTextureData)
-            {
-                if (ppShader.DiffuseTexture.LoadedTexture == ppShader.OpacityTexture.LoadedTexture)
-                {
-                    ppShader.DiffuseTexture = ppShader.OpacityTexture;
-                    ppShader.OpacityTexture = null;
-                }
-            }
-
-            if (ppShader.DiffuseTexture != null && ppShader.DiffuseTexture.HasTextureData && !ppShader.DiffuseTexture.IsVideo && !ppShader.DiffuseTexture.IsCubeRender)
-            {
-                babylonMaterial.diffuseTexture = new BabylonTexture();
-                DumpTexture(ppShader.DiffuseTexture, babylonMaterial.diffuseTexture, babylonScene);
-            }
-
-            if (ppShader.AmbientTexture != null && ppShader.AmbientTexture.HasTextureData && !ppShader.AmbientTexture.IsVideo && !ppShader.AmbientTexture.IsCubeRender)
-            {
-                babylonMaterial.ambientTexture = new BabylonTexture();
-                DumpTexture(ppShader.AmbientTexture, babylonMaterial.ambientTexture, babylonScene);
-            }
-
-            if (ppShader.OpacityTexture != null && ppShader.OpacityTexture.HasTextureData && !ppShader.OpacityTexture.IsVideo && !ppShader.OpacityTexture.IsCubeRender)
-            {
-                babylonMaterial.opacityTexture = new BabylonTexture();
-                DumpTexture(ppShader.OpacityTexture, babylonMaterial.opacityTexture, babylonScene);
-            }
-
-            if (mirrorsMaterials.ContainsKey(ppShader))
-            {
-                babylonMaterial.reflectionTexture = new BabylonTexture();
-                var novaObject = mirrorsMaterials[ppShader];
-                DumpRenderTargetTexture(ppShader.ReflectionTexture, babylonMaterial.reflectionTexture, novaObject.MirrorMapSize, novaObject.MirrorLevel, novaObject.MirroredObjects);
-
-                AttachMirrorPlane(babylonMaterial.reflectionTexture, novaObject);
-            }
-            else if (ppShader.ReflectionTexture != null && ppShader.ReflectionTexture.HasTextureData && !ppShader.ReflectionTexture.IsVideo && !ppShader.ReflectionTexture.IsCubeRender)
-            {
-                babylonMaterial.reflectionTexture = new BabylonTexture();
-                DumpTexture(ppShader.ReflectionTexture, babylonMaterial.reflectionTexture, babylonScene);
-            }
-
-            // Refraction
-            if (ppShader.RefractionLevel > 0)
-            {
-                babylonMaterial.alpha = 1.0f - ppShader.RefractionLevel;
-            }
-
-            if (ppShader.EmissiveTexture != null && ppShader.EmissiveTexture.HasTextureData && !ppShader.EmissiveTexture.IsVideo && !ppShader.EmissiveTexture.IsCubeRender)
-            {
-                babylonMaterial.emissiveTexture = new BabylonTexture();
-                DumpTexture(ppShader.EmissiveTexture, babylonMaterial.emissiveTexture, babylonScene);
-            }
-
-            if (ppShader.SpecularTexture != null && ppShader.SpecularTexture.HasTextureData && !ppShader.SpecularTexture.IsVideo && !ppShader.SpecularTexture.IsCubeRender)
-            {
-                babylonMaterial.specularTexture = new BabylonTexture();
-                DumpTexture(ppShader.SpecularTexture, babylonMaterial.specularTexture, babylonScene);
-            }
-
-            if (ppShader.BumpTexture != null && ppShader.BumpTexture.HasTextureData && !ppShader.BumpTexture.IsVideo && !ppShader.BumpTexture.IsCubeRender)
-            {
-                babylonMaterial.bumpTexture = new BabylonTexture();
-                DumpTexture(ppShader.BumpTexture, babylonMaterial.bumpTexture, babylonScene);
-                babylonMaterial.bumpTexture.level /= 2.0f;
-            }
-        }
-
-        static void DumpMultiMaterial(NovaMultiMaterial multiMaterial, BabylonScene babylonScene)
-        {
-            var babylonMultiMaterial = new BabylonMultiMaterial();
-            babylonScene.MultiMaterialsList.Add(babylonMultiMaterial);
-
-            babylonMultiMaterial.name = multiMaterial.Name;
-            babylonMultiMaterial.id = multiMaterial.ID.ToString();
-
-            babylonMultiMaterial.materials = multiMaterial.Materials.Select(material => (material != null ? material.ID.ToString() : "")).ToArray();
-        }
-
-        void DumpTextureAnimation(NovaTexture texture, BabylonTexture babylonTexture)
-        {
-            var animations = new List<BabylonAnimation>();
-
-            DumpInterpolator("Texture UOffset", "uOffset", texture.UOffsetInterpolator, texture.ParentScene, animations);
-            DumpInterpolator("Texture VOffset", "vOffset", texture.VOffsetInterpolator, texture.ParentScene, animations);
-            DumpInterpolator("Texture UScale", "uScale", texture.UScaleInterpolator, texture.ParentScene, animations);
-            DumpInterpolator("Texture VScale", "vScale", texture.VScaleInterpolator, texture.ParentScene, animations);
-
-            babylonTexture.animations = animations.ToArray();
-        }
-
-        private void DumpCubeTexture(NovaTexture texture, BabylonTexture babylonTexture, BabylonScene babylonScene)
-        {
-            var textureFilename = Path.Combine(texture.LoadedTexture.Directory, texture.LoadedTexture.Filename);
-            var baseName = Path.GetFileNameWithoutExtension(texture.LoadedTexture.Filename);
-
-            babylonTexture.isCube = true;
-            babylonTexture.name = baseName;
-
-            baseName = Path.Combine(babylonScene.OutputPath, baseName);
-
-            if (!File.Exists(textureFilename))
-            {
-                texture.LoadedTexture.SaveToDDS(false, textureFilename);
-            }
-
-            if (!alreadyExportedTextures.Contains(textureFilename))
-            {
-                alreadyExportedTextures.Add(textureFilename);
-
-                // Use SharpDX to extract face images
-                var form = new Form { ClientSize = new Size(64, 64) };
-                var device = new Device(new Direct3D(), 0, DeviceType.Hardware, form.Handle,
-                                        CreateFlags.HardwareVertexProcessing,
-                                        new PresentParameters(form.ClientSize.Width, form.ClientSize.Height));
-
-                var cubeTexture = CubeTexture.FromFile(device, textureFilename);
-
-                using (var surface = cubeTexture.GetCubeMapSurface(CubeMapFace.PositiveX, 0))
-                {
-                    Surface.ToFile(surface, baseName + "_px.jpg", ImageFileFormat.Jpg);
-                }
-                using (var surface = cubeTexture.GetCubeMapSurface(CubeMapFace.PositiveY, 0))
-                {
-                    Surface.ToFile(surface, baseName + "_py.jpg", ImageFileFormat.Jpg);
-                }
-                using (var surface = cubeTexture.GetCubeMapSurface(CubeMapFace.PositiveZ, 0))
-                {
-                    Surface.ToFile(surface, baseName + "_pz.jpg", ImageFileFormat.Jpg);
-                }
-                using (var surface = cubeTexture.GetCubeMapSurface(CubeMapFace.NegativeX, 0))
-                {
-                    Surface.ToFile(surface, baseName + "_nx.jpg", ImageFileFormat.Jpg);
-                }
-                using (var surface = cubeTexture.GetCubeMapSurface(CubeMapFace.NegativeY, 0))
-                {
-                    Surface.ToFile(surface, baseName + "_ny.jpg", ImageFileFormat.Jpg);
-                }
-                using (var surface = cubeTexture.GetCubeMapSurface(CubeMapFace.NegativeZ, 0))
-                {
-                    Surface.ToFile(surface, baseName + "_nz.jpg", ImageFileFormat.Jpg);
-                }
-
-                cubeTexture.Dispose();
-                device.Dispose();
-                form.Dispose();
-            }
-        }
-
-        private void DumpRenderTargetTexture(NovaTexture texture, BabylonTexture babylonTexture, int renderSize, float level, NovaMirroredObjectsList renderList)
-        {
-            babylonTexture.level = level;
-            babylonTexture.hasAlpha = false;
-            babylonTexture.coordinatesMode = (int)NovaTexture.NovaTextureMapType.Projection;
-
-            babylonTexture.name = texture.Name;
-            babylonTexture.uOffset = texture.UOffset;
-            babylonTexture.vOffset = texture.VOffset;
-            babylonTexture.uScale = texture.UScale;
-            babylonTexture.vScale = texture.VScale;
-            babylonTexture.uAng = texture.UAng;
-            babylonTexture.vAng = texture.VAng;
-            babylonTexture.wAng = texture.WAng;
-            switch (texture.UAddressMode)
-            {
-                case NovaTextureAddress.Wrap:
-                    babylonTexture.wrapU = 1;
-                    break;
-                case NovaTextureAddress.Mirror:
-                    babylonTexture.wrapU = 2;
-                    break;
-                case NovaTextureAddress.Clamp:
-                    babylonTexture.wrapU = 0;
-                    break;
-            }
-            switch (texture.VAddressMode)
-            {
-                case NovaTextureAddress.Wrap:
-                    babylonTexture.wrapV = 1;
-                    break;
-                case NovaTextureAddress.Mirror:
-                    babylonTexture.wrapV = 2;
-                    break;
-                case NovaTextureAddress.Clamp:
-                    babylonTexture.wrapV = 0;
-                    break;
-            }
-            babylonTexture.coordinatesIndex = texture.MapCoordinateIndex;
-
-            DumpTextureAnimation(texture, babylonTexture);
-
-            babylonTexture.isRenderTarget = true;
-            babylonTexture.renderTargetSize = renderSize;
-
-            babylonTexture.renderList = renderList.Select(o => o.ID.ToString()).ToArray();
-        }
-
-        void DumpTexture(NovaTexture texture, BabylonTexture babylonTexture, BabylonScene babylonScene)
-        {
-            babylonTexture.level = texture.Level;
-            babylonTexture.hasAlpha = texture.HasAlpha;
-            babylonTexture.coordinatesMode = (int)texture.MapType;
-
-            if (texture.LoadedTexture.IsCube)
-            {
-                DumpCubeTexture(texture, babylonTexture, babylonScene);
-                return;
-            }
-
-            babylonTexture.name = texture.Name;
-            babylonTexture.uOffset = texture.UOffset;
-            babylonTexture.vOffset = texture.VOffset;
-            babylonTexture.uScale = texture.UScale;
-            babylonTexture.vScale = texture.VScale;
-            babylonTexture.uAng = texture.UAng;
-            babylonTexture.vAng = texture.VAng;
-            babylonTexture.wAng = texture.WAng;
-            switch (texture.UAddressMode)
-            {
-                case NovaTextureAddress.Wrap:
-                    babylonTexture.wrapU = 1;
-                    break;
-                case NovaTextureAddress.Mirror:
-                    babylonTexture.wrapU = 2;
-                    break;
-                case NovaTextureAddress.Clamp:
-                    babylonTexture.wrapU = 0;
-                    break;
-            }
-            switch (texture.VAddressMode)
-            {
-                case NovaTextureAddress.Wrap:
-                    babylonTexture.wrapV = 1;
-                    break;
-                case NovaTextureAddress.Mirror:
-                    babylonTexture.wrapV = 2;
-                    break;
-                case NovaTextureAddress.Clamp:
-                    babylonTexture.wrapV = 0;
-                    break;
-            }
-            babylonTexture.coordinatesIndex = texture.MapCoordinateIndex;
-
-            DumpTextureAnimation(texture, babylonTexture);
-
-            babylonTexture.name = CopyTexture(texture, babylonScene);
-        }
-
-        string CopyTexture(NovaTexture texture, BabylonScene babylonScene)
-        {
-            string name = texture.Name;
-            // Data
-            if (!alreadyExportedTextures.Contains(texture.Name + texture.HasAlpha))
-            {
-                alreadyExportedTextures.Add(texture.Name + texture.HasAlpha);
-
-                if (Path.GetExtension(texture.Name).ToLower() == ".dds" || Path.GetExtension(texture.Name).ToLower() == ".bmp")
-                {
-                    name = Path.GetFileNameWithoutExtension(texture.Name) + ".png";
-                    var alreadyExists = File.Exists(Path.Combine(babylonScene.OutputPath, name));
-
-                    texture.LoadedTexture.SaveToPNG(Path.Combine(babylonScene.OutputPath, name));
-
-                    if (!texture.HasAlpha)
-                    {
-                        var oldPath = Path.Combine(babylonScene.OutputPath, name);
-                        var bmp = Image.FromFile(oldPath);
-
-                        name = Path.GetFileNameWithoutExtension(texture.Name) + ".jpg";
-
-                        bmp.Save(Path.Combine(babylonScene.OutputPath, name), ImageFormat.Jpeg);
-                        bmp.Dispose();
-
-                        if (!alreadyExists)
-                        {
-                            File.Delete(oldPath);
-                        }
-                    }
-                }
-                else
-                {
-                    var sourceFile = Path.Combine(texture.Directory, texture.Filename);
-                    File.Copy(sourceFile, Path.Combine(babylonScene.OutputPath, Path.GetFileName(sourceFile)), true);
-                }
-            }
-            else
-            {
-                if (Path.GetExtension(texture.Name).ToLower() == ".dds" ||
-                    Path.GetExtension(texture.Name).ToLower() == ".bmp")
-                {
-                    name = Path.GetFileNameWithoutExtension(texture.Name) + (texture.HasAlpha ? ".png" : ".jpg");
-                }
-            }
-
-            return name;
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/MXB/NovaExporter.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/MXB/NovaExporter.cs
deleted file mode 100644
index db75342..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/MXB/NovaExporter.cs	
+++ /dev/null
@@ -1,705 +0,0 @@
-﻿using System;
-using System.Linq;
-using System.Collections.Generic;
-using System.IO;
-using System.Runtime.Serialization.Json;
-using Vertice.Core;
-using Vertice.Nova;
-using Vertice.Nova.Core;
-using Vertice.Nova.Core.DirectX9;
-using Vertice.Nova.Materials;
-using Vertice.Nova.Animations;
-using Vertice.Nova.Core.DirectX10;
-
-namespace BabylonExport.Core.Exporters
-{
-    public partial class NovaExporter : IExporter
-    {
-        readonly List<string> alreadyExportedTextures = new List<string>();
-        readonly List<NovaMaterial> materialsToExport = new List<NovaMaterial>();
-        readonly List<NovaParticleSystem> particleSystemsToExport = new List<NovaParticleSystem>();
-        readonly List<NovaLensFlares> lensFlareSystemToExport = new List<NovaLensFlares>();
-        readonly Dictionary<NovaMaterial, NovaObject> mirrorsMaterials = new Dictionary<NovaMaterial, NovaObject>();
-
-        public event Action<int> OnImportProgressChanged;
-
-        public string SupportedExtensions
-        {
-            get
-            {
-                return ".mxb .mxc";
-            }
-        }
-
-        void ReportProgressChanged(int progress)
-        {
-            if (OnImportProgressChanged != null)
-            {
-                OnImportProgressChanged(progress);
-            }
-        }
-
-        public void GenerateBabylonFile(string file, string outputFile, bool skinned)
-        {
-            try
-            {
-                ReportProgressChanged(0);
-                NovaEngine.Launch<DirectX9Provider>("", 128, 128);
-                NovaScene novaScene = NovaEngine.CreateScene("TempScene");
-
-                if (file.EndsWith(".mxc"))
-                {
-                    NovaEngine.ResourceManager.ArchivePath = Path.GetFullPath(file);
-
-                    // Get the mbx file name
-                    file = NovaEngine.ResourceManager.GetStartSceneFilename();
-                }
-
-                novaScene.Load(file);
-                novaScene.Render(false);
-
-                Generate(novaScene, outputFile);
-            }
-
-            finally
-            {
-                NovaEngine.Stop();
-            }
-        }
-
-        void Generate(NovaScene scene, string outputFile)
-        {
-            ReportProgressChanged(25);
-            var babylonScene = new BabylonScene(Path.GetDirectoryName(outputFile));
-            alreadyExportedTextures.Clear();
-
-            babylonScene.autoClear = scene.AutoClear;
-            babylonScene.clearColor = scene.ClearColor.ToArray();
-            babylonScene.ambientColor = scene.AmbientColor.ToArray();
-            babylonScene.gravity = ((scene.Gravity == Vector3.Zero) ? new Vector3(0, -9.0f, 0) : scene.Gravity).ToArray();
-
-            // Fog
-            babylonScene.fogMode = (int)scene.FogMode;
-            babylonScene.fogColor = scene.FogColor.ToArray();
-            babylonScene.fogStart = scene.ActiveCamera.NearClip;
-            babylonScene.fogEnd = scene.ActiveCamera.FarClip;
-            babylonScene.fogDensity = scene.FogDensity;
-
-            // Cameras
-            DumpCameras(scene, babylonScene);
-
-            // Lights
-            DumpLights(scene, babylonScene);
-            ReportProgressChanged(50);
-
-            // Objects
-            DumpObjects(scene, babylonScene);
-
-            // Materials
-            DumpMaterials(babylonScene);
-
-            // Particles
-            DumpParticles(babylonScene);
-
-            // Lens flares
-            DumpLensFlares(babylonScene);
-
-            // Output
-            babylonScene.Prepare(false);
-            using (var outputStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
-            {
-                var ser = new DataContractJsonSerializer(typeof(BabylonScene));
-                ser.WriteObject(outputStream, babylonScene);
-            }
-            ReportProgressChanged(100);
-        }
-
-
-        void DumpLensFlares(BabylonScene babylonScene)
-        {
-            if (lensFlareSystemToExport.Count == 0)
-                return;
-
-            babylonScene.lensFlareSystems = new BabylonLensFlareSystem[lensFlareSystemToExport.Count];
-
-            var index = 0;
-            foreach (var lensFlareSystem in lensFlareSystemToExport)
-            {
-                var flares = new List<BabylonLensFlare>();
-                foreach (var flare in lensFlareSystem.Flares)
-                {
-                    flares.Add(new BabylonLensFlare
-                    {
-                        color = flare.Color.ToArray(),
-                        position = flare.Position,
-                        size = flare.Size / 1000.0f,
-                        textureName = CopyTexture(flare.Texture, babylonScene)
-                    });
-                }
-
-                babylonScene.lensFlareSystems[index] = new BabylonLensFlareSystem
-                {
-                    emitterId = (lensFlareSystem.Tag as NovaLight).ID.ToString(),
-                    borderLimit = lensFlareSystem.BorderLimit,
-                    flares = flares.ToArray()
-                };
-
-                index++;
-            }
-        }
-
-        private void DumpParticles(BabylonScene babylonScene)
-        {
-            if (particleSystemsToExport.Count == 0)
-                return;
-
-            babylonScene.particleSystems = new BabylonParticleSystem[particleSystemsToExport.Count];
-
-            var index = 0;
-            foreach (var particleSystem in particleSystemsToExport)
-            {
-                babylonScene.particleSystems[index] = new BabylonParticleSystem
-                    {
-                        capacity = particleSystem.BufferSize,
-                        emitterId = particleSystem.Emitter.ID.ToString(),
-                        gravity = particleSystem.Gravity.ToArray(),
-                        direction1 = Vector3.TransformNormal(particleSystem.Direction1, particleSystem.Emitter.LocalMatrix).ToArray(),
-                        direction2 = Vector3.TransformNormal(particleSystem.Direction2, particleSystem.Emitter.LocalMatrix).ToArray(),
-                        minEmitBox = particleSystem.MinEmitBox.ToArray(),
-                        maxEmitBox = particleSystem.MaxEmitBox.ToArray(),
-                        color1 = particleSystem.Color1.ToArray(),
-                        color2 = particleSystem.Color2.ToArray(),
-                        colorDead = new RGBAColor(particleSystem.ColorDead.Red, particleSystem.ColorDead.Green, particleSystem.ColorDead.Blue, particleSystem.DeadAlpha).ToArray(),
-                        emitRate = particleSystem.EmitRate,
-                        updateSpeed = particleSystem.UpdateSpeed,
-                        targetStopFrame = particleSystem.TargetStopFrame,
-                        minEmitPower = particleSystem.MinEmitPower,
-                        maxEmitPower = particleSystem.MaxEmitPower,
-                        minLifeTime = particleSystem.MinLifeTime,
-                        maxLifeTime = particleSystem.MaxLifeTime,
-                        minSize = particleSystem.MinSize,
-                        maxSize = particleSystem.MaxSize,
-                        minAngularSpeed = particleSystem.MinAngularSpeed,
-                        maxAngularSpeed = particleSystem.MaxAngularSpeed,
-                        textureName = CopyTexture(particleSystem.Texture, babylonScene),
-                        blendMode = (int)particleSystem.BlendType,
-                        linkToEmitter = particleSystem.LinkToEmitter
-                    };
-
-                Vector4 textureMask = Vector4.Zero;
-
-                switch (particleSystem.TextureUsage)
-                {
-                    case NovaParticleSystem.ParticleTextureUsages.Alpha:
-                        textureMask = new Vector4(0, 0, 0, 1);
-                        break;
-                    case NovaParticleSystem.ParticleTextureUsages.RGB:
-                        textureMask = new Vector4(1, 1, 1, 0);
-                        break;
-                    case NovaParticleSystem.ParticleTextureUsages.ARGB:
-                        textureMask = new Vector4(1, 1, 1, 1);
-                        break;
-                }
-
-                babylonScene.particleSystems[index].textureMask = textureMask.ToArray();
-
-                index++;
-            }
-        }
-
-        bool IsInterpolatorIsEmpty(NovaFloatInterpolator interpolator)
-        {
-            for (int index = 0; index < interpolator.Datas.Length - 1; index++)
-            {
-                if (interpolator.Datas[index].Value != interpolator.Datas[index + 1].Value)
-                {
-                    return false;
-                }
-            }
-
-            return true;
-        }
-
-        bool IsInterpolatorIsEmpty(NovaVector3Interpolator interpolator)
-        {
-            for (int index = 0; index < interpolator.Datas.Length - 1; index++)
-            {
-                if (interpolator.Datas[index].Value != interpolator.Datas[index + 1].Value)
-                {
-                    return false;
-                }
-            }
-
-            return true;
-        }
-
-        bool DumpInterpolator(string name, string property, NovaFloatInterpolator interpolator, NovaScene scene, List<BabylonAnimation> animations, float mult = 1.0f)
-        {
-            if (interpolator.Ready && !IsInterpolatorIsEmpty(interpolator))
-            {
-                var fps = scene.AnimationFramerate < 1 ? 30 : scene.AnimationFramerate;
-                var babylonAnimation = new BabylonAnimation { name = name, property = property, dataType = BabylonAnimation.DataType.Float, framePerSecond = fps };
-
-                babylonAnimation.keys = interpolator.Datas.Select(value => new BabylonAnimationKey { frame = value.Key / scene.AnimationKeyStep, values = new[] { value.Value * mult } }).ToArray();
-
-                babylonAnimation.loopBehavior = interpolator.LoopAfter;
-
-                animations.Add(babylonAnimation);
-                return true;
-            }
-
-            return false;
-        }
-
-        bool DumpInterpolator(string name, string property, NovaVector3Interpolator interpolator, NovaScene scene, List<BabylonAnimation> animations)
-        {
-            if (interpolator.Ready && !IsInterpolatorIsEmpty(interpolator))
-            {
-                var fps = scene.AnimationFramerate < 1 ? 30 : scene.AnimationFramerate;
-                var babylonAnimation = new BabylonAnimation { name = name, property = property, dataType = BabylonAnimation.DataType.Vector3, framePerSecond = fps };
-
-                babylonAnimation.keys = interpolator.Datas.Select(value => new BabylonAnimationKey { frame = value.Key / scene.AnimationKeyStep, values = value.Value.ToArray() }).ToArray();
-
-                babylonAnimation.loopBehavior = interpolator.LoopAfter;
-
-                animations.Add(babylonAnimation);
-                return true;
-            }
-
-            return false;
-        }
-
-        bool DumpInterpolator(string name, string property, NovaQuaternionInterpolator interpolator, NovaScene scene, List<BabylonAnimation> animations)
-        {
-            if (interpolator.Ready)
-            {
-                var fps = scene.AnimationFramerate < 1 ? 30 : scene.AnimationFramerate;
-                var babylonAnimation = new BabylonAnimation { name = name, property = property, dataType = BabylonAnimation.DataType.Quaternion, framePerSecond = fps };
-
-                babylonAnimation.keys = interpolator.Datas.Select(value => new BabylonAnimationKey { frame = value.Key / scene.AnimationKeyStep, values = value.Value.ToArray() }).ToArray();
-
-                babylonAnimation.loopBehavior = interpolator.LoopAfter;
-
-                animations.Add(babylonAnimation);
-                return true;
-            }
-
-            return false;
-        }
-
-        void DumpObjects(NovaScene scene, BabylonScene babylonScene)
-        {
-            int count = 0;
-            foreach (NovaObject novaObject in scene.Objects)
-            {
-                if (novaObject.Is32bits)
-                {
-                    if (novaObject.SubObjects.Count == 1)
-                    {
-                        var total = novaObject.VerticesCount;
-                        const int step = 32000;
-                        var stepsCount = (int)(Math.Floor((float)total / step) + 1);
-
-                        for (var index = 0; index < stepsCount; index++)
-                        {
-                            var start = index * step;
-                            var end = (index + 1) * step;
-                            DumpObject(novaObject, babylonScene, scene, start, end, string.Format("#{0}", index));
-                        }
-                    }
-                }
-                else
-                {
-                    DumpObject(novaObject, babylonScene, scene, 0, novaObject.VerticesCount);
-                }
-
-                ReportProgressChanged(50 + (count++ * 25) / scene.Objects.Count);
-            }
-        }
-
-        void DumpObject(NovaObject novaObject, BabylonScene babylonScene, NovaScene scene, int startIndex, int endIndex, string nameIndex = "")
-        {
-            var babylonMesh = new BabylonMesh();
-            babylonScene.MeshesList.Add(babylonMesh);
-
-            babylonMesh.name = novaObject.Name + nameIndex;
-            babylonMesh.id = novaObject.ID.ToString();
-            babylonMesh.materialId = novaObject.Material == null ? "" : novaObject.Material.ID.ToString();
-            babylonMesh.parentId = novaObject.ParentEntity == null ? "" : novaObject.ParentEntity.ID.ToString();
-            babylonMesh.isEnabled = novaObject.Enabled;
-            babylonMesh.isVisible = novaObject.Renderable;
-            babylonMesh.visibility = novaObject.Visibility;
-            babylonMesh.checkCollisions = novaObject.CheckCollisions;
-            babylonMesh.receiveShadows = novaObject.ReceiveShadows;
-            babylonMesh.infiniteDistance = novaObject.InfiniteDistance;
-
-            if (novaObject.Billboard)
-            {
-                babylonMesh.billboardMode |= (novaObject.BillboardX ? 1 : 0);
-                babylonMesh.billboardMode |= (novaObject.BillboardY ? 2 : 0);
-                babylonMesh.billboardMode |= (novaObject.BillboardZ ? 4 : 0);
-            }
-
-            if (novaObject.ParticleSystem != null)
-            {
-                particleSystemsToExport.Add(novaObject.ParticleSystem);
-            }
-
-            // Mirror
-            if (novaObject.IsMirror && novaObject.Material != null)
-            {
-                mirrorsMaterials.Add(novaObject.Material, novaObject);
-            }
-
-            // World
-            babylonMesh.position = novaObject.Position.ToArray();
-            babylonMesh.rotation = novaObject.Rotation.ToArray();
-            babylonMesh.localMatrix = (Matrix.Scaling(novaObject.Scaling) * novaObject.LocalMatrix).ToArray();
-
-            // Animations
-            var animations = new List<BabylonAnimation>();
-
-            DumpInterpolator("Visibility animation", "visibility", novaObject.VisibilityInterpolator, scene, animations);
-
-            // Position
-            if (!DumpInterpolator("Position animation", "position", novaObject.PositionInterpolator, scene, animations))
-            {
-                DumpInterpolator("PositionX animation", "position.x", novaObject.PositionXInterpolator, scene, animations);
-                DumpInterpolator("PositionY animation", "position.y", novaObject.PositionYInterpolator, scene, animations);
-                DumpInterpolator("PositionZ animation", "position.z", novaObject.PositionZInterpolator, scene, animations);
-            }
-
-            // Rotation
-            if (!DumpInterpolator("Rotation animation", "rotationQuaternion", novaObject.RotationInterpolator, scene, animations))
-            {
-                DumpInterpolator("RotationX animation", "rotation.x", novaObject.RotationXInterpolator, scene,
-                    animations, -novaObject.Determinant);
-                DumpInterpolator("RotationY animation", "rotation.y", novaObject.RotationYInterpolator, scene,
-                    animations, -novaObject.Determinant);
-                DumpInterpolator("RotationZ animation", "rotation.z", novaObject.RotationZInterpolator, scene,
-                    animations, -novaObject.Determinant);
-            }
-            else
-            {
-                babylonMesh.localMatrix = Matrix.Identity.ToArray();
-                babylonMesh.scaling = novaObject.Scaling.ToArray();
-            }
-
-            // Scaling
-            if (!DumpInterpolator("Scaling animation", "scaling", novaObject.ScalingInterpolator, scene, animations))
-            {
-                DumpInterpolator("ScalingX animation", "scaling.x", novaObject.ScalingXInterpolator, scene, animations);
-                DumpInterpolator("ScalingY animation", "scaling.y", novaObject.ScalingYInterpolator, scene, animations);
-                DumpInterpolator("ScalingZ animation", "scaling.z", novaObject.ScalingZInterpolator, scene, animations);
-            }
-            else
-            {
-                babylonMesh.localMatrix = novaObject.LocalMatrix.ToArray();
-                babylonMesh.scaling = novaObject.Scaling.ToArray();
-            }
-
-            babylonMesh.animations = animations.ToArray();
-            babylonMesh.autoAnimate = novaObject.AutoAnimate;
-
-            if (novaObject.AutoAnimate)
-            {
-                babylonMesh.autoAnimateFrom = novaObject.AnimationStartKey;
-                if (novaObject.AnimationEndKey == -1)
-                {
-                    babylonMesh.autoAnimateTo = scene.AnimationKeyMax / scene.AnimationKeyStep;
-                    babylonMesh.autoAnimateLoop = true;
-                }
-                else
-                {
-                    babylonMesh.autoAnimateTo = novaObject.AnimationEndKey;
-                }
-            }
-
-            // Vertices & faces
-            var exportedVerticesCount = DumpObjectGeometry(novaObject, babylonMesh, startIndex, endIndex);
-
-            // Subobjects
-            var subMeshes = new List<BabylonSubMesh>();
-
-            if (novaObject.Is32bits)
-            {
-                var subMesh = new BabylonSubMesh();
-                subMesh.materialIndex = 0;
-                subMesh.verticesStart = 0;
-                subMesh.verticesCount = exportedVerticesCount;
-                subMesh.indexStart = 0;
-                subMesh.indexCount = babylonMesh.indices.Length;
-
-                subMeshes.Add(subMesh);
-            }
-            else
-            {
-                foreach (NovaSubObject subObject in novaObject.SubObjects)
-                {
-                    var subMesh = new BabylonSubMesh();
-                    subMesh.materialIndex = subObject.AttributeRange.AttributeId;
-                    subMesh.verticesStart = subObject.AttributeRange.VertexStart;
-                    subMesh.verticesCount = subObject.AttributeRange.VertexCount;
-                    subMesh.indexStart = subObject.AttributeRange.FaceStart * 3;
-                    subMesh.indexCount = subObject.AttributeRange.FaceCount * 3;
-
-                    subMeshes.Add(subMesh);
-                }
-            }
-            babylonMesh.subMeshes = subMeshes.ToArray();
-
-            if (novaObject.Material != null)
-            {
-                if (!materialsToExport.Contains(novaObject.Material))
-                {
-                    materialsToExport.Add(novaObject.Material);
-                    var multiMat = novaObject.Material as NovaMultiMaterial;
-
-                    if (multiMat != null)
-                    {
-                        foreach (var mat in multiMat.Materials)
-                        {
-                            if (!materialsToExport.Contains(mat))
-                            {
-                                materialsToExport.Add(mat);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        private void DumpVertex(NovaCustomVertexFormat.GlobalVector3 vertex, List<float> positions, List<float> normals, List<float> uvs, List<float> uvs2, List<float> colors, Matrix transformMatrix, NovaObject novaObject)
-        {
-            var position = Vector3.TransformCoordinate(vertex.Position, transformMatrix);
-            var normal = Vector3.TransformNormal(vertex.Normal, transformMatrix);
-
-            positions.Add(position.X); positions.Add(position.Y); positions.Add(position.Z);
-            normals.Add(normal.X); normals.Add(normal.Y); normals.Add(normal.Z);
-            uvs.Add(vertex.Tu); uvs.Add(vertex.Tv);
-
-            if (novaObject.Use2TextureCoordinatesForMeshCreation)
-            {
-                uvs2.Add(vertex.Tu2); uvs2.Add(vertex.Tv2);
-            }
-
-            if (novaObject.VertexPaint)
-            {
-                var color = RGBAColor.FromArgb((int)vertex.Color);
-                colors.Add(color.Red); colors.Add(color.Green); colors.Add(color.Blue);
-            }
-        }
-
-        private int DumpObjectGeometry(NovaObject novaObject, BabylonMesh babylonMesh, int startIndex, int endIndex)
-        {
-            var verticesIndices = new int[novaObject.VerticesCount];
-            for (var index = 0; index < verticesIndices.Length; index++)
-            {
-                verticesIndices[index] = -1;
-            }
-
-            // Vertices
-            var transformMatrix = Matrix.Identity;//.Scaling(novaObject.Scaling) * novaObject.LocalMatrix;
-            var indicesList = new List<int>();
-
-            NovaCustomVertexFormat.GlobalVector3[] vertices = novaObject.InternalMesh.LockVertexBuffer<NovaCustomVertexFormat.GlobalVector3>(NovaLock.ReadOnly, novaObject.VerticesCount);
-
-            // Faces
-            INovaDataStream data = novaObject.InternalMesh.LockIndexBuffer(NovaLock.ReadOnly);
-
-            int[] indices;
-
-            if (novaObject.Is32bits)
-            {
-                indices = data.Read<int>(novaObject.FacesCount * 3 * 4);
-            }
-            else
-            {
-                indices = (data.Read<ushort>(novaObject.FacesCount * 3 * 4)).Select(i => (int)i).ToArray();
-            }
-
-            var positions = new List<float>();
-            var normals = new List<float>();
-            var uvs = new List<float>();
-            var uvs2 = new List<float>();
-            var colors = new List<float>();
-            int exportedVerticesCount = 0;
-            for (var index = 0; index < novaObject.FacesCount; index++)
-            {
-                var v0 = indices[index * 3];
-                var v1 = indices[index * 3 + 1];
-                var v2 = indices[index * 3 + 2];
-
-                if (v0 < startIndex || v1 < startIndex || v2 < startIndex)
-                {
-                    continue;
-                }
-
-                if (v0 >= startIndex && v0 < endIndex || v1 >= startIndex && v1 < endIndex || v2 >= startIndex && v2 < endIndex)
-                {
-                    if (verticesIndices[v0] == -1)
-                    {
-                        verticesIndices[v0] = exportedVerticesCount++;
-                        DumpVertex(vertices[v0], positions, normals, uvs, uvs2, colors, transformMatrix, novaObject);
-                    }
-                    if (verticesIndices[v1] == -1)
-                    {
-                        verticesIndices[v1] = exportedVerticesCount++;
-                        DumpVertex(vertices[v1], positions, normals, uvs, uvs2, colors, transformMatrix, novaObject);
-                    }
-                    if (verticesIndices[v2] == -1)
-                    {
-                        verticesIndices[v2] = exportedVerticesCount++;
-                        DumpVertex(vertices[v2], positions, normals, uvs, uvs2, colors, transformMatrix, novaObject);
-                    }
-
-                    indicesList.Add(verticesIndices[v0]);
-                    indicesList.Add(verticesIndices[v1]);
-                    indicesList.Add(verticesIndices[v2]);
-                }
-            }
-
-            if (positions.Count > 0)
-            {
-                babylonMesh.positions = positions.ToArray();
-            }
-            if (normals.Count > 0)
-            {
-                babylonMesh.normals = normals.ToArray();
-            }
-            if (uvs.Count > 0)
-            {
-                babylonMesh.uvs = uvs.ToArray();
-            }
-            if (uvs2.Count > 0)
-            {
-                babylonMesh.uvs2 = uvs2.ToArray();
-            }
-            if (colors.Count > 0)
-            {
-                babylonMesh.colors = colors.ToArray();
-            }
-            babylonMesh.indices = indicesList.ToArray();
-
-            // Invert normal order
-            for (var index = 0; index < babylonMesh.indices.Length; index += 3)
-            {
-                var temp = babylonMesh.indices[index];
-                babylonMesh.indices[index] = babylonMesh.indices[index + 2];
-                babylonMesh.indices[index + 2] = temp;
-            }
-
-            novaObject.InternalMesh.UnlockIndexBuffer();
-            novaObject.InternalMesh.UnlockVertexBuffer();
-
-            return exportedVerticesCount;
-        }
-
-        void DumpCameras(NovaScene scene, BabylonScene babylonScene)
-        {
-            foreach (NovaCamera camera in scene.Cameras)
-            {
-                var babylonCamera = new BabylonCamera();
-                babylonScene.CamerasList.Add(babylonCamera);
-
-                babylonCamera.name = camera.Name;
-                babylonCamera.id = camera.ID.ToString();
-                babylonCamera.parentId = camera.ParentEntity == null ? "" : camera.ParentEntity.ID.ToString();
-                babylonCamera.lockedTargetId = camera.Target == null ? "" : camera.Target.ID.ToString();
-                babylonCamera.position = camera.Position.ToArray();
-                babylonCamera.rotation = camera.Rotation.ToArray();
-                babylonCamera.fov = camera.FOV;
-                babylonCamera.minZ = camera.NearClip;
-                babylonCamera.maxZ = camera.FarClip;
-                babylonCamera.inertia = camera.Inertia;
-                babylonCamera.speed = camera.Speed;
-                babylonCamera.checkCollisions = camera.CheckCollisions;
-                babylonCamera.applyGravity = camera.ApplyGravity;
-                babylonCamera.ellipsoid = camera.EllipsoidVector.ToArray();
-
-                // Animations
-                var animations = new List<BabylonAnimation>();
-
-                // Position
-                if (!DumpInterpolator("Position animation", "position", camera.PositionInterpolator, scene, animations))
-                {
-                    DumpInterpolator("PositionX animation", "position.x", camera.PositionXInterpolator, scene, animations);
-                    DumpInterpolator("PositionY animation", "position.y", camera.PositionYInterpolator, scene, animations);
-                    DumpInterpolator("PositionZ animation", "position.z", camera.PositionZInterpolator, scene, animations);
-                }
-
-                babylonCamera.animations = animations.ToArray();
-                babylonCamera.autoAnimate = camera.AutoAnimate;
-
-                if (camera.AutoAnimate)
-                {
-                    babylonCamera.autoAnimateFrom = camera.AnimationStartKey;
-                    if (camera.AnimationEndKey == -1)
-                    {
-                        babylonCamera.autoAnimateTo = scene.AnimationKeyMax / scene.AnimationKeyStep;
-                        babylonCamera.autoAnimateLoop = true;
-                    }
-                    else
-                    {
-                        babylonCamera.autoAnimateTo = camera.AnimationEndKey;
-                    }
-                }
-            }
-
-            if (scene.ActiveCamera != null)
-            {
-                babylonScene.activeCameraID = scene.ActiveCamera.ID.ToString();
-            }
-        }
-
-        void DumpLights(NovaScene scene, BabylonScene babylonScene)
-        {
-            foreach (NovaLight light in scene.Lights)
-            {
-                if (light.Enabled)
-                {
-                    var babylonLight = new BabylonLight();
-                    babylonScene.LightsList.Add(babylonLight);
-
-                    babylonLight.name = light.Name;
-                    babylonLight.id = light.ID.ToString();
-                    switch (light.Type)
-                    {
-                        case NovaLightType.Point:
-                            babylonLight.type = 0;
-                            babylonLight.position = light.Position.ToArray();
-                            break;
-                        case NovaLightType.Spot:
-                        case NovaLightType.Directional:
-                            babylonLight.type = 1;
-                            babylonLight.position = light.Position.ToArray();
-                            babylonLight.direction = light.Direction.ToArray();
-                            break;
-                    }
-                    babylonLight.diffuse = light.Diffuse.ToArray();
-                    babylonLight.specular = light.Specular.ToArray();
-                    babylonLight.intensity = light.Multiplicator;
-
-                    if (light.ShadowMembers.Count > 0)
-                    {
-                        var shadowGenerator = new BabylonShadowGenerator
-                        {
-                            useVarianceShadowMap = true,
-                            lightId = light.ID.ToString(),
-                            mapSize = light.ShadowMapSize,
-                            renderList = light.ShadowMembers.Select(m => m.ID.ToString()).ToArray()
-                        };
-                        babylonScene.ShadowGeneratorsList.Add(shadowGenerator);
-                    }
-
-                    if (light.LensFlares != null)
-                    {
-                        light.LensFlares.Tag = light;
-                        lensFlareSystemToExport.Add(light.LensFlares);
-                    }
-                }
-            }
-        }
-
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/Document.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/Document.cs
deleted file mode 100644
index 87fa94c..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/Document.cs	
+++ /dev/null
@@ -1,62 +0,0 @@
-﻿
-using System.Collections.Generic;
-using System.IO;
-using System.Collections.ObjectModel;
-
-namespace BabylonExport.Core
-{
-    internal class Document<T> where T : Line, new()
-    {
-        ReadOnlyCollection<List<T>> blocks;
-
-        public Document(string text)
-        {
-            int lineIndex = 0;
-            List<T> tempLines = null;
-            List<List<T>> tempBlocks = new List<List<T>>();
-            string previousHeader = "";
-            var lines = text.Split('\n');
-
-            for (int index = 0; index < lines.Length; index++)
-            {
-                T line = new T { Index = lineIndex++ };
-
-                string lineContent = "";
-
-                bool multiline;
-                do
-                {
-                    multiline = false;
-                    lineContent += lines[index].Trim();
-                    if (lineContent.EndsWith("\\"))
-                    {
-                        multiline = true;
-                        lineContent = lineContent.Substring(0, lineContent.Length - 1);
-                        index++;
-                    }
-                }
-                while (multiline);
-
-                line.SetLine(lineContent);
-
-                if (!line.IsValid)
-                    continue;
-
-                if ((line.Tokens[0] == line.BlockSperator && previousHeader != line.BlockSperator) || tempLines == null)
-                {
-                    tempLines = new List<T>();
-                    tempBlocks.Add(tempLines);
-                }
-                tempLines.Add(line);
-                previousHeader = line.Tokens[0];
-            }
-
-            blocks = new ReadOnlyCollection<List<T>>(tempBlocks);
-        }
-
-        public ReadOnlyCollection<List<T>> Blocks
-        {
-            get { return blocks; }
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/Line.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/Line.cs
deleted file mode 100644
index c3a47f5..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/Line.cs	
+++ /dev/null
@@ -1,73 +0,0 @@
-﻿using System;
-using System.Globalization;
-using SharpDX;
-
-namespace BabylonExport.Core
-{
-    internal abstract class Line
-    {
-        string[] tokens;
-
-        public bool IsValid
-        {
-            get
-            {
-                return Tokens.Length > 0 && !string.IsNullOrEmpty(Tokens[0]);
-            }
-        }
-
-        public bool IsComment
-        {
-            get
-            {
-                return Tokens[0].StartsWith("#");
-            }
-        }
-
-        public int Index { get; internal set; }
-
-        public abstract string BlockSperator { get; }
-
-        public string[] Tokens
-        {
-            get { return tokens; }
-        }
-
-        internal void SetLine(string line)
-        {
-            char[] blank = { ' ', '\t' };
-            tokens = line.Split(blank, StringSplitOptions.RemoveEmptyEntries);
-        }
-
-        public float ToFloat()
-        {
-            return float.Parse(Tokens[1], CultureInfo.InvariantCulture);
-        }
-
-        public Vector2 ToVector2()
-        {
-            return new Vector2(float.Parse(Tokens[1], CultureInfo.InvariantCulture),
-                               float.Parse(Tokens[2], CultureInfo.InvariantCulture));
-        }
-
-        public Vector3 ToVector3()
-        {
-            return new Vector3(float.Parse(Tokens[1], CultureInfo.InvariantCulture),
-                               float.Parse(Tokens[2], CultureInfo.InvariantCulture),
-                               float.Parse(Tokens[3], CultureInfo.InvariantCulture));
-        }
-
-
-        public Color3 ToColor()
-        {
-            return new Color3(float.Parse(Tokens[1], CultureInfo.InvariantCulture),
-                             float.Parse(Tokens[2], CultureInfo.InvariantCulture),
-                             float.Parse(Tokens[3], CultureInfo.InvariantCulture));
-        }
-
-        public override string ToString()
-        {
-            return string.Join(" ", Tokens);
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/MtlHeader.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/MtlHeader.cs
deleted file mode 100644
index 2916825..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/MtlHeader.cs	
+++ /dev/null
@@ -1,25 +0,0 @@
-﻿namespace BabylonExport.Core
-{
-    internal enum MtlHeader
-    {
-        None,
-        Comment,
-        Material,
-        DiffuseColor,
-        DiffuseTexture,
-        SpecularColor,
-        SpecularTexture,
-        SpecularPower,
-        EmissiveColor,
-        Alpha,
-        IlluminationModel,
-        BumpTexture,
-        ReflectionTexture,
-        TransparencyTexture,
-        AmbientTexture,
-        AmbientColor,
-        RefractionIndex,
-        Transparency,
-        TransmissionFiter,
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/MtlLine.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/MtlLine.cs
deleted file mode 100644
index b49b0e2..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/MtlLine.cs	
+++ /dev/null
@@ -1,60 +0,0 @@
-﻿using System;
-
-namespace BabylonExport.Core
-{
-    internal class MtlLine : Line
-    {
-        public override string BlockSperator { get { return "newmtl"; }}
-
-        public MtlHeader Header
-        {
-            get
-            {
-                if (IsComment)
-                    return MtlHeader.Comment;
-
-                string lineType = Tokens[0].ToLower();
-                switch (lineType)
-                {
-                    case "newmtl":
-                        return MtlHeader.Material;
-                    case "kd":
-                        return MtlHeader.DiffuseColor;
-                    case "map_kd":
-                        return MtlHeader.DiffuseTexture;
-                    case "ks":
-                        return MtlHeader.SpecularColor;
-                    case "ns":
-                        return MtlHeader.SpecularPower;
-                    case "map_ks":
-                        return MtlHeader.SpecularTexture;
-                    case "ke":
-                        return MtlHeader.EmissiveColor;
-                    case "d":
-                        return MtlHeader.Alpha;
-                    case "illum":
-                        return MtlHeader.IlluminationModel;
-                    case "ni":
-                        return MtlHeader.RefractionIndex;
-                    case "tr":
-                        return MtlHeader.Transparency;
-                    case "map_d":
-                        return MtlHeader.TransparencyTexture;
-                    case "tf":
-                        return MtlHeader.TransmissionFiter;
-                    case "ka":
-                        return MtlHeader.AmbientColor;
-                    case "map_ka":
-                        return MtlHeader.AmbientTexture;
-                    case "bump":
-                    case "map_bump":
-                        return MtlHeader.BumpTexture;
-                    case "map_refl":
-                        return MtlHeader.ReflectionTexture;
-                }
-
-                throw new Exception(string.Format("Unsupported line type [{0}] at line {1}", lineType, Index));
-            }
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/ObjExporter.Material.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/ObjExporter.Material.cs
deleted file mode 100644
index 307ce22..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/ObjExporter.Material.cs	
+++ /dev/null
@@ -1,64 +0,0 @@
-﻿using System.Collections.Generic;
-using System.IO;
-using BabylonExport;
-using SharpDX;
-
-namespace BabylonExport.Core.Exporters
-{
-    public partial class ObjExporter
-    {
-        readonly List<StandardMaterial> materials = new List<StandardMaterial>();
-
-        void ImportMaterialLibraries(ObjLine materialLine, BabylonScene scene)
-        {
-            for (int i = 1; i < materialLine.Tokens.Length; i++)
-            {
-                string fileName = materialLine.Tokens[i];
-
-                var mtlDocument = new Document<MtlLine>(File.ReadAllText(fileName));
-
-                StandardMaterial currentMaterial = null;
-
-                foreach (var lines in mtlDocument.Blocks)
-                {
-                    foreach (MtlLine line in lines)
-                    {
-
-                        switch (line.Header)
-                        {
-                            case MtlHeader.Material:
-                                currentMaterial = new StandardMaterial(line.Tokens[1]);
-                                currentMaterial.BackFaceCulling = false;
-                                materials.Add(currentMaterial);
-                                break;
-                            case MtlHeader.DiffuseColor:
-                                currentMaterial.Diffuse = line.ToColor();
-                                break;
-                            case MtlHeader.DiffuseTexture:
-                                currentMaterial.Diffuse = new Color3(1, 1, 1);
-                                currentMaterial.DiffuseTexture = line.Tokens[1].Replace("//", @"\");
-                                break;
-                            case MtlHeader.Alpha:
-                                currentMaterial.Alpha = line.ToFloat();
-                                break;
-                            case MtlHeader.EmissiveColor:
-                                currentMaterial.Emissive = line.ToColor();
-                                break;
-                            case MtlHeader.SpecularColor:
-                                currentMaterial.Specular = line.ToColor();
-                                break;
-                            case MtlHeader.SpecularPower:
-                                currentMaterial.SpecularPower = line.ToFloat();
-                                break;
-                        }
-                    }
-                }
-            }
-
-            foreach (var material in materials)
-            {
-                material.CreateBabylonMaterial(scene);
-            }
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/ObjExporter.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/ObjExporter.cs
deleted file mode 100644
index 16ab743..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/ObjExporter.cs	
+++ /dev/null
@@ -1,254 +0,0 @@
-﻿using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System;
-using System.Linq;
-using System.Runtime.Serialization.Json;
-using SharpDX;
-using BabylonExport;
-
-namespace BabylonExport.Core.Exporters
-{
-    public partial class ObjExporter : IExporter
-    {
-        readonly List<Vector3> positions = new List<Vector3>();
-        readonly List<Vector3> normals = new List<Vector3>();
-        readonly List<Vector2> textureCoordinates = new List<Vector2>();
-        readonly List<PositionNormalTextured> stagingVertices = new List<PositionNormalTextured>();
-        readonly List<int> stagingIndices = new List<int>();
-        readonly Dictionary<string, int> registeredVertices = new Dictionary<string, int>();
-        readonly Dictionary<StandardMaterial, Mesh<PositionNormalTextured>> meshParts = new Dictionary<StandardMaterial, Mesh<PositionNormalTextured>>();
-
-        int positionsIndexOffset = 1;
-        int normalsIndexOffset = 1;
-        int textureCoordinatesIndexOffset = 1;
-
-        StandardMaterial defaultMaterial;
-
-        public event Action<int> OnImportProgressChanged;
-
-        public string SupportedExtensions
-        {
-            get
-            {
-                return ".obj";
-            }
-        }
-
-        public void GenerateBabylonFile(string file, string outputFile, bool skinned)
-        {
-            var text = File.ReadAllText(file);
-
-            Environment.CurrentDirectory = Path.GetDirectoryName(file);
-
-            // Scene
-            var scene = new BabylonScene(Path.GetDirectoryName(outputFile));
-
-            // Loading
-            var objDocument = new Document<ObjLine>(text);
-
-            materials.Clear();
-
-            int currentProgression = 0;
-
-            int total = objDocument.Blocks.Sum(lines => lines.Count);
-
-            string currentName = "";
-            StandardMaterial currentMaterial = null;
-
-            foreach (var lines in objDocument.Blocks)
-            {
-                if (lines[0].Tokens[0] == lines[0].BlockSperator)
-                {
-                    AppendNewPart(currentName, currentMaterial);
-                }
-                foreach (ObjLine line in lines)
-                {
-                    currentProgression++;
-                    ReportProgressChanged((currentProgression * 100) / total);
-
-                    switch (line.Header)
-                    {
-                        case ObjHeader.Vertices:
-                            positions.Add(line.ToVector3());
-                            break;
-                        case ObjHeader.TextureCoordinates:
-                            Vector2 tv = line.ToVector2();
-                            textureCoordinates.Add(tv);
-                            break;
-                        case ObjHeader.Normals:
-                            normals.Add(line.ToVector3());
-                            break;
-                        case ObjHeader.Group:
-                            currentName = line.Tokens[1];
-                            break;
-                        case ObjHeader.Faces:
-                            AppendFace(line);
-                            break;
-                        case ObjHeader.MaterialLibrary:
-                            ImportMaterialLibraries(line, scene);
-                            break;
-                        case ObjHeader.Material:
-                            string materialName = line.Tokens[1];
-                            currentMaterial = materials.FirstOrDefault(e => e.Name == materialName);
-                            break;
-                    }
-                }
-            }
-
-            if (positions.Count > 0)
-            {
-                AppendNewPart(currentName, currentMaterial);
-            }
-
-            if (meshParts.Count > 1)
-            {
-                var proxyID = ProxyMesh.CreateBabylonMesh(currentName, scene);
-                foreach (Mesh<PositionNormalTextured> part in meshParts.Values)
-                {
-                    part.CreateBabylonMesh(scene, proxyID);
-                }
-            }
-            else
-            {
-                meshParts.Values.First().CreateBabylonMesh(scene);
-            }
-
-            // Output
-            scene.Prepare();
-            using (var outputStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
-            {
-                var ser = new DataContractJsonSerializer(typeof (BabylonScene));
-                ser.WriteObject(outputStream, scene);
-            }
-        }
-
-        void ReportProgressChanged(int progress)
-        {
-            if (OnImportProgressChanged != null)
-            {
-                OnImportProgressChanged(progress);
-            }
-        }
-
-        void AppendFace(ObjLine line)
-        {
-            // Line
-            if (line.Tokens.Length == 3)
-            {
-                AppendIndex(1, line);
-                AppendIndex(2, line);
-                AppendIndex(2, line);
-
-                return;
-            }
-
-            // Triangle
-            if (line.Tokens.Length == 4)
-            {
-                for (int index = 1; index <= 3; index++)
-                {
-                    AppendIndex(index, line);
-                }
-
-                return;
-            }
-
-            // Quad
-            if (line.Tokens.Length == 5)
-            {
-                for (int index = 1; index <= 3; index++)
-                {
-                    AppendIndex(index, line);
-                }
-
-                AppendIndex(1, line);
-                AppendIndex(3, line);
-                AppendIndex(4, line);
-            }
-        }
-
-        void AppendIndex(int index, ObjLine line)
-        {
-            string[] indices = line.Tokens[index].Split('/');
-
-            // Required: Position
-            int positionIndex = int.Parse(indices[0], CultureInfo.InvariantCulture) - positionsIndexOffset;
-            int texCoordIndex = -1;
-            int normalIndex = -1;
-
-            // Optional: Texture coordinate
-            if (indices.Length > 1 && indices[1].Equals(string.Empty) == false)
-            {
-                texCoordIndex = int.Parse(indices[1]) - textureCoordinatesIndexOffset;
-            }
-
-            // Optional: Normal
-            if (indices.Length > 2 && indices[2].Equals(string.Empty) == false)
-            {
-                normalIndex = int.Parse(indices[2]) - normalsIndexOffset;
-            }
-
-            // Build vertex
-            var vertex = new PositionNormalTextured { Position = positions[positionIndex] };
-
-            if (texCoordIndex >= 0)
-                vertex.TextureCoordinates = textureCoordinates[texCoordIndex];
-
-            if (normalIndex >= 0)
-                vertex.Normal = normals[normalIndex];
-
-            // check if the vertex does not already exists
-            string hash = vertex.ToString();
-            int vertexIndex;
-
-            if (!registeredVertices.TryGetValue(hash, out vertexIndex))
-            {
-                stagingVertices.Add(vertex);
-                vertexIndex = stagingVertices.Count - 1;
-                registeredVertices.Add(hash, vertexIndex);
-            }
-
-            stagingIndices.Add(vertexIndex);
-        }
-
-        void AppendNewPart(string name, StandardMaterial currentMaterial)
-        {
-            if (stagingVertices.Count == 0)
-                return;
-
-            if (currentMaterial == null)
-            {
-                if (defaultMaterial == null)
-                {
-                    defaultMaterial = new StandardMaterial("empty");
-                }
-
-                currentMaterial = defaultMaterial;
-            }
-
-            Mesh<PositionNormalTextured> part;
-
-            if (!meshParts.TryGetValue(currentMaterial, out part))
-            {
-                part = new Mesh<PositionNormalTextured>(currentMaterial == defaultMaterial ? null : currentMaterial);
-                meshParts.Add(currentMaterial, part);
-            }
-
-            part.AddPart(name, stagingVertices, stagingIndices);
-
-            positionsIndexOffset += positions.Count;
-            positions.Clear();
-
-            normalsIndexOffset += normals.Count;
-            normals.Clear();
-
-            textureCoordinatesIndexOffset += textureCoordinates.Count;
-            textureCoordinates.Clear();
-
-            stagingVertices.Clear();
-            stagingIndices.Clear();
-            registeredVertices.Clear();
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/ObjHeader.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/ObjHeader.cs
deleted file mode 100644
index 87645e6..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/ObjHeader.cs	
+++ /dev/null
@@ -1,18 +0,0 @@
-﻿namespace BabylonExport.Core
-{
-    internal enum ObjHeader
-    {
-        None,
-        Comment,
-        Object,
-        Vertices,
-        TextureCoordinates,
-        Normals,
-        Group,
-        SmoothingGroup,
-        Line,
-        Faces,
-        MaterialLibrary,
-        Material,
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/ObjLine.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/ObjLine.cs
deleted file mode 100644
index f583d70..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Exporters/OBJ/ObjLine.cs	
+++ /dev/null
@@ -1,44 +0,0 @@
-﻿using System;
-
-namespace BabylonExport.Core
-{
-    internal class ObjLine : Line
-    {
-        public override string BlockSperator { get { return "v"; } }
-        public ObjHeader Header
-        {
-            get
-            {
-                if (IsComment)
-                    return ObjHeader.Comment;
-
-                string lineType = Tokens[0].ToLower();
-                switch (lineType)
-                {
-                    case "o":
-                        return ObjHeader.Object;
-                    case "v":
-                        return ObjHeader.Vertices;
-                    case "vt":
-                        return ObjHeader.TextureCoordinates;
-                    case "vn":
-                        return ObjHeader.Normals;
-                    case "g":
-                        return ObjHeader.Group;
-                    case "s":
-                        return ObjHeader.None;
-                    case "l":
-                        return ObjHeader.Line;
-                    case "f":
-                        return ObjHeader.Faces;
-                    case "mtllib":
-                        return ObjHeader.MaterialLibrary;
-                    case "usemtl":
-                        return ObjHeader.Material;
-                }
-
-                throw new Exception(string.Format("Unsupported line type [{0}] at line {1}", lineType, Index));
-            }
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Properties/AssemblyInfo.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Properties/AssemblyInfo.cs
deleted file mode 100644
index 7a26a9f..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Properties/AssemblyInfo.cs	
+++ /dev/null
@@ -1,36 +0,0 @@
-﻿using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following 
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("BabylonExport.Core")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("BabylonExport.Core")]
-[assembly: AssemblyCopyright("Copyright ©  2013")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible 
-// to COM components.  If you need to access a type in this assembly from 
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("c960f8e7-d038-4054-b593-3449d420c1e8")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version 
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers 
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.AudioImporters.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.AudioImporters.dll
deleted file mode 100644
index 7f3876f..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.AudioImporters.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.EffectImporter.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.EffectImporter.dll
deleted file mode 100644
index 61f52fa..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.EffectImporter.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.FBXImporter.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.FBXImporter.dll
deleted file mode 100644
index fcb59fc..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.FBXImporter.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.dll
deleted file mode 100644
index aeefccf..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.VideoImporters.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.VideoImporters.dll
deleted file mode 100644
index 1e4ff00..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.VideoImporters.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.XImporter.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.XImporter.dll
deleted file mode 100644
index 69c9223..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.XImporter.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.dll
deleted file mode 100644
index 7e03d56..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll
deleted file mode 100644
index ac8b20f..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/SharpDX.DXGI.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/SharpDX.DXGI.dll
deleted file mode 100644
index d7aaf7c..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/SharpDX.DXGI.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/SharpDX.Direct3D9.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/SharpDX.Direct3D9.dll
deleted file mode 100644
index ec1831f..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/SharpDX.Direct3D9.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/SharpDX.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/SharpDX.dll
deleted file mode 100644
index 2bde40a..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/SharpDX.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/SkinnedModel.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/SkinnedModel.dll
deleted file mode 100644
index faf4c33..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/SkinnedModel.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/SkinnedModelPipeline.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/SkinnedModelPipeline.dll
deleted file mode 100644
index 64a8148..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/SkinnedModelPipeline.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Core.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Core.dll
deleted file mode 100644
index adc9d97..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Core.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Core.DirectX10.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Core.DirectX10.dll
deleted file mode 100644
index 0c1603e..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Core.DirectX10.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Core.DirectX9.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Core.DirectX9.dll
deleted file mode 100644
index 22a0a03..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Core.DirectX9.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Interop.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Interop.dll
deleted file mode 100644
index 3fb5971..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Interop.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Nova.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Nova.dll
deleted file mode 100644
index a3bae61..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Nova.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Wrappers.DirectX.dll b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Wrappers.DirectX.dll
deleted file mode 100644
index e8b6d11..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/Vertice.Wrappers.DirectX.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/xnafx40_redist.msi b/Exporters/FBX - OBJ/BabylonExport.Core/Refs/xnafx40_redist.msi
deleted file mode 100644
index 42bbb26..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.Core/Refs/xnafx40_redist.msi and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport.Core/Tools.cs b/Exporters/FBX - OBJ/BabylonExport.Core/Tools.cs
deleted file mode 100644
index ac228c2..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Core/Tools.cs	
+++ /dev/null
@@ -1,54 +0,0 @@
-﻿using SharpDX;
-using Vertice.Core;
-
-namespace BabylonExport.Core
-{
-    public static class Tools
-    {      
-        public static Color3 ToColor3(this Microsoft.Xna.Framework.Vector3 value)
-        {
-            return new Color3(value.X, value.Y, value.Z);
-        }
-
-        public static float[] ToArray(this RGBAColor color)
-        {
-            return new []{color.Red, color.Green, color.Blue, color.Alpha};
-        }
-
-        public static float[] ToArray(this Vertice.Core.Vector3 vector3)
-        {
-            return new[] { vector3.X, vector3.Y, vector3.Z };
-        }
-
-        public static float[] ToArray(this Vertice.Core.Matrix matrix)
-        {
-            return new[]
-            {
-                matrix.M11, matrix.M12, matrix.M13, matrix.M14,
-                matrix.M21, matrix.M22, matrix.M23, matrix.M24,
-                matrix.M31, matrix.M32, matrix.M33, matrix.M34,
-                matrix.M41, matrix.M42, matrix.M43, matrix.M44,
-            };
-        }
-
-        public static float[] ToArray(this Vertice.Core.Vector4 vector4)
-        {
-            return new[] { vector4.X, vector4.Y, vector4.Z, vector4.W };
-        }
-
-        public static float[] ToArray(this Vertice.Core.Quaternion quaternion)
-        {
-            return new[] { quaternion.X, quaternion.Y, quaternion.Z, quaternion.W };
-        }
-
-        public static SharpDX.Matrix ToMatrix(this Microsoft.Xna.Framework.Matrix value)
-        {
-            return new SharpDX.Matrix(
-                value.M11, value.M12, value.M13, value.M14,
-                value.M21, value.M22, value.M23, value.M24,
-                value.M31, value.M32, value.M33, value.M34,
-                value.M41, value.M42, value.M43, value.M44
-                );
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Interface/BabylonExport.Interface.csproj b/Exporters/FBX - OBJ/BabylonExport.Interface/BabylonExport.Interface.csproj
deleted file mode 100644
index 5617829..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Interface/BabylonExport.Interface.csproj	
+++ /dev/null
@@ -1,58 +0,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{DEC52846-FFCB-4A66-9F13-64F65B61EDBA}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>BabylonExport.Interface</RootNamespace>
-    <AssemblyName>BabylonExport.Interface</AssemblyName>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <SccProjectName>SAK</SccProjectName>
-    <SccLocalPath>SAK</SccLocalPath>
-    <SccAuxPath>SAK</SccAuxPath>
-    <SccProvider>SAK</SccProvider>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.ServiceModel" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="IService.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>
\ No newline at end of file
diff --git a/Exporters/FBX - OBJ/BabylonExport.Interface/IService.cs b/Exporters/FBX - OBJ/BabylonExport.Interface/IService.cs
deleted file mode 100644
index a7658c1..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Interface/IService.cs	
+++ /dev/null
@@ -1,17 +0,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.ServiceModel;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace BabylonExport.Interface
-{
-
-    [ServiceContract]
-    public interface IService
-    {
-        [OperationContract]
-        bool Convert(string file, string outputName);
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport.Interface/Properties/AssemblyInfo.cs b/Exporters/FBX - OBJ/BabylonExport.Interface/Properties/AssemblyInfo.cs
deleted file mode 100644
index ba7a22b..0000000
--- a/Exporters/FBX - OBJ/BabylonExport.Interface/Properties/AssemblyInfo.cs	
+++ /dev/null
@@ -1,36 +0,0 @@
-﻿using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following 
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("BabylonExport.Interface")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("BabylonExport.Interface")]
-[assembly: AssemblyCopyright("Copyright ©  2013")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible 
-// to COM components.  If you need to access a type in this assembly from 
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("99970c29-2668-4b9f-858a-f32c260bcc12")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version 
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers 
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Exporters/FBX - OBJ/BabylonExport.zip b/Exporters/FBX - OBJ/BabylonExport.zip
deleted file mode 100644
index e98de35..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport.zip and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport/App.config b/Exporters/FBX - OBJ/BabylonExport/App.config
deleted file mode 100644
index 046b1cc..0000000
--- a/Exporters/FBX - OBJ/BabylonExport/App.config	
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0"?>
-<configuration>
-  <startup useLegacyV2RuntimeActivationPolicy="true"> 
-        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
-    </startup>
-</configuration>
diff --git a/Exporters/FBX - OBJ/BabylonExport/BabylonExport.csproj b/Exporters/FBX - OBJ/BabylonExport/BabylonExport.csproj
deleted file mode 100644
index a155205..0000000
--- a/Exporters/FBX - OBJ/BabylonExport/BabylonExport.csproj	
+++ /dev/null
@@ -1,933 +0,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{1E0A8EB2-7022-42E2-8970-F0374188A09D}</ProjectGuid>
-    <OutputType>Exe</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>BabylonExport</RootNamespace>
-    <AssemblyName>BabylonExport</AssemblyName>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <SccProjectName>SAK</SccProjectName>
-    <SccLocalPath>SAK</SccLocalPath>
-    <SccAuxPath>SAK</SccAuxPath>
-    <SccProvider>SAK</SccProvider>
-    <TargetFrameworkProfile />
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
-    <RestorePackages>true</RestorePackages>
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <PlatformTarget>x86</PlatformTarget>
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <Prefer32Bit>false</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <PlatformTarget>AnyCPU</PlatformTarget>
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <Prefer32Bit>false</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <Prefer32Bit>false</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <Prefer32Bit>false</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x86\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <Prefer32Bit>false</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
-    <OutputPath>bin\x86\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <Prefer32Bit>false</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup>
-    <StartupObject />
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline">
-      <HintPath>..\BabylonExport.Core\Refs\Microsoft.Xna.Framework.Content.Pipeline.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.AudioImporters">
-      <HintPath>..\BabylonExport.Core\Refs\Microsoft.Xna.Framework.Content.Pipeline.AudioImporters.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.EffectImporter">
-      <HintPath>..\BabylonExport.Core\Refs\Microsoft.Xna.Framework.Content.Pipeline.EffectImporter.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.FBXImporter">
-      <HintPath>..\BabylonExport.Core\Refs\Microsoft.Xna.Framework.Content.Pipeline.FBXImporter.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.TextureImporter">
-      <HintPath>..\BabylonExport.Core\Refs\Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.VideoImporters">
-      <HintPath>..\BabylonExport.Core\Refs\Microsoft.Xna.Framework.Content.Pipeline.VideoImporters.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.XImporter">
-      <HintPath>..\BabylonExport.Core\Refs\Microsoft.Xna.Framework.Content.Pipeline.XImporter.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="Microsoft.Xna.Framework.Tools.Packaging.Tasks">
-      <HintPath>..\BabylonExport.Core\Refs\Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll</HintPath>
-    </Reference>
-    <Reference Include="SkinnedModel, Version=1.0.0.0, Culture=neutral, processorArchitecture=x86">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\BabylonExport.Core\Refs\SkinnedModel.dll</HintPath>
-    </Reference>
-    <Reference Include="SkinnedModelPipeline">
-      <HintPath>..\BabylonExport.Core\Refs\SkinnedModelPipeline.dll</HintPath>
-    </Reference>
-    <Reference Include="System">
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Core">
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Drawing">
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Runtime.Serialization">
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.ServiceModel">
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Windows.Forms">
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Xml.Linq">
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Data.DataSetExtensions">
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="Microsoft.CSharp">
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Data">
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Xml">
-      <Private>True</Private>
-    </Reference>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Program.cs" />
-    <Compile Include="Service.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <Content Include="generateAll.bat">
-      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
-    </Content>
-    <None Include="Test scenes\Chimie\BalanceDM.dds" />
-    <None Include="Test scenes\Chimie\BalanceLightingMap.dds" />
-    <None Include="Test scenes\Chimie\BoisLightingMap.dds" />
-    <None Include="Test scenes\Chimie\Book.dds" />
-    <None Include="Test scenes\Chimie\Box029CompleteMap.dds" />
-    <None Include="Test scenes\Chimie\Box079LightingMap.dds" />
-    <None Include="Test scenes\Chimie\Briquesblanches.dds" />
-    <None Include="Test scenes\Chimie\BullesB.dds" />
-    <None Include="Test scenes\Chimie\Bumpverre.dds" />
-    <None Include="Test scenes\Chimie\ChalkboardCompleteMap.dds" />
-    <None Include="Test scenes\Chimie\Chimie.dds" />
-    <None Include="Test scenes\Chimie\ChromeLightingMap.dds" />
-    <None Include="Test scenes\Chimie\Cylinder008LightingMap.dds" />
-    <None Include="Test scenes\Chimie\flamme-gaz.dds" />
-    <None Include="Test scenes\Chimie\Floor.dds" />
-    <None Include="Test scenes\Chimie\Graph.dds" />
-    <None Include="Test scenes\Chimie\Gris somreLightingMap.dds" />
-    <None Include="Test scenes\Chimie\Heart.mxb" />
-    <None Include="Test scenes\Chimie\Liquide002LightingMap.dds" />
-    <None Include="Test scenes\Chimie\Marble.dds" />
-    <None Include="Test scenes\Chimie\MursLightingMap.dds" />
-    <None Include="Test scenes\Chimie\Object1LightingMap.dds" />
-    <None Include="Test scenes\Chimie\Ordi001LightingMap.dds" />
-    <None Include="Test scenes\Chimie\OrdiDiffuseMap.dds" />
-    <None Include="Test scenes\Chimie\PaillasseLightingMap.dds" />
-    <None Include="Test scenes\Chimie\Plane003LightingMap.dds" />
-    <None Include="Test scenes\Chimie\Plaque.dds" />
-    <None Include="Test scenes\Chimie\ref1.dds" />
-    <None Include="Test scenes\Chimie\Sky.dds" />
-    <None Include="Test scenes\Chimie\VerreLightingMap.dds" />
-    <None Include="Test scenes\Chimie\Wood.dds" />
-    <None Include="Test scenes\Dude\dude.fbx" />
-    <None Include="Test scenes\Espilit\arbresmassif.dds" />
-    <None Include="Test scenes\Espilit\Blanc.dds" />
-    <None Include="Test scenes\Espilit\Booklet.dds" />
-    <None Include="Test scenes\Espilit\BouteilleBlanc.dds" />
-    <None Include="Test scenes\Espilit\BouteilleRouge.dds" />
-    <None Include="Test scenes\Espilit\ChaisesLightingMap.dds" />
-    <None Include="Test scenes\Espilit\ChaisesSpecMap.dds" />
-    <None Include="Test scenes\Espilit\Chassis table CorbuLightingMap.dds" />
-    <None Include="Test scenes\Espilit\Ciel.dds" />
-    <None Include="Test scenes\Espilit\concrete3.dds" />
-    <None Include="Test scenes\Espilit\concrete5.dds" />
-    <None Include="Test scenes\Espilit\Cuir.dds" />
-    <None Include="Test scenes\Espilit\Depliant.dds" />
-    <None Include="Test scenes\Espilit\DepliantLightingMap.dds" />
-    <None Include="Test scenes\Espilit\Espilit.mxb" />
-    <None Include="Test scenes\Espilit\Espilit.mxb.delta" />
-    <None Include="Test scenes\Espilit\Espilit.nss" />
-    <None Include="Test scenes\Espilit\Expo1.dds" />
-    <None Include="Test scenes\Espilit\Expo2.dds" />
-    <None Include="Test scenes\Espilit\Fond tableau02LightingMap.dds" />
-    <None Include="Test scenes\Espilit\Fondtableaunew02LightingMap.dds" />
-    <None Include="Test scenes\Espilit\GravierDiff.dds" />
-    <None Include="Test scenes\Espilit\herbe2.dds" />
-    <None Include="Test scenes\Espilit\Line01CompMap.dds" />
-    <None Include="Test scenes\Espilit\Line01LightingMap.dds" />
-    <None Include="Test scenes\Espilit\Metal NoirLightingMap.dds" />
-    <None Include="Test scenes\Espilit\Murs pansLightingMap.dds" />
-    <None Include="Test scenes\Espilit\MursLightingMap.dds" />
-    <None Include="Test scenes\Espilit\Noir.dds" />
-    <None Include="Test scenes\Espilit\PanneauAide.dds" />
-    <None Include="Test scenes\Espilit\Plaques Faux PlafondsLightingMap.dds" />
-    <None Include="Test scenes\Espilit\PlaquesPlafond.dds" />
-    <None Include="Test scenes\Espilit\Refcube.dds" />
-    <None Include="Test scenes\Espilit\Refcubenoire.dds" />
-    <None Include="Test scenes\Espilit\Refsol.dds" />
-    <None Include="Test scenes\Espilit\Rochers.dds" />
-    <None Include="Test scenes\Espilit\Rouge.dds" />
-    <None Include="Test scenes\Espilit\Sol.dds" />
-    <None Include="Test scenes\Espilit\SolsLightingMap.dds" />
-    <None Include="Test scenes\Espilit\Spec.dds" />
-    <None Include="Test scenes\Espilit\T33LightingMap.dds" />
-    <None Include="Test scenes\Espilit\TableauxDiffuseMap.dds" />
-    <None Include="Test scenes\Espilit\Tables bonettoLightingMap.dds" />
-    <None Include="Test scenes\Espilit\Tapis.dds" />
-    <None Include="Test scenes\Espilit\Titre1.dds" />
-    <None Include="Test scenes\Espilit\TitreAide.dds" />
-    <None Include="Test scenes\Espilit\TitreCam.dds" />
-    <None Include="Test scenes\Espilit\Toile.dds" />
-    <None Include="Test scenes\Espilit\Tree.dds" />
-    <None Include="Test scenes\Espilit\VerreBump.dds" />
-    <None Include="Test scenes\Flat2009\1.dds" />
-    <None Include="Test scenes\Flat2009\2.dds" />
-    <None Include="Test scenes\Flat2009\3.dds" />
-    <None Include="Test scenes\Flat2009\3602.dds" />
-    <None Include="Test scenes\Flat2009\3602low.dds" />
-    <None Include="Test scenes\Flat2009\4.dds" />
-    <None Include="Test scenes\Flat2009\Affiches.dds" />
-    <None Include="Test scenes\Flat2009\Affiches2.dds" />
-    <None Include="Test scenes\Flat2009\AquariumLM.dds" />
-    <None Include="Test scenes\Flat2009\BathTapis.dds" />
-    <None Include="Test scenes\Flat2009\beton.dds" />
-    <None Include="Test scenes\Flat2009\Betonmurs.dds" />
-    <None Include="Test scenes\Flat2009\Bibelots.dds" />
-    <None Include="Test scenes\Flat2009\bibelotslightingmap.dds" />
-    <None Include="Test scenes\Flat2009\boisclair.dds" />
-    <None Include="Test scenes\Flat2009\Boisplandetravail.dds" />
-    <None Include="Test scenes\Flat2009\Boisrouge.dds" />
-    <None Include="Test scenes\Flat2009\bOUQUINS.DDS" />
-    <None Include="Test scenes\Flat2009\Bruitverre.dds" />
-    <None Include="Test scenes\Flat2009\Btn.dds" />
-    <None Include="Test scenes\Flat2009\Btn2.dds" />
-    <None Include="Test scenes\Flat2009\Btn3.dds" />
-    <None Include="Test scenes\Flat2009\Bulles.dds" />
-    <None Include="Test scenes\Flat2009\Bumpcuir.dds" />
-    <None Include="Test scenes\Flat2009\canap1lightingmap.dds" />
-    <None Include="Test scenes\Flat2009\canap1lightingmap2.dds" />
-    <None Include="Test scenes\Flat2009\CarreauxVerreBump.dds" />
-    <None Include="Test scenes\Flat2009\CarreauxVerreDiff.dds" />
-    <None Include="Test scenes\Flat2009\CarreauxVerreNM.dds" />
-    <None Include="Test scenes\Flat2009\ChassisboisLightingMap.dds" />
-    <None Include="Test scenes\Flat2009\Clavier2.dds" />
-    <None Include="Test scenes\Flat2009\CouverturesA.dds" />
-    <None Include="Test scenes\Flat2009\Couvrante1.dds" />
-    <None Include="Test scenes\Flat2009\Couvrante2.dds" />
-    <None Include="Test scenes\Flat2009\cuir.dds" />
-    <None Include="Test scenes\Flat2009\cuirBleu.dds" />
-    <None Include="Test scenes\Flat2009\cuirNoir.dds" />
-    <None Include="Test scenes\Flat2009\Cuivre.dds" />
-    <None Include="Test scenes\Flat2009\drapsNM.dds" />
-    <None Include="Test scenes\Flat2009\Eau.dds" />
-    <None Include="Test scenes\Flat2009\EcranPC1.dds" />
-    <None Include="Test scenes\Flat2009\Facade.dds" />
-    <None Include="Test scenes\Flat2009\Faience.dds" />
-    <None Include="Test scenes\Flat2009\Flat2009.mxb" />
-    <None Include="Test scenes\Flat2009\four.dds" />
-    <None Include="Test scenes\Flat2009\Fresnel1.dds" />
-    <None Include="Test scenes\Flat2009\Fresnel2.dds" />
-    <None Include="Test scenes\Flat2009\GresNM.dds" />
-    <None Include="Test scenes\Flat2009\Grille.dds" />
-    <None Include="Test scenes\Flat2009\Grès.dds" />
-    <None Include="Test scenes\Flat2009\GuitareExplo.dds" />
-    <None Include="Test scenes\Flat2009\GuitareFV.dds" />
-    <None Include="Test scenes\Flat2009\GuitarSG.dds" />
-    <None Include="Test scenes\Flat2009\Halo.dds" />
-    <None Include="Test scenes\Flat2009\Halogene.dds" />
-    <None Include="Test scenes\Flat2009\Here.dds" />
-    <None Include="Test scenes\Flat2009\induction.dds" />
-    <None Include="Test scenes\Flat2009\Inter.dds" />
-    <None Include="Test scenes\Flat2009\LakeRef.dds" />
-    <None Include="Test scenes\Flat2009\LampeSalonDiff.dds" />
-    <None Include="Test scenes\Flat2009\Layout.dds" />
-    <None Include="Test scenes\Flat2009\Machines.dds" />
-    <None Include="Test scenes\Flat2009\Marbre1.dds" />
-    <None Include="Test scenes\Flat2009\MarkLitCHParents.dds" />
-    <None Include="Test scenes\Flat2009\MarkMarshall.dds" />
-    <None Include="Test scenes\Flat2009\MarkMobilier.dds" />
-    <None Include="Test scenes\Flat2009\MarkRideauCatz.dds" />
-    <None Include="Test scenes\Flat2009\MarkSolCHparents.dds" />
-    <None Include="Test scenes\Flat2009\Marshall.dds" />
-    <None Include="Test scenes\Flat2009\MCanape.dds" />
-    <None Include="Test scenes\Flat2009\Mcanape3.dds" />
-    <None Include="Test scenes\Flat2009\Metal1.dds" />
-    <None Include="Test scenes\Flat2009\meubleslightingmap.dds" />
-    <None Include="Test scenes\Flat2009\MExplor.dds" />
-    <None Include="Test scenes\Flat2009\Mfauteuil.dds" />
-    <None Include="Test scenes\Flat2009\MFLying.dds" />
-    <None Include="Test scenes\Flat2009\Mfour.dds" />
-    <None Include="Test scenes\Flat2009\MoquetteRouge.dds" />
-    <None Include="Test scenes\Flat2009\MoquetteSAM.dds" />
-    <None Include="Test scenes\Flat2009\MoquetteVerte.dds" />
-    <None Include="Test scenes\Flat2009\MoquetteVioline.dds" />
-    <None Include="Test scenes\Flat2009\MSG.dds" />
-    <None Include="Test scenes\Flat2009\MTableauSalon.dds" />
-    <None Include="Test scenes\Flat2009\Mtele.dds" />
-    <None Include="Test scenes\Flat2009\MurCh1.dds" />
-    <None Include="Test scenes\Flat2009\MurCH2.dds" />
-    <None Include="Test scenes\Flat2009\MurCh3.dds" />
-    <None Include="Test scenes\Flat2009\MurEditBrique.dds" />
-    <None Include="Test scenes\Flat2009\MurEditBriqueNM.dds" />
-    <None Include="Test scenes\Flat2009\MurEditStickers.dds" />
-    <None Include="Test scenes\Flat2009\MurEditStickers2.dds" />
-    <None Include="Test scenes\Flat2009\MurEditStickersSpec.dds" />
-    <None Include="Test scenes\Flat2009\murschambreverteNM.dds" />
-    <None Include="Test scenes\Flat2009\Murscuisine.dds" />
-    <None Include="Test scenes\Flat2009\MurSDB.dds" />
-    <None Include="Test scenes\Flat2009\MurSDBBump.dds" />
-    <None Include="Test scenes\Flat2009\MursToilettes.dds" />
-    <None Include="Test scenes\Flat2009\MursToilettes2.dds" />
-    <None Include="Test scenes\Flat2009\MursToilettes2Spec.dds" />
-    <None Include="Test scenes\Flat2009\paillasse.dds" />
-    <None Include="Test scenes\Flat2009\paintsalon.dds" />
-    <None Include="Test scenes\Flat2009\PaintSalon2.dds" />
-    <None Include="Test scenes\Flat2009\PaintSalon3.dds" />
-    <None Include="Test scenes\Flat2009\Part1.dds" />
-    <None Include="Test scenes\Flat2009\PlanteA2Alt.dds" />
-    <None Include="Test scenes\Flat2009\PlanteAAlt.dds" />
-    <None Include="Test scenes\Flat2009\PlanteaLT.dds" />
-    <None Include="Test scenes\Flat2009\poigneefenetreslightingmap.dds" />
-    <None Include="Test scenes\Flat2009\Poisson1Alt.dds" />
-    <None Include="Test scenes\Flat2009\PPbois.dds" />
-    <None Include="Test scenes\Flat2009\PPboisNM.DDS" />
-    <None Include="Test scenes\Flat2009\PriseMurale.dds" />
-    <None Include="Test scenes\Flat2009\Ref1.dds" />
-    <None Include="Test scenes\Flat2009\RefChrome.dds" />
-    <None Include="Test scenes\Flat2009\RefChromeRouge.dds" />
-    <None Include="Test scenes\Flat2009\RefTableau.dds" />
-    <None Include="Test scenes\Flat2009\Ref_probe.dds" />
-    <None Include="Test scenes\Flat2009\SAMParquet.dds" />
-    <None Include="Test scenes\Flat2009\SANDAlt.dds" />
-    <None Include="Test scenes\Flat2009\Serviettes.dds" />
-    <None Include="Test scenes\Flat2009\Shanghai_1933.dds" />
-    <None Include="Test scenes\Flat2009\Solcarreaux.dds" />
-    <None Include="Test scenes\Flat2009\Solcarreauxbump.dds" />
-    <None Include="Test scenes\Flat2009\sollightingmap.dds" />
-    <None Include="Test scenes\Flat2009\Souris.dds" />
-    <None Include="Test scenes\Flat2009\tablauxlightingmap.dds" />
-    <None Include="Test scenes\Flat2009\TapisserieJaune.dds" />
-    <None Include="Test scenes\Flat2009\Tele.dds" />
-    <None Include="Test scenes\Flat2009\Telespec.dds" />
-    <None Include="Test scenes\Flat2009\tentures.dds" />
-    <None Include="Test scenes\Flat2009\tentures2.dds" />
-    <None Include="Test scenes\Flat2009\Test2.dds" />
-    <None Include="Test scenes\Flat2009\vitres01lightingmap.dds" />
-    <None Include="Test scenes\Flat2009\wallslightingmap2.dds" />
-    <None Include="Test scenes\Flat2009\wallslightingmap3.dds" />
-    <None Include="Test scenes\Rabbit\Rabbit.fbx" />
-    <None Include="Test scenes\Robot\Robot.mxb" />
-    <None Include="Test scenes\SpaceDeK\Bidule1.dds" />
-    <None Include="Test scenes\SpaceDeK\Bidule1SI.dds" />
-    <None Include="Test scenes\SpaceDeK\Bidulelaser.dds" />
-    <None Include="Test scenes\SpaceDeK\BidulelaserSI.dds" />
-    <None Include="Test scenes\SpaceDeK\BiduleOmega.dds" />
-    <None Include="Test scenes\SpaceDeK\Biduleshield.dds" />
-    <None Include="Test scenes\SpaceDeK\BiduleShieldSI.dds" />
-    <None Include="Test scenes\SpaceDeK\Boss1DiffuseMap.dds" />
-    <None Include="Test scenes\SpaceDeK\Boss1Spec.dds" />
-    <None Include="Test scenes\SpaceDeK\Ennemi1DiffuseMap.dds" />
-    <None Include="Test scenes\SpaceDeK\Ennemi1SpecularMap.dds" />
-    <None Include="Test scenes\SpaceDeK\Explo.dds" />
-    <None Include="Test scenes\SpaceDeK\Explo2.dds" />
-    <None Include="Test scenes\SpaceDeK\Laser1.dds" />
-    <None Include="Test scenes\SpaceDeK\Laser2.dds" />
-    <None Include="Test scenes\SpaceDeK\Missile.DDS" />
-    <None Include="Test scenes\SpaceDeK\Part.dds" />
-    <None Include="Test scenes\SpaceDeK\Premplan.dds" />
-    <None Include="Test scenes\SpaceDeK\Protec.dds" />
-    <None Include="Test scenes\SpaceDeK\ProtecSpec.dds" />
-    <None Include="Test scenes\SpaceDeK\refext2.dds" />
-    <None Include="Test scenes\SpaceDeK\SpaceDek.mxb" />
-    <None Include="Test scenes\Spaceship\SpaceShip.fbx" />
-    <None Include="Test scenes\TestAnim\testanim.mxb" />
-    <None Include="Test scenes\TheCar\BarresLightingMap.dds" />
-    <None Include="Test scenes\TheCar\beigeLightingMap.dds" />
-    <None Include="Test scenes\TheCar\Bequet.dds" />
-    <None Include="Test scenes\TheCar\BequetB.dds" />
-    <None Include="Test scenes\TheCar\Bequetnoir.dds" />
-    <None Include="Test scenes\TheCar\betonext.dds" />
-    <None Include="Test scenes\TheCar\bodyLightingMap.dds" />
-    <None Include="Test scenes\TheCar\Bois.dds" />
-    <None Include="Test scenes\TheCar\Boutons.dds" />
-    <None Include="Test scenes\TheCar\BOUTONS2.dds" />
-    <None Include="Test scenes\TheCar\C-Max_commande_retrosDiffuseMap.dds" />
-    <None Include="Test scenes\TheCar\CarrosserieLightingMap.dds" />
-    <None Include="Test scenes\TheCar\CarrosserieLightingMapB.dds" />
-    <None Include="Test scenes\TheCar\CarrosserieLightingMapNoire.dds" />
-    <None Include="Test scenes\TheCar\ChassisverreLightingMap.dds" />
-    <None Include="Test scenes\TheCar\cheminee.dds" />
-    <None Include="Test scenes\TheCar\ChemineeLightingMap.dds" />
-    <None Include="Test scenes\TheCar\Ciel15.dds" />
-    <None Include="Test scenes\TheCar\Ciment1.dds" />
-    <None Include="Test scenes\TheCar\Ciment1NM.dds" />
-    <None Include="Test scenes\TheCar\Cligno.dds" />
-    <None Include="Test scenes\TheCar\degradecine.dds" />
-    <None Include="Test scenes\TheCar\DSC_5082.dds" />
-    <None Include="Test scenes\TheCar\eaubump.dds" />
-    <None Include="Test scenes\TheCar\Feuarr.dds" />
-    <None Include="Test scenes\TheCar\FeuxarrNM.dds" />
-    <None Include="Test scenes\TheCar\flare0.dds" />
-    <None Include="Test scenes\TheCar\Ford_02.dds" />
-    <None Include="Test scenes\TheCar\foret.dds" />
-    <None Include="Test scenes\TheCar\Ghia.dds" />
-    <None Include="Test scenes\TheCar\goudron.dds" />
-    <None Include="Test scenes\TheCar\gps.dds" />
-    <None Include="Test scenes\TheCar\gRILLE.dds" />
-    <None Include="Test scenes\TheCar\gRILLEnm.dds" />
-    <None Include="Test scenes\TheCar\immeublesLightingMap.dds" />
-    <None Include="Test scenes\TheCar\interface.dds" />
-    <None Include="Test scenes\TheCar\layout.dds" />
-    <None Include="Test scenes\TheCar\LAYOUT3.dds" />
-    <None Include="Test scenes\TheCar\leather_bump.dds" />
-    <None Include="Test scenes\TheCar\Line03LightingMap.dds" />
-    <None Include="Test scenes\TheCar\lumLightingMap.dds" />
-    <None Include="Test scenes\TheCar\Madewith58.dds" />
-    <None Include="Test scenes\TheCar\Metal.dds" />
-    <None Include="Test scenes\TheCar\MetalLightingMap.dds" />
-    <None Include="Test scenes\TheCar\metalrouille.dds" />
-    <None Include="Test scenes\TheCar\metalrouilleNM.dds" />
-    <None Include="Test scenes\TheCar\metalrouilletubes.dds" />
-    <None Include="Test scenes\TheCar\metalrouilletubesNM.dds" />
-    <None Include="Test scenes\TheCar\Murs1.dds" />
-    <None Include="Test scenes\TheCar\Murs1NM.dds" />
-    <None Include="Test scenes\TheCar\Mursext.dds" />
-    <None Include="Test scenes\TheCar\MursLightingMap.dds" />
-    <None Include="Test scenes\TheCar\Phareav.dds" />
-    <None Include="Test scenes\TheCar\Plaque.dds" />
-    <None Include="Test scenes\TheCar\PlaqueLightingMap.dds" />
-    <None Include="Test scenes\TheCar\PlaqueNM.dds" />
-    <None Include="Test scenes\TheCar\Plaqueshautes.dds" />
-    <None Include="Test scenes\TheCar\PlaqueshautesNM.dds" />
-    <None Include="Test scenes\TheCar\portable.dds" />
-    <None Include="Test scenes\TheCar\Porte1LightingMap.dds" />
-    <None Include="Test scenes\TheCar\PortesMetal.dds" />
-    <None Include="Test scenes\TheCar\PortesMetalNM.dds" />
-    <None Include="Test scenes\TheCar\PoteauIPNLightingMap.dds" />
-    <None Include="Test scenes\TheCar\PoutreLightingMap.dds" />
-    <None Include="Test scenes\TheCar\refcube3.dds" />
-    <None Include="Test scenes\TheCar\refcubephare.dds" />
-    <None Include="Test scenes\TheCar\Refsalon2.dds" />
-    <None Include="Test scenes\TheCar\reftest.dds" />
-    <None Include="Test scenes\TheCar\SolEcxtLightingMap.dds" />
-    <None Include="Test scenes\TheCar\SoustoitLightingMap.dds" />
-    <None Include="Test scenes\TheCar\Spec.dds" />
-    <None Include="Test scenes\TheCar\SupportstubesLightingMap.dds" />
-    <None Include="Test scenes\TheCar\TheCar.mxb" />
-    <None Include="Test scenes\TheCar\TubesLightingMap.dds" />
-    <None Include="Test scenes\TheCar\tyre002b.dds" />
-    <None Include="Test scenes\TheCar\vitesses.dds" />
-    <None Include="Test scenes\TheCar\Vitres opac.dds" />
-    <None Include="Test scenes\TheCar\Vitres.dds" />
-    <None Include="Test scenes\TheCar\vitrescasees1.dds" />
-    <None Include="Test scenes\TheCar\vitrescasees2.dds" />
-    <None Include="Test scenes\TheCar\vitresloin.dds" />
-    <None Include="Test scenes\TheCar\volant.dds" />
-    <None Include="Test scenes\TheCar\wood.dds" />
-    <None Include="Test scenes\TheCar\WOODlm.dds" />
-    <None Include="Test scenes\Train\Train.babylon" />
-    <None Include="Test scenes\Train\train.mxb" />
-    <None Include="Test scenes\Viper\Viper.mtl" />
-    <None Include="Test scenes\Viper\Viper.obj" />
-    <None Include="App.config" />
-    <None Include="packages.config" />
-    <None Include="Test scenes\Wcafe\Affiches.dds" />
-    <None Include="Test scenes\Wcafe\Affiches2.dds" />
-    <None Include="Test scenes\Wcafe\Affiches3.dds" />
-    <None Include="Test scenes\Wcafe\AffichesLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\Bafle.dds" />
-    <None Include="Test scenes\Wcafe\BafleLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\Beton1.dds" />
-    <None Include="Test scenes\Wcafe\BlancUniLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\Bois2.dds" />
-    <None Include="Test scenes\Wcafe\Briques3.dds" />
-    <None Include="Test scenes\Wcafe\Canapé1LightingMap.dds" />
-    <None Include="Test scenes\Wcafe\Canette1.dds" />
-    <None Include="Test scenes\Wcafe\Canette2.dds" />
-    <None Include="Test scenes\Wcafe\ChaineHifi.dds" />
-    <None Include="Test scenes\Wcafe\ChaineHifi2.dds" />
-    <None Include="Test scenes\Wcafe\ChromeBrosséLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\ChromeLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\ColonnesLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\Coussins2LightingMap.dds" />
-    <None Include="Test scenes\Wcafe\CoussinsfauteuilLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\Cuir1Spec.dds" />
-    <None Include="Test scenes\Wcafe\Cuirbrun.dds" />
-    <None Include="Test scenes\Wcafe\CuirbrunSpec.dds" />
-    <None Include="Test scenes\Wcafe\CuiViolet.dds" />
-    <None Include="Test scenes\Wcafe\Degradebar.dds" />
-    <None Include="Test scenes\Wcafe\Degradé.dds" />
-    <None Include="Test scenes\Wcafe\Ecrantele1.dds" />
-    <None Include="Test scenes\Wcafe\EscalierLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\exit.dds" />
-    <None Include="Test scenes\Wcafe\FauteuilRond01LightingMap.dds" />
-    <None Include="Test scenes\Wcafe\Fauteuilsronds.dds" />
-    <None Include="Test scenes\Wcafe\Fndgris.dds" />
-    <None Include="Test scenes\Wcafe\Fndrouge2.dds" />
-    <None Include="Test scenes\Wcafe\Fondmeuble basLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\Fvert.dds" />
-    <None Include="Test scenes\Wcafe\Grille.dds" />
-    <None Include="Test scenes\Wcafe\liquiorange.dds" />
-    <None Include="Test scenes\Wcafe\Liquirouge.dds" />
-    <None Include="Test scenes\Wcafe\Liquivert.dds" />
-    <None Include="Test scenes\Wcafe\Logo.dds" />
-    <None Include="Test scenes\Wcafe\Masque1.dds" />
-    <None Include="Test scenes\Wcafe\Masque2.dds" />
-    <None Include="Test scenes\Wcafe\MurrdcLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\Mursdivers.dds" />
-    <None Include="Test scenes\Wcafe\NeonarcheAmbiant.dds" />
-    <None Include="Test scenes\Wcafe\NoirmatLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\Ordi.dds" />
-    <None Include="Test scenes\Wcafe\OrdiSI.dds" />
-    <None Include="Test scenes\Wcafe\OrdisLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\Pano2Alt.dds" />
-    <None Include="Test scenes\Wcafe\Pano5refNoirpurFloue.dds" />
-    <None Include="Test scenes\Wcafe\Parquet1.dds" />
-    <None Include="Test scenes\Wcafe\Parquet3.dds" />
-    <None Include="Test scenes\Wcafe\Peintureverte.dds" />
-    <None Include="Test scenes\Wcafe\PlafondsLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\Plancher2LightingMap.dds" />
-    <None Include="Test scenes\Wcafe\Plancherétage1LightingMap.dds" />
-    <None Include="Test scenes\Wcafe\PlotDiffuseMap.dds" />
-    <None Include="Test scenes\Wcafe\Produits.dds" />
-    <None Include="Test scenes\Wcafe\RedFlowers.dds" />
-    <None Include="Test scenes\Wcafe\Refcubenoire.dds" />
-    <None Include="Test scenes\Wcafe\Refcubenoireplate.dds" />
-    <None Include="Test scenes\Wcafe\Salade.dds" />
-    <None Include="Test scenes\Wcafe\SaladesLM.dds" />
-    <None Include="Test scenes\Wcafe\SolRDCLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\SpecMetalbrossé.dds" />
-    <None Include="Test scenes\Wcafe\Sponsor01DiffuseMap.dds" />
-    <None Include="Test scenes\Wcafe\Sticker haut.dds" />
-    <None Include="Test scenes\Wcafe\Surface.dds" />
-    <None Include="Test scenes\Wcafe\tableaux.dds" />
-    <None Include="Test scenes\Wcafe\TableSurfaceLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\tapis4.dds" />
-    <None Include="Test scenes\Wcafe\TapisLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\Tele.dds" />
-    <None Include="Test scenes\Wcafe\TeleSI.dds" />
-    <None Include="Test scenes\Wcafe\TéléLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\vENT.dds" />
-    <None Include="Test scenes\Wcafe\Verticola.dds" />
-    <None Include="Test scenes\Wcafe\Wcafe.mxb" />
-    <None Include="Test scenes\Wcafe\Wifi.dds" />
-    <None Include="Test scenes\Wcafe\Win7.dds" />
-    <None Include="Test scenes\Wcafe\Win7A.dds" />
-    <None Include="Test scenes\Wcafe\WinCafé1.dds" />
-    <None Include="Test scenes\Wcafe\WinCafé1IL.dds" />
-    <None Include="Test scenes\Wcafe\xBOXLightingMap.dds" />
-    <None Include="Test scenes\Wcafe\Xbrique.dds" />
-    <None Include="Test scenes\Wcafe\Zebu.dds" />
-    <None Include="Test scenes\Wcafe\ZincLightingMap.dds" />
-  </ItemGroup>
-  <ItemGroup>
-    <Content Include="DirectShow.Net.dll">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
-    <Content Include="Test scenes\Chimie\Coeur.jpg" />
-    <Content Include="Test scenes\Chimie\heartSpecjpg.jpg" />
-    <Content Include="Test scenes\Chimie\Labels.png" />
-    <Content Include="Test scenes\Dude\head.tga" />
-    <Content Include="Test scenes\Dude\jacket.tga" />
-    <Content Include="Test scenes\Dude\pants.tga" />
-    <Content Include="Test scenes\Dude\upBodyC.tga" />
-    <Content Include="Test scenes\Espilit\NovaScreenshot.jpg" />
-    <Content Include="Test scenes\Robot\DispenderDiffuseMap.dds" />
-    <Content Include="Test scenes\Robot\Dégrade.png" />
-    <Content Include="Test scenes\Robot\EnvAmbient Occlusion _MR.dds" />
-    <Content Include="Test scenes\Robot\Ref.dds" />
-    <Content Include="Test scenes\Robot\RobotCompmap.dds" />
-    <Content Include="Test scenes\Robot\RobotSpec.dds" />
-    <Content Include="Test scenes\Robot\Slide1.dds" />
-    <Content Include="Test scenes\SpaceDeK\FondSpace.jpg" />
-    <Content Include="Test scenes\SpaceDeK\Missile1SE.png" />
-    <Content Include="Test scenes\SpaceDeK\Missilespec.png" />
-    <Content Include="Test scenes\SpaceDeK\Part.jpg" />
-    <Content Include="Test scenes\SpaceDeK\react.jpg" />
-    <Content Include="Test scenes\SpaceDeK\React2.jpg" />
-    <Content Include="Test scenes\SpaceDeK\Vaisseau.bmp" />
-    <Content Include="Test scenes\SpaceDeK\Vaisseau000.bmp" />
-    <Content Include="Test scenes\SpaceDeK\VaisseauDiffuseMap.jpg" />
-    <Content Include="Test scenes\SpaceDeK\VaisseauSpecularMap.jpg" />
-    <Content Include="Test scenes\Spaceship\wedge_p2_diff_v1.tga" />
-    <Content Include="Test scenes\Train\barrieres_bois.dds" />
-    <Content Include="Test scenes\Train\barrieres_bois.jpg" />
-    <Content Include="Test scenes\Train\barrieres_bois_n.dds" />
-    <Content Include="Test scenes\Train\barrieres_bois_n.jpg" />
-    <Content Include="Test scenes\Train\bat_console_murs_ext_lm.dds" />
-    <Content Include="Test scenes\Train\bat_console_murs_ext_lm.jpg" />
-    <Content Include="Test scenes\Train\bat_console_murs_lm.dds" />
-    <Content Include="Test scenes\Train\bat_console_murs_lm.jpg" />
-    <Content Include="Test scenes\Train\bat_lm.dds" />
-    <Content Include="Test scenes\Train\bat_lm.jpg" />
-    <Content Include="Test scenes\Train\bg.dds" />
-    <Content Include="Test scenes\Train\bg_credits.dds" />
-    <Content Include="Test scenes\Train\bg_help.dds" />
-    <Content Include="Test scenes\Train\bosquet_grass.dds" />
-    <Content Include="Test scenes\Train\bosquet_grass.png" />
-    <Content Include="Test scenes\Train\bottes_paille.dds" />
-    <Content Include="Test scenes\Train\bottes_paille.jpg" />
-    <Content Include="Test scenes\Train\bottes_paille_face.dds" />
-    <Content Include="Test scenes\Train\bottes_paille_face.jpg" />
-    <Content Include="Test scenes\Train\champ_ble.dds" />
-    <Content Include="Test scenes\Train\champ_ble.png" />
-    <Content Include="Test scenes\Train\chariot_planche.dds" />
-    <Content Include="Test scenes\Train\chariot_planche.jpg" />
-    <Content Include="Test scenes\Train\chariot_planche_n.dds" />
-    <Content Include="Test scenes\Train\chariot_planche_n.jpg" />
-    <Content Include="Test scenes\Train\chariot_roue.dds" />
-    <Content Include="Test scenes\Train\chariot_roue.jpg" />
-    <Content Include="Test scenes\Train\chariot_roue_n.dds" />
-    <Content Include="Test scenes\Train\chariot_roue_n.jpg" />
-    <Content Include="Test scenes\Train\console.dds" />
-    <Content Include="Test scenes\Train\console.jpg" />
-    <Content Include="Test scenes\Train\console_n.dds" />
-    <Content Include="Test scenes\Train\console_n.jpg" />
-    <Content Include="Test scenes\Train\cubemap.dds" />
-    <Content Include="Test scenes\Train\cubemap5.dds" />
-    <Content Include="Test scenes\Train\cubemap5_nx.jpg" />
-    <Content Include="Test scenes\Train\cubemap5_ny.jpg" />
-    <Content Include="Test scenes\Train\cubemap5_nz.jpg" />
-    <Content Include="Test scenes\Train\cubemap5_px.jpg" />
-    <Content Include="Test scenes\Train\cubemap5_py.jpg" />
-    <Content Include="Test scenes\Train\cubemap5_pz.jpg" />
-    <Content Include="Test scenes\Train\cubemap_nx.jpg" />
-    <Content Include="Test scenes\Train\cubemap_ny.jpg" />
-    <Content Include="Test scenes\Train\cubemap_nz.jpg" />
-    <Content Include="Test scenes\Train\cubemap_px.jpg" />
-    <Content Include="Test scenes\Train\cubemap_py.jpg" />
-    <Content Include="Test scenes\Train\cubemap_pz.jpg" />
-    <Content Include="Test scenes\Train\cubemap_vitres.dds" />
-    <Content Include="Test scenes\Train\cubemap_vitres_nx.jpg" />
-    <Content Include="Test scenes\Train\cubemap_vitres_ny.jpg" />
-    <Content Include="Test scenes\Train\cubemap_vitres_nz.jpg" />
-    <Content Include="Test scenes\Train\cubemap_vitres_px.jpg" />
-    <Content Include="Test scenes\Train\cubemap_vitres_py.jpg" />
-    <Content Include="Test scenes\Train\cubemap_vitres_pz.jpg" />
-    <Content Include="Test scenes\Train\cuir.dds" />
-    <Content Include="Test scenes\Train\cuir.jpg" />
-    <Content Include="Test scenes\Train\cuir_n.dds" />
-    <Content Include="Test scenes\Train\cuir_n.jpg" />
-    <Content Include="Test scenes\Train\cur_default.cur" />
-    <Content Include="Test scenes\Train\cur_link.cur" />
-    <Content Include="Test scenes\Train\debug.txt" />
-    <Content Include="Test scenes\Train\disneyland_paris.dds" />
-    <Content Include="Test scenes\Train\disneyland_paris.jpg" />
-    <Content Include="Test scenes\Train\flechage.dds" />
-    <Content Include="Test scenes\Train\flechage.png" />
-    <Content Include="Test scenes\Train\flechage2.dds" />
-    <Content Include="Test scenes\Train\flechage2.png" />
-    <Content Include="Test scenes\Train\grass.dds" />
-    <Content Include="Test scenes\Train\grass.png" />
-    <Content Include="Test scenes\Train\grillage.dds" />
-    <Content Include="Test scenes\Train\grillage.png" />
-    <Content Include="Test scenes\Train\lens2.dds" />
-    <Content Include="Test scenes\Train\lens2.png" />
-    <Content Include="Test scenes\Train\lens3.dds" />
-    <Content Include="Test scenes\Train\lens3.png" />
-    <Content Include="Test scenes\Train\lens4.dds" />
-    <Content Include="Test scenes\Train\lens4.png" />
-    <Content Include="Test scenes\Train\lens5.dds" />
-    <Content Include="Test scenes\Train\lens5.png" />
-    <Content Include="Test scenes\Train\lens6.dds" />
-    <Content Include="Test scenes\Train\lens6.png" />
-    <Content Include="Test scenes\Train\lens_sun.dds" />
-    <Content Include="Test scenes\Train\light_blanche.dds" />
-    <Content Include="Test scenes\Train\light_jaune.dds" />
-    <Content Include="Test scenes\Train\light_rouge.dds" />
-    <Content Include="Test scenes\Train\light_verte.dds" />
-    <Content Include="Test scenes\Train\metal_rouille.dds" />
-    <Content Include="Test scenes\Train\metal_rouille.jpg" />
-    <Content Include="Test scenes\Train\metal_rouille_n.dds" />
-    <Content Include="Test scenes\Train\metal_rouille_n.jpg" />
-    <Content Include="Test scenes\Train\metal_tache.dds" />
-    <Content Include="Test scenes\Train\metal_tache.jpg" />
-    <Content Include="Test scenes\Train\metal_tache_n.dds" />
-    <Content Include="Test scenes\Train\metal_tache_n.jpg" />
-    <Content Include="Test scenes\Train\murs_wood.dds" />
-    <Content Include="Test scenes\Train\murs_wood.jpg" />
-    <Content Include="Test scenes\Train\murs_wood_n.dds" />
-    <Content Include="Test scenes\Train\murs_wood_n.jpg" />
-    <Content Include="Test scenes\Train\no_signal.dds" />
-    <Content Include="Test scenes\Train\no_signal.jpg" />
-    <Content Include="Test scenes\Train\OSVCenter.dds" />
-    <Content Include="Test scenes\Train\OSVCenterb.dds" />
-    <Content Include="Test scenes\Train\OSVFps.dds" />
-    <Content Include="Test scenes\Train\OSVFpsb.dds" />
-    <Content Include="Test scenes\Train\OSVFullScreen.dds" />
-    <Content Include="Test scenes\Train\OSVFullScreenb.dds" />
-    <Content Include="Test scenes\Train\OSVPan.dds" />
-    <Content Include="Test scenes\Train\OSVPanb.dds" />
-    <Content Include="Test scenes\Train\OSVRotation.dds" />
-    <Content Include="Test scenes\Train\OSVRotationb.dds" />
-    <Content Include="Test scenes\Train\OSVSound.dds" />
-    <Content Include="Test scenes\Train\OSVSoundb.dds" />
-    <Content Include="Test scenes\Train\OSVTemp.dds" />
-    <Content Include="Test scenes\Train\OSVTempb.dds" />
-    <Content Include="Test scenes\Train\OSVZoom.dds" />
-    <Content Include="Test scenes\Train\OSVZoomb.dds" />
-    <Content Include="Test scenes\Train\paille_alpha.dds" />
-    <Content Include="Test scenes\Train\paille_alpha.png" />
-    <Content Include="Test scenes\Train\pile_bois.dds" />
-    <Content Include="Test scenes\Train\pile_bois.jpg" />
-    <Content Include="Test scenes\Train\pile_bois_n.dds" />
-    <Content Include="Test scenes\Train\pile_bois_n.jpg" />
-    <Content Include="Test scenes\Train\planches.dds" />
-    <Content Include="Test scenes\Train\planches.jpg" />
-    <Content Include="Test scenes\Train\planches_n.dds" />
-    <Content Include="Test scenes\Train\planches_n.jpg" />
-    <Content Include="Test scenes\Train\poteaux.dds" />
-    <Content Include="Test scenes\Train\poteaux.jpg" />
-    <Content Include="Test scenes\Train\poteaux_n.dds" />
-    <Content Include="Test scenes\Train\poteaux_n.jpg" />
-    <Content Include="Test scenes\Train\poubelle.dds" />
-    <Content Include="Test scenes\Train\poubelle.jpg" />
-    <Content Include="Test scenes\Train\poubelle_n.dds" />
-    <Content Include="Test scenes\Train\poubelle_n.jpg" />
-    <Content Include="Test scenes\Train\rochers_big.dds" />
-    <Content Include="Test scenes\Train\rochers_big.jpg" />
-    <Content Include="Test scenes\Train\rochers_big_n.dds" />
-    <Content Include="Test scenes\Train\rochers_big_n.jpg" />
-    <Content Include="Test scenes\Train\rock_tunnel.dds" />
-    <Content Include="Test scenes\Train\rock_tunnel.jpg" />
-    <Content Include="Test scenes\Train\rock_tunnel_n.dds" />
-    <Content Include="Test scenes\Train\rock_tunnel_n.jpg" />
-    <Content Include="Test scenes\Train\sacs_sable.dds" />
-    <Content Include="Test scenes\Train\sacs_sable.jpg" />
-    <Content Include="Test scenes\Train\sacs_sable_n.dds" />
-    <Content Include="Test scenes\Train\sacs_sable_n.jpg" />
-    <Content Include="Test scenes\Train\sapin_leaves.dds" />
-    <Content Include="Test scenes\Train\sapin_leaves.png" />
-    <Content Include="Test scenes\Train\sapin_trunk_up.dds" />
-    <Content Include="Test scenes\Train\sapin_trunk_up.jpg" />
-    <Content Include="Test scenes\Train\sapin_trunk_up_n.dds" />
-    <Content Include="Test scenes\Train\sapin_trunk_up_n.jpg" />
-    <Content Include="Test scenes\Train\skydome.dds" />
-    <Content Include="Test scenes\Train\skydome.jpg" />
-    <Content Include="Test scenes\Train\smoke.dds" />
-    <Content Include="Test scenes\Train\smoke.png" />
-    <Content Include="Test scenes\Train\snd_bg.mp3" />
-    <Content Include="Test scenes\Train\snd_bt_clic.mp3" />
-    <Content Include="Test scenes\Train\snd_bt_clic_ui.wma" />
-    <Content Include="Test scenes\Train\snd_bt_roll.mp3" />
-    <Content Include="Test scenes\Train\snd_coaster_cry.mp3" />
-    <Content Include="Test scenes\Train\snd_roller_coaster.mp3" />
-    <Content Include="Test scenes\Train\snd_roller_coaster_loop.mp3" />
-    <Content Include="Test scenes\Train\snd_siren.mp3" />
-    <Content Include="Test scenes\Train\sol_metal.dds" />
-    <Content Include="Test scenes\Train\sol_metal.jpg" />
-    <Content Include="Test scenes\Train\sol_metal_n.dds" />
-    <Content Include="Test scenes\Train\sol_metal_n.jpg" />
-    <Content Include="Test scenes\Train\terrain1.dds" />
-    <Content Include="Test scenes\Train\terrain1.jpg" />
-    <Content Include="Test scenes\Train\terrain1_lm.dds" />
-    <Content Include="Test scenes\Train\terrain1_lm.jpg" />
-    <Content Include="Test scenes\Train\terrain1_n.dds" />
-    <Content Include="Test scenes\Train\terrain1_n.jpg" />
-    <Content Include="Test scenes\Train\terrain2.dds" />
-    <Content Include="Test scenes\Train\terrain2.jpg" />
-    <Content Include="Test scenes\Train\terrain2_lm.dds" />
-    <Content Include="Test scenes\Train\terrain2_lm.jpg" />
-    <Content Include="Test scenes\Train\terrain2_n.dds" />
-    <Content Include="Test scenes\Train\terrain2_n.jpg" />
-    <Content Include="Test scenes\Train\terrain3.dds" />
-    <Content Include="Test scenes\Train\terrain3.jpg" />
-    <Content Include="Test scenes\Train\terrain3_lm.dds" />
-    <Content Include="Test scenes\Train\terrain3_lm.jpg" />
-    <Content Include="Test scenes\Train\terrain3_n.dds" />
-    <Content Include="Test scenes\Train\terrain3_n.jpg" />
-    <Content Include="Test scenes\Train\terrain4.dds" />
-    <Content Include="Test scenes\Train\terrain4.jpg" />
-    <Content Include="Test scenes\Train\terrain4_lm.dds" />
-    <Content Include="Test scenes\Train\terrain4_lm.jpg" />
-    <Content Include="Test scenes\Train\terrain4_n.dds" />
-    <Content Include="Test scenes\Train\terrain4_n.jpg" />
-    <Content Include="Test scenes\Train\terrain_clotures_lm.dds" />
-    <Content Include="Test scenes\Train\terrain_clotures_lm.jpg" />
-    <Content Include="Test scenes\Train\terrain_escalier_lm.dds" />
-    <Content Include="Test scenes\Train\terrain_escalier_lm.jpg" />
-    <Content Include="Test scenes\Train\terrain_tunnel_lm.dds" />
-    <Content Include="Test scenes\Train\terrain_tunnel_lm.jpg" />
-    <Content Include="Test scenes\Train\toit_bois.dds" />
-    <Content Include="Test scenes\Train\toit_bois.jpg" />
-    <Content Include="Test scenes\Train\toit_bois_n.dds" />
-    <Content Include="Test scenes\Train\toit_bois_n.jpg" />
-    <Content Include="Test scenes\Train\tole.dds" />
-    <Content Include="Test scenes\Train\tole.jpg" />
-    <Content Include="Test scenes\Train\tole_n.dds" />
-    <Content Include="Test scenes\Train\tole_n.jpg" />
-    <Content Include="Test scenes\Train\tonneau.dds" />
-    <Content Include="Test scenes\Train\tonneau.jpg" />
-    <Content Include="Test scenes\Train\tonneau_n.dds" />
-    <Content Include="Test scenes\Train\tonneau_n.jpg" />
-    <Content Include="Test scenes\Train\tracteur.dds" />
-    <Content Include="Test scenes\Train\tracteur.jpg" />
-    <Content Include="Test scenes\Train\tracteur_n.dds" />
-    <Content Include="Test scenes\Train\tracteur_n.jpg" />
-    <Content Include="Test scenes\Train\train_4.dds" />
-    <Content Include="Test scenes\Train\train_4.jpg" />
-    <Content Include="Test scenes\Train\train_4_n.dds" />
-    <Content Include="Test scenes\Train\train_4_n.jpg" />
-    <Content Include="Test scenes\Train\train_cote.dds" />
-    <Content Include="Test scenes\Train\train_cote.jpg" />
-    <Content Include="Test scenes\Train\train_cote_n.dds" />
-    <Content Include="Test scenes\Train\train_cote_n.jpg" />
-    <Content Include="Test scenes\Train\train_loco_lm.dds" />
-    <Content Include="Test scenes\Train\train_loco_lm.jpg" />
-    <Content Include="Test scenes\Train\train_wagon_lm.dds" />
-    <Content Include="Test scenes\Train\train_wagon_lm.jpg" />
-    <Content Include="Test scenes\Train\tronc.dds" />
-    <Content Include="Test scenes\Train\tronc.jpg" />
-    <Content Include="Test scenes\Train\tronc_face.dds" />
-    <Content Include="Test scenes\Train\tronc_face.jpg" />
-    <Content Include="Test scenes\Train\tronc_face_n.dds" />
-    <Content Include="Test scenes\Train\tronc_face_n.jpg" />
-    <Content Include="Test scenes\Train\tronc_n.dds" />
-    <Content Include="Test scenes\Train\tronc_n.jpg" />
-    <Content Include="Test scenes\Train\verre_lampes.dds" />
-    <Content Include="Test scenes\Train\verre_lampes.jpg" />
-    <Content Include="Test scenes\Train\water_n.jpg" />
-    <Content Include="Test scenes\Viper\aripa-buna.jpg" />
-    <Content Include="Test scenes\Viper\carlinga-specular.jpg" />
-    <Content Include="Test scenes\Viper\carlinga.jpg" />
-    <Content Include="Test scenes\Viper\carma-creasta.jpg" />
-    <Content Include="Test scenes\Viper\carmaaripi.jpg" />
-    <Content Include="Test scenes\Viper\elicie.jpg" />
-    <Content Include="Test scenes\Viper\engine-cover-bump.jpg" />
-    <Content Include="Test scenes\Viper\engine-cover.jpg" />
-    <Content Include="Test scenes\Viper\engine-covers-specular.jpg" />
-    <Content Include="Test scenes\Viper\face-bump.jpg" />
-    <Content Include="Test scenes\Viper\face-specular.jpg" />
-    <Content Include="Test scenes\Viper\face.jpg" />
-    <Content Include="Test scenes\Viper\gun-romb.jpg" />
-    <Content Include="Test scenes\Viper\parbriz.jpg" />
-    <Content Include="Test scenes\Viper\Untitled-1.jpg" />
-    <Content Include="Test scenes\Viper\wing-bump.jpg" />
-    <Content Include="Test scenes\Viper\wing-specular.jpg" />
-    <Content Include="Test scenes\Viper\wing-up-bump.jpg" />
-    <Content Include="Test scenes\Viper\wing-up-specular.jpg" />
-    <Content Include="Test scenes\Viper\wing-up.jpg" />
-  </ItemGroup>
-  <ItemGroup>
-    <Folder Include="Properties\" />
-  </ItemGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include=".NETFramework,Version=v4.0">
-      <Visible>False</Visible>
-      <ProductName>Microsoft .NET Framework 4 %28x86 and x64%29</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.4.5">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 4.5</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\BabylonExport.Core\BabylonExport.Core.csproj">
-      <Project>{ce70b051-fb63-420d-80c0-51cc03a214ba}</Project>
-      <Name>BabylonExport.Core</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\BabylonExport.Interface\BabylonExport.Interface.csproj">
-      <Project>{dec52846-ffcb-4a66-9f13-64f65b61edba}</Project>
-      <Name>BabylonExport.Interface</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>
\ No newline at end of file
diff --git a/Exporters/FBX - OBJ/BabylonExport/DirectShow.Net.dll b/Exporters/FBX - OBJ/BabylonExport/DirectShow.Net.dll
deleted file mode 100644
index 30d6579..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport/DirectShow.Net.dll and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport/Exporters/Blender/io_export_babylon.zip b/Exporters/FBX - OBJ/BabylonExport/Exporters/Blender/io_export_babylon.zip
deleted file mode 100644
index e225a56..0000000
Binary files a/Exporters/FBX - OBJ/BabylonExport/Exporters/Blender/io_export_babylon.zip and /dev/null differ
diff --git a/Exporters/FBX - OBJ/BabylonExport/Program.cs b/Exporters/FBX - OBJ/BabylonExport/Program.cs
deleted file mode 100644
index c6cb912..0000000
--- a/Exporters/FBX - OBJ/BabylonExport/Program.cs	
+++ /dev/null
@@ -1,168 +0,0 @@
-﻿using System;
-using System.IO;
-using System.Reflection;
-using BabylonExport.Core.Exporters;
-using BabylonExport.Core.Exporters.FBX;
-using System.Windows.Forms;
-using System.ServiceModel;
-using BabylonExport.Interface;
-using BabylonExport.Core;
-
-namespace BabylonExport
-{
-    class Program
-    {
-        static void Main(string[] args)
-        {
-            string output = "";
-            try
-            {
-                if ((args.Length == 1) && (args[0] == "/service"))
-                {
-                    
-                    var serviceHost = new ServiceHost(typeof(Service), new Uri[] { new Uri("net.pipe://localhost/") });
-                    serviceHost.AddServiceEndpoint(typeof(IService), new NetNamedPipeBinding(), "exportservice");
-                    serviceHost.Open();
-
-                    Console.WriteLine("Service started. Available in following endpoints");
-                    foreach (var serviceEndpoint in serviceHost.Description.Endpoints)
-                    {
-                        Console.WriteLine(serviceEndpoint.ListenUri.AbsoluteUri);
-                    }
-                    Console.ReadLine();
-                }
-                else
-                {
-                    if (args.Length < 2)
-                    {
-                        DisplayUsage();
-                        return;
-                    }
-
-                    // Parsing arguments
-                    string input = "";
-                    bool skinned = false;
-                    foreach (var arg in args)
-                    {
-                        var order = arg.Substring(0, 3);
-
-                        switch (order)
-                        {
-                            case "/i:":
-                                input = arg.Substring(3);
-                                break;
-                            case "/o:":
-                                output = arg.Substring(3);
-                                break;
-                            case "/sk":
-                                skinned = true;
-                                break;
-                            default:
-                                DisplayUsage();
-                                return;
-                        }
-                    }
-
-                    if (string.IsNullOrEmpty(input) || string.IsNullOrEmpty(output))
-                    {
-                        DisplayUsage();
-                        return;
-                    }
-                    var extension = Path.GetExtension(input).ToLower();
-                    var outputName = Path.Combine(output, Path.GetFileNameWithoutExtension(input) + ".babylon");
-                    if (!Directory.Exists(output))
-                    {
-                        Directory.CreateDirectory(output);
-                    }
-
-                    // Browsing exporters
-                    foreach (var type in Assembly.GetAssembly(typeof(NovaExporter)).GetTypes())
-                    {
-                        var interf = type.GetInterface("BabylonExport.Core.IExporter");
-                        if (interf != null)
-                        {
-                            var importer = (IExporter)Activator.CreateInstance(type);
-
-                            if (!importer.SupportedExtensions.Contains(extension))
-                            {
-                                continue;
-                            }
-
-                            Console.WriteLine("Using " + type);
-
-                            // Importation
-                            try
-                            {
-                                importer.OnImportProgressChanged += progress =>
-                                    {
-                                        Console.CursorLeft = 0;
-                                        Console.Write("Generation....{0} %", progress);
-                                    };
-
-                                Console.ForegroundColor = ConsoleColor.Green;
-                                Console.WriteLine("Generation of " + outputName + " started");
-                                Console.WriteLine();
-                                Console.ResetColor();
-                                importer.GenerateBabylonFile(input, outputName, skinned);
-                                Console.ForegroundColor = ConsoleColor.Green;
-                                Console.WriteLine();
-                                Console.WriteLine();
-                                Console.WriteLine("Generation of " + outputName + " successfull");
-                                Console.ResetColor();
-                                using (var debugFile = new StreamWriter(output + @"\debug.txt", true))
-                                {
-                                    debugFile.Write("Generation of " + outputName + " successfull");
-                                }
-                 
-                            }
-                            catch (Exception ex)
-                            {
-                                Console.ForegroundColor = ConsoleColor.Red;
-                                Console.WriteLine();
-                                Console.WriteLine(ex.Message);
-                                Console.ResetColor();
-                                using (var debugFile = new StreamWriter(output + @"\debug.txt", true))
-                                {
-                                    debugFile.Write(ex.Message);
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            catch (ReflectionTypeLoadException ex)
-            {
-                Console.ForegroundColor = ConsoleColor.Red;
-                Console.WriteLine("Fatal error encountered:");
-                Console.WriteLine(ex.LoaderExceptions[0].Message);
-                Console.ResetColor();
-                if (output != "")
-                {
-                    using (var debugFile = new StreamWriter(output + @"\debug.txt", true))
-                    {
-                        debugFile.Write(ex.Message);
-                    }
-                }
-            }
-            catch (Exception ex)
-            {
-                Console.ForegroundColor = ConsoleColor.Red;
-                Console.WriteLine("Fatal error encountered:");
-                Console.WriteLine(ex.Message);
-                Console.ResetColor();
-                if (output != "")
-                {
-                    using (var debugFile = new StreamWriter(output + @"\debug.txt", true))
-                    {
-                        debugFile.Write(ex.Message);
-                    }
-                }
-            } 
-        }
-
-        static void DisplayUsage()
-        {
-            Console.WriteLine("Babylon Import usage: BabylonImport.exe /i:\"source file\" /o:\"output folder\" [/sk]");
-        }
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport/Service.cs b/Exporters/FBX - OBJ/BabylonExport/Service.cs
deleted file mode 100644
index 022cf13..0000000
--- a/Exporters/FBX - OBJ/BabylonExport/Service.cs	
+++ /dev/null
@@ -1,50 +0,0 @@
-﻿using BabylonExport.Core;
-using BabylonExport.Core.Exporters;
-using BabylonExport.Interface;
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace BabylonExport
-{
-    public class Service : IService
-    {
-        public bool Convert(string input, string outputName)
-        {
-            try
-            {
-                Console.WriteLine("input:" + input);
-                Console.WriteLine("outputName:" + outputName);
-                System.Diagnostics.Process p = new System.Diagnostics.Process();
-                p.StartInfo.FileName = "BabylonExport.exe";
-                p.StartInfo.Arguments = "/i:" + input + " /o:" + outputName;
-                p.Start();
-                if (p.WaitForExit(1000 * 60 * 3))
-                {
-                    p.Close();
-                    return true;
-                }
-                else
-                {
-                    p.Close();
-                    return false;
-                }
-                
-            }
-            catch (Exception ex)
-            {
-                Console.WriteLine(ex.Message);
-                return false;
-            }
-            
-        }
-
-
-    }
-}
diff --git a/Exporters/FBX - OBJ/BabylonExport/packages.config b/Exporters/FBX - OBJ/BabylonExport/packages.config
deleted file mode 100644
index 9caa189..0000000
--- a/Exporters/FBX - OBJ/BabylonExport/packages.config	
+++ /dev/null
@@ -1,4 +0,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="Newtonsoft.Json" version="5.0.4" targetFramework="net45" />
-</packages>
\ No newline at end of file
diff --git a/Exporters/FBX - OBJ/readme.md b/Exporters/FBX - OBJ/readme.md
deleted file mode 100644
index 3f65327..0000000
--- a/Exporters/FBX - OBJ/readme.md	
+++ /dev/null
@@ -1,35 +0,0 @@
-﻿BabylonExporter
-========
-
-BabylonExporter can create a .babylon scene from the following formats:
- - FBX
- - OBJ
-
-Command line usage:
-BabylonExporter.exe /i:"source.fbx" /o:"outputDir" [/sk]
-
-/sk option is used to export bones.
-
-
-* OBJ engine can export:
- * Geometries
- * Meshes hierarchies
- * Material:
-   * Diffuse color
-   * Diffuse texture
-   * Alpha
-   * Emissive color
-   * Specular color
-   * Specular power
-
-* FBX engine can export:
- * Geometries
- * Meshes hierarchies
- * Bones and bones' animations
- * Material:
-  * Diffuse color
-  * Diffuse texture
-  * Alpha
-  * Emissive color
-  * Specular color
-  * Specular power
\ No newline at end of file
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/BabylonExport.Core.csproj b/Exporters/XNA - OBJ/BabylonExport.Core/BabylonExport.Core.csproj
new file mode 100644
index 0000000..f54aac2
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/BabylonExport.Core.csproj	
@@ -0,0 +1,245 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{CE70B051-FB63-420D-80C0-51CC03A214BA}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>BabylonExport.Core</RootNamespace>
+    <AssemblyName>BabylonExport.Core</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SccProjectName>SAK</SccProjectName>
+    <SccLocalPath>SAK</SccLocalPath>
+    <SccAuxPath>SAK</SccAuxPath>
+    <SccProvider>SAK</SccProvider>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>x86</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Microsoft.Build">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Microsoft.Build.Engine">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Microsoft.Build.Framework">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
+    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\BabylonExport\Refs\Microsoft.Xna.Framework.Content.Pipeline.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.AudioImporters, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\BabylonExport\Refs\Microsoft.Xna.Framework.Content.Pipeline.AudioImporters.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.EffectImporter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\BabylonExport\Refs\Microsoft.Xna.Framework.Content.Pipeline.EffectImporter.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.FBXImporter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\BabylonExport\Refs\Microsoft.Xna.Framework.Content.Pipeline.FBXImporter.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.TextureImporter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\BabylonExport\Refs\Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.VideoImporters, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\BabylonExport\Refs\Microsoft.Xna.Framework.Content.Pipeline.VideoImporters.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.XImporter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\BabylonExport\Refs\Microsoft.Xna.Framework.Content.Pipeline.XImporter.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
+    <Reference Include="Microsoft.Xna.Framework.Tools.Packaging.Tasks, Version=4.0.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\BabylonExport\Refs\Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll</HintPath>
+    </Reference>
+    <Reference Include="SharpDX">
+      <HintPath>..\BabylonExport\Refs\SharpDX.dll</HintPath>
+    </Reference>
+    <Reference Include="SharpDX.Direct3D9">
+      <HintPath>..\BabylonExport\Refs\SharpDX.Direct3D9.dll</HintPath>
+    </Reference>
+    <Reference Include="SharpDX.DXGI">
+      <HintPath>..\BabylonExport\Refs\SharpDX.DXGI.dll</HintPath>
+    </Reference>
+    <Reference Include="SkinnedModel">
+      <HintPath>..\BabylonExport\Refs\SkinnedModel.dll</HintPath>
+    </Reference>
+    <Reference Include="SkinnedModelPipeline">
+      <HintPath>..\BabylonExport\Refs\SkinnedModelPipeline.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data.Linq" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Vertice.Core">
+      <HintPath>..\BabylonExport\Refs\Vertice.Core.dll</HintPath>
+    </Reference>
+    <Reference Include="Vertice.Nova">
+      <HintPath>..\BabylonExport\Refs\Vertice.Nova.dll</HintPath>
+    </Reference>
+    <Reference Include="Vertice.Nova.Core.DirectX10">
+      <HintPath>..\BabylonExport\Refs\Vertice.Nova.Core.DirectX10.dll</HintPath>
+    </Reference>
+    <Reference Include="Vertice.Nova.Core.DirectX9">
+      <HintPath>..\BabylonExport\Refs\Vertice.Nova.Core.DirectX9.dll</HintPath>
+    </Reference>
+    <Reference Include="Vertice.Nova.Interop">
+      <HintPath>..\BabylonExport\Refs\Vertice.Nova.Interop.dll</HintPath>
+    </Reference>
+    <Reference Include="Vertice.Wrappers.DirectX">
+      <HintPath>..\BabylonExport\Refs\Vertice.Wrappers.DirectX.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Entities\Export\BabylonAnimation.cs" />
+    <Compile Include="Entities\Export\BabylonAnimationKey.cs" />
+    <Compile Include="Entities\Export\BabylonBone.cs" />
+    <Compile Include="Entities\Export\BabylonCamera.cs" />
+    <Compile Include="Entities\Export\BabylonLensFlare.cs" />
+    <Compile Include="Entities\Export\BabylonLight.cs" />
+    <Compile Include="Entities\Export\BabylonMaterial.cs" />
+    <Compile Include="Entities\Export\BabylonMesh.cs" />
+    <Compile Include="Entities\Export\BabylonMultiMaterial.cs" />
+    <Compile Include="Entities\Export\BabylonLensFlareSystem.cs" />
+    <Compile Include="Entities\Export\BabylonParticleSystem.cs" />
+    <Compile Include="Entities\Export\BabylonScene.cs" />
+    <Compile Include="Entities\Export\BabylonShadowGenerator.cs" />
+    <Compile Include="Entities\Export\BabylonSkeleton.cs" />
+    <Compile Include="Entities\Export\BabylonSubMesh.cs" />
+    <Compile Include="Entities\Export\BabylonTexture.cs" />
+    <Compile Include="Entities\IDumpable.cs" />
+    <Compile Include="Entities\IQueryable.cs" />
+    <Compile Include="Entities\Mesh.cs" />
+    <Compile Include="Entities\PositionNormalTextured.cs" />
+    <Compile Include="Entities\PositionNormalTexturedWeights.cs" />
+    <Compile Include="Entities\ProxyMesh.cs" />
+    <Compile Include="Entities\StandardMaterial.cs" />
+    <Compile Include="Exporters\ThroughXNA\DAE\DAEExporter.cs" />
+    <Compile Include="Exporters\ThroughXNA\FBX\FBXExporter.cs" />
+    <Compile Include="Exporters\ThroughXNA\XNAExporter.cs" />
+    <Compile Include="Exporters\ThroughXNA\XNA\ContentBuilder.cs" />
+    <Compile Include="Exporters\ThroughXNA\XNA\ErrorLogger.cs" />
+    <Compile Include="Exporters\ThroughXNA\XNA\GraphicsDeviceService.cs" />
+    <Compile Include="Exporters\ThroughXNA\XNA\ServiceContainer.cs" />
+    <Compile Include="Exporters\IExporter.cs" />
+    <Compile Include="Exporters\MXB\NovaExporter.cs" />
+    <Compile Include="Exporters\MXB\NovaExporter.Materials.cs" />
+    <Compile Include="Exporters\OBJ\Document.cs" />
+    <Compile Include="Exporters\OBJ\Line.cs" />
+    <Compile Include="Exporters\OBJ\MtlHeader.cs" />
+    <Compile Include="Exporters\OBJ\MtlLine.cs" />
+    <Compile Include="Exporters\OBJ\ObjExporter.cs" />
+    <Compile Include="Exporters\OBJ\ObjExporter.Material.cs" />
+    <Compile Include="Exporters\OBJ\ObjHeader.cs" />
+    <Compile Include="Exporters\OBJ\ObjLine.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Tools.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Exporters\Blender\io_export_babylon.py" />
+    <None Include="Exporters\ThroughXNA\XNA\XNA Game Studio\Microsoft.Xna.GameStudio.ContentPipelineExtensions.targets">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="Exporters\ThroughXNA\XNA\XNA Game Studio\Microsoft.Xna.GameStudio.targets">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="Exporters\ThroughXNA\XNA\XNA Game Studio\v4.0\Microsoft.Xna.GameStudio.AvailablePlatforms.targets">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="Exporters\ThroughXNA\XNA\XNA Game Studio\v4.0\Microsoft.Xna.GameStudio.Common.targets">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="Exporters\ThroughXNA\XNA\XNA Game Studio\v4.0\Microsoft.Xna.GameStudio.Content.targets">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="Exporters\ThroughXNA\XNA\XNA Game Studio\v4.0\Microsoft.Xna.GameStudio.ContentPipeline.targets">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="Exporters\ThroughXNA\XNA\XNA Game Studio\v4.0\Microsoft.Xna.GameStudio.Windows.targets">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="Exporters\ThroughXNA\XNA\XNA Game Studio\v4.0\Microsoft.Xna.GameStudio.Xbox 360.targets">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="Refs\xnafx40_redist.msi" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Exporters\ThroughXNA\XNA\XNA Game Studio\v4.0\Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Refs\Microsoft.Xna.Framework.Content.Pipeline.AudioImporters.dll" />
+    <Content Include="Refs\Microsoft.Xna.Framework.Content.Pipeline.dll" />
+    <Content Include="Refs\Microsoft.Xna.Framework.Content.Pipeline.EffectImporter.dll" />
+    <Content Include="Refs\Microsoft.Xna.Framework.Content.Pipeline.FBXImporter.dll" />
+    <Content Include="Refs\Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.dll" />
+    <Content Include="Refs\Microsoft.Xna.Framework.Content.Pipeline.VideoImporters.dll" />
+    <Content Include="Refs\Microsoft.Xna.Framework.Content.Pipeline.XImporter.dll" />
+    <Content Include="Refs\Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll" />
+    <Content Include="Refs\SharpDX.Direct3D9.dll" />
+    <Content Include="Refs\SharpDX.dll" />
+    <Content Include="Refs\SharpDX.DXGI.dll" />
+    <Content Include="Refs\SkinnedModel.dll" />
+    <Content Include="Refs\SkinnedModelPipeline.dll" />
+    <Content Include="Refs\Vertice.Core.dll" />
+    <Content Include="Refs\Vertice.Nova.Core.DirectX10.dll" />
+    <Content Include="Refs\Vertice.Nova.Core.DirectX9.dll" />
+    <Content Include="Refs\Vertice.Nova.dll" />
+    <Content Include="Refs\Vertice.Nova.Interop.dll" />
+    <Content Include="Refs\Vertice.Wrappers.DirectX.dll" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="Exporters\ThroughXNA\DAE\ColladaXna\ColladaXnaBase\ColladaXnaBase.csproj">
+      <Project>{65FE2973-B4E6-49DE-8F57-55490D4B4FD4}</Project>
+      <Name>ColladaXnaBase</Name>
+    </ProjectReference>
+    <ProjectReference Include="Exporters\ThroughXNA\DAE\ColladaXna\ColladaXnaImporter\ColladaXnaImporter.csproj">
+      <Project>{625E5D7F-86F6-4961-89D0-3835BF261ACC}</Project>
+      <Name>ColladaXnaImporter</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonAnimation.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonAnimation.cs
new file mode 100644
index 0000000..36bd43b
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonAnimation.cs	
@@ -0,0 +1,35 @@
+﻿using System.Runtime.Serialization;
+using Vertice.Nova.Animations;
+
+namespace BabylonExport.Core
+{
+    [DataContract]
+    public class BabylonAnimation
+    {
+        [DataMember]
+        public string name { get; set; }
+
+        [DataMember]
+        public string property { get; set; }
+
+        [DataMember]
+        public DataType dataType { get; set; }
+
+        [DataMember]
+        public InterpolationLoop loopBehavior { get; set; }
+
+        [DataMember]
+        public int framePerSecond { get; set; }
+
+        [DataMember]
+        public BabylonAnimationKey[] keys { get; set; }
+
+        public enum DataType
+        {
+            Float = 0,
+            Vector3 = 1,
+            Quaternion = 2,
+            Matrix = 3
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonAnimationKey.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonAnimationKey.cs
new file mode 100644
index 0000000..ac3a708
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonAnimationKey.cs	
@@ -0,0 +1,14 @@
+﻿using System.Runtime.Serialization;
+
+namespace BabylonExport.Core
+{
+    [DataContract]
+    public class BabylonAnimationKey
+    {
+        [DataMember]
+        public float frame { get; set; }
+
+        [DataMember]
+        public float[] values { get; set; }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonBone.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonBone.cs
new file mode 100644
index 0000000..f64ad9e
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonBone.cs	
@@ -0,0 +1,24 @@
+﻿using System.Runtime.Serialization;
+using Vertice.Nova.Animations;
+
+namespace BabylonExport.Core
+{
+    [DataContract]
+    public class BabylonBone
+    {
+        [DataMember]
+        public string name { get; set; }
+
+        [DataMember]
+        public int index { get; set; }
+
+        [DataMember]
+        public int parentBoneIndex { get; set; }
+
+        [DataMember]
+        public float[] matrix { get; set; }
+
+        [DataMember]
+        public BabylonAnimation animation { get; set; }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonCamera.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonCamera.cs
new file mode 100644
index 0000000..b0603dd
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonCamera.cs	
@@ -0,0 +1,82 @@
+﻿using System.Runtime.Serialization;
+
+namespace BabylonExport.Core
+{
+    [DataContract]
+    public class BabylonCamera
+    {
+        [DataMember]
+        public string name { get; set; }
+
+        [DataMember]
+        public string id { get; set; }
+
+        [DataMember]
+        public string parentId { get; set; }
+
+        [DataMember]
+        public string lockedTargetId { get; set; }
+
+        [DataMember]
+        public float[] position { get; set; }
+
+        [DataMember]
+        public float[] rotation { get; set; }
+
+        [DataMember]
+        public float[] target { get; set; }
+
+        [DataMember]
+        public float fov { get; set; }
+
+        [DataMember]
+        public float minZ { get; set; }
+
+        [DataMember]
+        public float maxZ { get; set; }
+
+        [DataMember]
+        public float speed { get; set; }
+
+        [DataMember]
+        public float inertia { get; set; }
+
+        [DataMember]
+        public bool checkCollisions { get; set; }
+
+        [DataMember]
+        public bool applyGravity { get; set; }
+
+        [DataMember]
+        public float[] ellipsoid { get; set; }
+
+        [DataMember]
+        public bool autoAnimate { get; set; }
+
+        [DataMember]
+        public int autoAnimateFrom { get; set; }
+
+        [DataMember]
+        public int autoAnimateTo { get; set; }
+
+        [DataMember]
+        public bool autoAnimateLoop { get; set; }
+
+        [DataMember]
+        public BabylonAnimation[] animations { get; set; }
+
+
+        public BabylonCamera()
+        {
+            position = new[] { 0f, 0f, 0f };
+            rotation = new[] { 0f, 0f, 0f };
+
+            // Default values
+            fov = 0.8f;
+            minZ = 0.1f;
+            maxZ = 5000.0f;
+            speed = 1.0f;
+            inertia = 0.9f;
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonLensFlare.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonLensFlare.cs
new file mode 100644
index 0000000..27efdc7
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonLensFlare.cs	
@@ -0,0 +1,20 @@
+﻿using System.Runtime.Serialization;
+
+namespace BabylonExport.Core
+{
+    [DataContract]
+    public class BabylonLensFlare
+    {
+        [DataMember]
+        public float position { get; set; }
+
+        [DataMember]
+        public float size { get; set; }
+
+        [DataMember]
+        public float[] color { get; set; }
+
+        [DataMember]
+        public string textureName { get; set; }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonLensFlareSystem.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonLensFlareSystem.cs
new file mode 100644
index 0000000..bbefc66
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonLensFlareSystem.cs	
@@ -0,0 +1,17 @@
+﻿using System.Runtime.Serialization;
+
+namespace BabylonExport.Core
+{
+    [DataContract]
+    public class BabylonLensFlareSystem
+    {
+        [DataMember]
+        public string emitterId { get; set; }
+
+        [DataMember]
+        public int borderLimit { get; set; }
+
+        [DataMember]
+        public BabylonLensFlare[] flares { get; set; }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonLight.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonLight.cs
new file mode 100644
index 0000000..75f81e5
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonLight.cs	
@@ -0,0 +1,39 @@
+﻿using System.Runtime.Serialization;
+
+namespace BabylonExport.Core
+{
+    [DataContract]
+    public class BabylonLight
+    {
+        [DataMember]
+        public string name { get; set; }
+
+        [DataMember]
+        public string id { get; set; }
+
+        [DataMember]
+        public float[] position { get; set; }
+
+        [DataMember]
+        public float[] direction { get; set; }
+
+        [DataMember]
+        public int type { get; set; }
+
+        [DataMember]
+        public float[] diffuse { get; set; }
+
+        [DataMember]
+        public float[] specular { get; set; }
+
+        [DataMember]
+        public float intensity { get; set; }
+
+        public BabylonLight()
+        {
+            diffuse = new[] {1.0f, 1.0f, 1.0f};
+            specular = new[] { 1.0f, 1.0f, 1.0f };
+            intensity = 1.0f;
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonMaterial.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonMaterial.cs
new file mode 100644
index 0000000..8e9a3bf
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonMaterial.cs	
@@ -0,0 +1,68 @@
+﻿using System.Runtime.Serialization;
+using BabylonExport.Core.Exporters;
+
+namespace BabylonExport.Core
+{
+    [DataContract]
+    public class BabylonMaterial
+    {
+        [DataMember]
+        public string name { get; set; }
+
+        [DataMember]
+        public string id { get; set; }
+
+        [DataMember]
+        public bool backFaceCulling { get; set; }
+
+        [DataMember]
+        public float[] ambient { get; set; }
+
+        [DataMember]
+        public float[] diffuse { get; set; }
+
+        [DataMember]
+        public float[] specular { get; set; }
+
+        [DataMember]
+        public float[] emissive { get; set; }
+
+        [DataMember]
+        public float specularPower { get; set; }
+
+        [DataMember]
+        public float alpha { get; set; }
+
+        [DataMember]
+        public BabylonTexture diffuseTexture { get; set; }
+
+        [DataMember]
+        public BabylonTexture ambientTexture { get; set; }
+
+        [DataMember]
+        public BabylonTexture opacityTexture { get; set; }
+
+        [DataMember]
+        public BabylonTexture reflectionTexture { get; set; }
+
+        [DataMember]
+        public BabylonTexture emissiveTexture { get; set; }
+
+        [DataMember]
+        public BabylonTexture specularTexture { get; set; }
+
+        [DataMember]
+        public BabylonTexture bumpTexture { get; set; }
+
+        public BabylonMaterial()
+        {
+            backFaceCulling = true;
+            ambient = new[] {1.0f, 1.0f, 1.0f};
+            diffuse = new[] { 1.0f, 1.0f, 1.0f };
+            specular = new[] { 1.0f, 1.0f, 1.0f };
+            emissive = new[] { 0f, 0f, 0f };
+            specularPower = 64;
+            alpha = 1.0f;
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonMesh.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonMesh.cs
new file mode 100644
index 0000000..a8605e4
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonMesh.cs	
@@ -0,0 +1,114 @@
+﻿using System.Runtime.Serialization;
+
+namespace BabylonExport.Core
+{
+    [DataContract]
+    public class BabylonMesh
+    {
+        [DataMember]
+        public string name { get; set; }
+
+        [DataMember]
+        public string id { get; set; }
+
+        [DataMember]
+        public string parentId { get; set; }
+
+        [DataMember]
+        public string materialId { get; set; }
+
+        [DataMember]
+        public bool isEnabled { get; set; }
+
+        [DataMember]
+        public bool isVisible { get; set; }
+
+        [DataMember]
+        public float[] position { get; set; }
+
+        [DataMember]
+        public float[] rotation { get; set; }
+
+        [DataMember]
+        public float[] scaling { get; set; }
+
+        [DataMember]
+        public float[] localMatrix { get; set; }
+
+        [DataMember]
+        public float[] positions { get; set; }
+
+        [DataMember]
+        public float[] normals { get; set; }
+
+        [DataMember]
+        public float[] uvs { get; set; }
+
+        [DataMember]
+        public float[] uvs2 { get; set; }
+
+        [DataMember]
+        public float[] colors { get; set; }
+
+        [DataMember]
+        public int[] matricesIndices { get; set; }
+
+        [DataMember]
+        public float[] matricesWeights { get; set; }
+
+        [DataMember]
+        public int[] indices { get; set; }
+
+        [DataMember]
+        public bool checkCollisions { get; set; }
+
+        [DataMember]
+        public bool receiveShadows { get; set; }    
+    
+        [DataMember]
+        public bool infiniteDistance { get; set; }
+        
+        [DataMember]
+        public int billboardMode { get; set; }
+
+        [DataMember]
+        public float visibility { get; set; }
+
+        [DataMember]
+        public BabylonSubMesh[] subMeshes { get; set; }
+
+        [DataMember]
+        public int skeletonId { get; set; }
+
+        [DataMember]
+        public bool autoAnimate { get; set; }
+
+        [DataMember]
+        public int autoAnimateFrom { get; set; }
+
+        [DataMember]
+        public int autoAnimateTo { get; set; }
+
+        [DataMember]
+        public bool autoAnimateLoop { get; set; }
+
+        [DataMember]
+        public BabylonAnimation[] animations { get; set; }
+
+        public BabylonMesh()
+        {
+            isEnabled = true;
+            isVisible = true;
+
+            position = new[] { 0f, 0f, 0f };
+            rotation = new[] { 0f, 0f, 0f };
+            scaling = new[] { 1f, 1f, 1f };
+
+            billboardMode = 0;
+
+            visibility = 1.0f;
+
+            skeletonId = -1;
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonMultiMaterial.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonMultiMaterial.cs
new file mode 100644
index 0000000..10efd6d
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonMultiMaterial.cs	
@@ -0,0 +1,17 @@
+﻿using System.Runtime.Serialization;
+
+namespace BabylonExport.Core
+{
+    [DataContract]
+    public class BabylonMultiMaterial
+    {
+        [DataMember]
+        public string name { get; set; }
+
+        [DataMember]
+        public string id { get; set; }
+
+        [DataMember]
+        public string[] materials { get; set; }        
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonParticleSystem.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonParticleSystem.cs
new file mode 100644
index 0000000..8779b91
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonParticleSystem.cs	
@@ -0,0 +1,86 @@
+﻿using System.Runtime.Serialization;
+
+namespace BabylonExport.Core
+{
+    [DataContract]
+    public class BabylonParticleSystem
+    {
+        [DataMember]
+        public string emitterId { get; set; }
+
+        [DataMember]
+        public float[] gravity { get; set; }
+
+        [DataMember]
+        public float[] direction1 { get; set; }
+
+        [DataMember]
+        public float[] direction2 { get; set; }
+
+        [DataMember]
+        public float[] minEmitBox { get; set; }
+
+        [DataMember]
+        public float[] maxEmitBox { get; set; }
+
+        [DataMember]
+        public float[] color1 { get; set; }
+
+        [DataMember]
+        public float[] color2 { get; set; }
+
+        [DataMember]
+        public float[] colorDead { get; set; }
+
+        [DataMember]
+        public float deadAlpha { get; set; }
+
+        [DataMember]
+        public float emitRate { get; set; }
+
+        [DataMember]
+        public float updateSpeed { get; set; }
+
+        [DataMember]
+        public int targetStopFrame { get; set; }
+
+        [DataMember]
+        public float minEmitPower { get; set; }
+
+        [DataMember]
+        public float maxEmitPower { get; set; }
+
+        [DataMember]
+        public float minLifeTime { get; set; }
+
+        [DataMember]
+        public float maxLifeTime { get; set; }
+
+        [DataMember]
+        public float minSize { get; set; }
+
+        [DataMember]
+        public float maxSize { get; set; }
+
+        [DataMember]
+        public float minAngularSpeed { get; set; }
+
+        [DataMember]
+        public float maxAngularSpeed { get; set; }
+
+        [DataMember]
+        public string textureName { get; set; }
+
+        [DataMember]
+        public int blendMode { get; set; }
+
+        [DataMember]
+        public int capacity { get; set; }
+
+        [DataMember]
+        public float[] textureMask { get; set; }
+
+        [DataMember]
+        public bool linkToEmitter { get; set; }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonScene.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonScene.cs
new file mode 100644
index 0000000..51d6c4b
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonScene.cs	
@@ -0,0 +1,163 @@
+﻿using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Runtime.Serialization;
+using SharpDX;
+
+namespace BabylonExport.Core
+{
+    [DataContract]
+    public class BabylonScene
+    {
+        [DataMember]
+        public bool autoClear { get; set; }
+
+        [DataMember]
+        public float[] clearColor { get; set; }
+
+        [DataMember]
+        public float[] ambientColor { get; set; }
+
+        [DataMember]
+        public int fogMode { get; set; }
+
+        [DataMember]
+        public float[] fogColor { get; set; }
+
+        [DataMember]
+        public float fogStart { get; set; }
+
+        [DataMember]
+        public float fogEnd { get; set; }
+
+        [DataMember]
+        public float fogDensity { get; set; }
+
+        [DataMember]
+        public float[] gravity { get; set; }
+
+        [DataMember]
+        public BabylonCamera[] cameras { get; set; }
+
+        [DataMember]
+        public string activeCameraID { get; set; }
+
+        [DataMember]
+        public BabylonLight[] lights { get; set; }
+
+        [DataMember]
+        public BabylonMesh[] meshes { get; set; }
+
+        [DataMember]
+        public BabylonMaterial[] materials { get; set; }
+
+        [DataMember]
+        public BabylonMultiMaterial[] multiMaterials { get; set; }
+
+        [DataMember]
+        public BabylonParticleSystem[] particleSystems { get; set; }
+
+        [DataMember]
+        public BabylonLensFlareSystem[] lensFlareSystems { get; set; }
+
+        [DataMember]
+        public BabylonShadowGenerator[] shadowGenerators { get; set; }
+
+        [DataMember]
+        public BabylonSkeleton[] skeletons { get; set; }
+        
+        public Vector3 MaxVector { get; set; }
+        public Vector3 MinVector { get; set; }
+
+        public string OutputPath { get; private set; }
+
+        internal List<BabylonMesh> MeshesList { get; private set; }
+        internal List<BabylonCamera> CamerasList { get; private set; }
+        internal List<BabylonLight> LightsList { get; private set; }
+        internal List<BabylonMaterial> MaterialsList { get; private set; }
+        internal List<BabylonMultiMaterial> MultiMaterialsList { get; private set; }
+        internal List<BabylonShadowGenerator> ShadowGeneratorsList { get; private set; }
+        internal List<BabylonSkeleton> SkeletonsList { get; private set; }
+
+        readonly List<string> exportedTextures = new List<string>();
+
+        public BabylonScene(string outputPath)
+        {
+            OutputPath = outputPath;
+
+            MeshesList = new List<BabylonMesh>();
+            MaterialsList = new List<BabylonMaterial>();
+            CamerasList = new List<BabylonCamera>();
+            LightsList = new List<BabylonLight>();
+            MultiMaterialsList = new List<BabylonMultiMaterial>();
+            ShadowGeneratorsList = new List<BabylonShadowGenerator>();
+            SkeletonsList = new List<BabylonSkeleton>();
+
+            // Default values
+            autoClear = true;
+            clearColor = new[] { 0.2f, 0.2f, 0.3f };
+            ambientColor = new[] {0f, 0f, 0f };
+            gravity = new[] {0f, 0f, -0.9f};
+        }
+
+        public void Prepare(bool generateDefaultLight = true)
+        {
+            meshes = MeshesList.ToArray();
+
+            materials = MaterialsList.ToArray();
+            multiMaterials = MultiMaterialsList.ToArray();
+            shadowGenerators = ShadowGeneratorsList.ToArray();
+            skeletons = SkeletonsList.ToArray();
+
+            if (CamerasList.Count == 0)
+            {
+                var camera = new BabylonCamera {name = "Default camera", id = Guid.NewGuid().ToString()};
+
+                var distanceVector = MaxVector - MinVector;
+                var midPoint = MinVector +distanceVector / 2;
+                camera.target = midPoint.ToArray();
+                camera.position = (midPoint + distanceVector).ToArray();
+
+                var distance = distanceVector.Length();
+                camera.speed =  distance/ 50.0f;
+                camera.maxZ = distance * 4f;
+
+                camera.minZ = distance < 100.0f ? 0.1f : 1.0f;
+
+                CamerasList.Add(camera);
+            }
+
+            if (LightsList.Count == 0 && generateDefaultLight)
+            {
+                var light = new BabylonLight {name = "Default light", id = Guid.NewGuid().ToString()};
+
+                var midPoint = MinVector + (MaxVector - MinVector) / 2;
+                light.type = 0;
+                light.position = (midPoint + (MaxVector - MinVector)).ToArray();
+
+                light.diffuse = new Vector3(1, 1, 1).ToArray();
+                light.specular = new Vector3(1, 1, 1).ToArray();
+
+                LightsList.Add(light);
+            }
+            
+            cameras = CamerasList.ToArray();
+            lights = LightsList.ToArray();
+
+            if (activeCameraID == null)
+            {
+                activeCameraID = CamerasList[0].id;
+            }
+        }
+
+        public void AddTexture(string diffuseTexture)
+        {
+            if (exportedTextures.Contains(diffuseTexture))
+                return;
+
+            exportedTextures.Add(diffuseTexture);
+
+            File.Copy(diffuseTexture, Path.Combine(OutputPath, Path.GetFileName(diffuseTexture)), true);
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonShadowGenerator.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonShadowGenerator.cs
new file mode 100644
index 0000000..0238acb
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonShadowGenerator.cs	
@@ -0,0 +1,22 @@
+﻿using System.Runtime.Serialization;
+using Vertice.Nova.Animations;
+
+namespace BabylonExport.Core
+{
+    [DataContract]
+    public class BabylonShadowGenerator
+    {
+        [DataMember]
+        public int mapSize { get; set; }
+
+        [DataMember]
+        public string lightId { get; set; }
+
+        [DataMember]
+        public bool useVarianceShadowMap { get; set; }
+
+        [DataMember]
+        public string[] renderList { get; set; }
+
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonSkeleton.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonSkeleton.cs
new file mode 100644
index 0000000..b75067c
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonSkeleton.cs	
@@ -0,0 +1,18 @@
+﻿using System.Runtime.Serialization;
+using Vertice.Nova.Animations;
+
+namespace BabylonExport.Core
+{
+    [DataContract]
+    public class BabylonSkeleton
+    {
+        [DataMember]
+        public int id { get; set; }
+        
+        [DataMember]
+        public string name { get; set; }
+
+        [DataMember]
+        public BabylonBone[] bones { get; set; }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonSubMesh.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonSubMesh.cs
new file mode 100644
index 0000000..c136ff1
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonSubMesh.cs	
@@ -0,0 +1,24 @@
+﻿using System.Runtime.Serialization;
+
+namespace BabylonExport.Core
+{
+    [DataContract]
+    public class BabylonSubMesh
+    {
+        [DataMember]
+        public int materialIndex { get; set; }
+
+        [DataMember]
+        public int verticesStart { get; set; }
+
+        [DataMember]
+        public int verticesCount { get; set; }
+
+        [DataMember]
+        public int indexStart { get; set; }
+
+        [DataMember]
+        public int indexCount { get; set; }
+
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonTexture.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonTexture.cs
new file mode 100644
index 0000000..8e5f540
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Export/BabylonTexture.cs	
@@ -0,0 +1,84 @@
+﻿using System.Runtime.Serialization;
+
+namespace BabylonExport.Core
+{
+    [DataContract]
+    public class BabylonTexture
+    {
+        [DataMember]
+        public string name { get; set; }
+
+        [DataMember]
+        public float level { get; set; }
+
+        [DataMember]
+        public bool hasAlpha { get; set; }
+
+        [DataMember]
+        public int coordinatesMode { get; set; }
+        
+        [DataMember]
+        public bool isCube { get; set; }
+
+        [DataMember]
+        public float uOffset { get; set; }
+
+        [DataMember]
+        public float vOffset { get; set; }
+
+        [DataMember]
+        public float uScale { get; set; }
+
+        [DataMember]
+        public float vScale { get; set; }
+
+        [DataMember]
+        public float uAng { get; set; }
+
+        [DataMember]
+        public float vAng { get; set; }
+
+        [DataMember]
+        public float wAng { get; set; }
+
+        [DataMember]
+        public int wrapU { get; set; }
+
+        [DataMember]
+        public int wrapV { get; set; }
+
+        [DataMember]
+        public int coordinatesIndex { get; set; }
+
+        [DataMember]
+        public bool isRenderTarget { get; set; }
+
+        [DataMember]
+        public int renderTargetSize { get; set; }
+
+        [DataMember]
+        public float[] mirrorPlane { get; set; }
+
+        [DataMember]
+        public string[] renderList { get; set; }
+
+        [DataMember]
+        public BabylonAnimation[] animations { get; set; }
+        
+        public BabylonTexture()
+        {
+            level = 1.0f;
+            uOffset = 0;
+            vOffset = 0;
+            uScale = 1.0f;
+            vScale = 1.0f;
+            uAng = 0;
+            vAng = 0;
+            wAng = 0;
+            wrapU = 1;
+            wrapV = 1;
+            hasAlpha = false;
+            coordinatesIndex = 0;
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/IDumpable.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/IDumpable.cs
new file mode 100644
index 0000000..d3c98be
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/IDumpable.cs	
@@ -0,0 +1,15 @@
+﻿using System.Collections.Generic;
+
+namespace BabylonExport.Core
+{
+    public interface IDumpable
+    {
+        void DumpPositions(List<float> list);
+        void DumpNormals(List<float> list);
+        void DumpUVs(List<float> list);
+        void DumpUVs2(List<float> list);
+        void DumpColors(List<float> list);
+        void DumpMatricesIndices(List<int> list);
+        void DumpMatricesWeights(List<float> list);
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/IQueryable.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/IQueryable.cs
new file mode 100644
index 0000000..b8d98ea
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/IQueryable.cs	
@@ -0,0 +1,14 @@
+﻿using SharpDX;
+
+namespace BabylonExport.Core
+{
+    public interface IQueryable
+    {
+        bool HasWeights
+        {
+            get;
+        }
+
+        Vector3 GetPosition();
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Mesh.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Mesh.cs
new file mode 100644
index 0000000..633107e
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/Mesh.cs	
@@ -0,0 +1,138 @@
+﻿using System;
+using System.Collections.Generic;
+using BabylonExport.Core.Exporters;
+using SharpDX;
+
+namespace BabylonExport.Core
+{
+    public class Mesh<T> where T : struct, IDumpable, IQueryable
+    {
+        readonly List<T> vertices = new List<T>();
+        readonly List<int> indices = new List<int>();
+        string concatenatedName = "";
+
+        public Guid ID 
+        {
+            get;
+            private set;
+        }
+
+        public StandardMaterial Material { get; private set; }
+        
+        public Mesh(StandardMaterial material)
+        {
+            ID = Guid.NewGuid();
+            Material = material;
+        }
+
+        public void AddPart(string name, List<T> addedVertices, List<int> addedIndices)
+        {
+            if (concatenatedName == "")
+                concatenatedName += " # ";
+
+            concatenatedName += name;
+
+            var offset = vertices.Count;
+            vertices.AddRange(addedVertices);
+
+            foreach (int index in addedIndices)
+            {
+                indices.Add(index + offset);
+            }
+        }
+
+        public void CreateBabylonMesh(BabylonScene scene, Guid? parentID = null, BabylonSkeleton skeleton = null)
+        {
+            var babylonMesh = new BabylonMesh();
+            scene.MeshesList.Add(babylonMesh);
+
+            // Guid
+            babylonMesh.id = ID.ToString();
+
+            // Name
+            babylonMesh.name = concatenatedName;
+
+            // Parent
+            if (parentID.HasValue)
+                babylonMesh.parentId = parentID.Value.ToString();
+            else
+                babylonMesh.parentId = "";
+
+            // Material ID
+            if (Material == null)
+            {
+                babylonMesh.materialId = "";
+            }
+            else
+            {
+                babylonMesh.materialId = Material.ID.ToString();
+            }
+
+            // Skeleton ID
+            if (skeleton != null)
+            {
+                babylonMesh.skeletonId = skeleton.id;
+            }
+
+            // Position
+            babylonMesh.position = Vector3.Zero.ToArray();
+
+            // Vertices
+            var positions = new List<float>();
+            var normals = new List<float>();
+            var uvs = new List<float>();
+            var uvs2 = new List<float>();
+            var colors = new List<float>();
+            var matricesIndices = new List<int>();
+            var matricesWeights = new List<float>();
+
+            for (int index = 0; index < vertices.Count; index++)
+            {
+                var position = vertices[index].GetPosition();
+
+                scene.MinVector = Vector3.Min(scene.MinVector, position);
+                scene.MaxVector = Vector3.Max(scene.MaxVector, position);
+
+                vertices[index].DumpPositions(positions);
+                vertices[index].DumpNormals(normals);
+                vertices[index].DumpUVs(uvs);
+                vertices[index].DumpUVs2(uvs2);
+                vertices[index].DumpColors(colors);
+                vertices[index].DumpMatricesIndices(matricesIndices);
+                vertices[index].DumpMatricesWeights(matricesWeights);
+            }
+
+            if (positions.Count > 0)
+            {
+                babylonMesh.positions = positions.ToArray();
+            }
+            if (normals.Count > 0)
+            {
+                babylonMesh.normals = normals.ToArray();
+            }
+            if (uvs.Count > 0)
+            {
+                babylonMesh.uvs = uvs.ToArray();
+            }
+            if (uvs2.Count > 0)
+            {
+                babylonMesh.uvs2 = uvs2.ToArray();
+            }
+            if (colors.Count > 0)
+            {
+                babylonMesh.colors = colors.ToArray();
+            }
+            if (matricesIndices.Count > 0)
+            {
+                babylonMesh.matricesIndices = matricesIndices.ToArray();
+            }
+            if (matricesWeights.Count > 0)
+            {
+                babylonMesh.matricesWeights = matricesWeights.ToArray();
+            }
+
+            // Faces
+            babylonMesh.indices = indices.ToArray();
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/PositionNormalTextured.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/PositionNormalTextured.cs
new file mode 100644
index 0000000..a5ac924
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/PositionNormalTextured.cs	
@@ -0,0 +1,69 @@
+﻿using System.Collections.Generic;
+using System.Globalization;
+using SharpDX;
+
+namespace BabylonExport.Core
+{
+    public struct PositionNormalTextured : IDumpable, IQueryable
+    {
+        public const int Stride = 32;
+        public Vector3 Position;
+        public Vector3 Normal;
+        public Vector2 TextureCoordinates;
+
+        public PositionNormalTextured(Vector3 position, Vector3 normal, Vector2 textureCoordinates)
+        {
+            Position = position;
+            Normal = normal;
+            TextureCoordinates = textureCoordinates;
+        }
+
+        public override string ToString()
+        {
+            return string.Format(CultureInfo.CurrentCulture, "P:{0} N:{1} TV:{2}", Position, Normal, TextureCoordinates);
+        }
+
+        public bool HasWeights
+        {
+            get { return false; }
+        }
+
+        public Vector3 GetPosition()
+        {
+            return Position;
+        }
+
+        public void DumpPositions(List<float> list)
+        {
+            list.Add(Position.X); list.Add(Position.Y); list.Add(Position.Z);
+        }
+
+        public void DumpNormals(List<float> list)
+        {
+            Normal.Normalize();
+            list.Add(Normal.X); list.Add(Normal.Y); list.Add(Normal.Z);
+        }
+
+        public void DumpUVs(List<float> list)
+        {
+            list.Add(TextureCoordinates.X); list.Add(TextureCoordinates.Y);
+        }
+
+        public void DumpUVs2(List<float> list)
+        {
+        }
+
+        public void DumpColors(List<float> list)
+        {
+        }
+
+
+        public void DumpMatricesIndices(List<int> list)
+        {
+        }
+
+        public void DumpMatricesWeights(List<float> list)
+        {
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/PositionNormalTexturedWeights.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/PositionNormalTexturedWeights.cs
new file mode 100644
index 0000000..04b5956
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/PositionNormalTexturedWeights.cs	
@@ -0,0 +1,75 @@
+﻿using System.Collections.Generic;
+using System.Globalization;
+using SharpDX;
+
+namespace BabylonExport.Core
+{
+    public struct PositionNormalTexturedWeights : IDumpable, IQueryable
+    {
+        public const int Stride = 64;
+        public Vector3 Position;
+        public int Indices;
+        public Vector4 Weights;
+        public Vector3 Normal;
+        public Vector2 TextureCoordinates;
+
+        public PositionNormalTexturedWeights(Vector3 position, Vector3 normal, Vector4 weights, int indices, Vector2 textureCoordinates)
+        {
+            Position = position;
+            Normal = normal;
+            Weights = weights;
+            Indices = indices;
+            TextureCoordinates = textureCoordinates;
+        }
+
+        public override string ToString()
+        {
+            return string.Format(CultureInfo.CurrentCulture, "P:{0} N:{1} TV:{4} W:{2} I:{3}", Position, Normal, Weights, Indices, TextureCoordinates);
+        }
+
+        public bool HasWeights
+        {
+            get { return true; }
+        }
+
+        public Vector3 GetPosition()
+        {
+            return Position;
+        }
+
+        public void DumpPositions(List<float> list)
+        {
+            list.Add(Position.X); list.Add(Position.Y); list.Add(Position.Z);
+        }
+
+        public void DumpNormals(List<float> list)
+        {
+            Normal.Normalize();
+            list.Add(Normal.X); list.Add(Normal.Y); list.Add(Normal.Z);
+        }
+
+        public void DumpUVs(List<float> list)
+        {
+            list.Add(TextureCoordinates.X); list.Add(TextureCoordinates.Y);
+        }
+
+        public void DumpUVs2(List<float> list)
+        {
+        }
+
+        public void DumpColors(List<float> list)
+        {
+        }
+
+
+        public void DumpMatricesIndices(List<int> list)
+        {
+            list.Add(Indices);
+        }
+
+        public void DumpMatricesWeights(List<float> list)
+        {
+            list.Add(Weights.X); list.Add(Weights.Y); list.Add(Weights.Z); list.Add(Weights.W);
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/ProxyMesh.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/ProxyMesh.cs
new file mode 100644
index 0000000..92c0319
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/ProxyMesh.cs	
@@ -0,0 +1,42 @@
+﻿using System;
+using BabylonExport.Core.Exporters;
+using SharpDX;
+
+namespace BabylonExport.Core
+{
+    public class ProxyMesh
+    {
+        public static Guid CreateBabylonMesh(string name, BabylonScene scene)
+        {
+            var babylonMesh = new BabylonMesh();
+            scene.MeshesList.Add(babylonMesh);
+
+            // Guid
+            var id = Guid.NewGuid();
+            babylonMesh.id = id.ToString();
+
+            // Name
+            babylonMesh.name = name;
+
+            // Parent
+            babylonMesh.parentId = "";
+
+            // Visible
+            babylonMesh.isVisible = false;
+
+            // Material ID
+            babylonMesh.materialId = "";
+
+            // Position
+            babylonMesh.position = Vector3.Zero.ToArray();
+
+            // Vertices
+            babylonMesh.positions = null;
+
+            // Faces
+            babylonMesh.indices = null;
+
+            return id;
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Entities/StandardMaterial.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/StandardMaterial.cs
new file mode 100644
index 0000000..fb45877
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Entities/StandardMaterial.cs	
@@ -0,0 +1,76 @@
+﻿using System;
+using System.IO;
+using BabylonExport.Core.Exporters;
+using SharpDX;
+
+namespace BabylonExport.Core
+{
+    public class StandardMaterial
+    {
+        public string Name { get; set; }
+
+        public Color3 Diffuse { get; set; }
+        public Color3 Emissive { get; set; }
+        public Color3 Specular { get; set; }
+
+        public float Alpha { get; set; }
+        public float SpecularPower { get; set; }
+
+        public string DiffuseTexture { get; set; }
+
+        public bool BackFaceCulling { get; set; }
+
+        public Guid ID
+        {
+            get;
+            private set;
+        }
+
+        public StandardMaterial(string name)
+        {
+            ID = Guid.NewGuid();
+            Name = name;
+            DiffuseTexture = "";
+
+            Diffuse = new Color3(1, 1, 1);
+            Specular = new Color3(1, 1, 1);
+
+            SpecularPower = 32;
+
+            Alpha = 1.0f;
+
+            BackFaceCulling = true;
+        }
+
+        public void CreateBabylonMaterial(BabylonScene scene)
+        {
+            var babylonMaterial = new BabylonMaterial();
+            scene.MaterialsList.Add(babylonMaterial);
+
+            // Guid
+            babylonMaterial.id = ID.ToString();
+
+            // Name
+            babylonMaterial.name = Name;
+
+            // Data
+            babylonMaterial.backFaceCulling = BackFaceCulling;
+            babylonMaterial.diffuse = Diffuse.ToArray();
+            babylonMaterial.emissive = Emissive.ToArray();
+            babylonMaterial.specular = Specular.ToArray();
+            babylonMaterial.specularPower = SpecularPower;
+            babylonMaterial.alpha = Alpha;
+
+            if (string.IsNullOrEmpty(DiffuseTexture))
+            {
+                babylonMaterial.diffuseTexture = null;
+                return;
+            }
+
+            babylonMaterial.diffuseTexture = new BabylonTexture();
+            babylonMaterial.diffuseTexture.name = Path.GetFileName(DiffuseTexture);
+
+            scene.AddTexture(DiffuseTexture);
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/Blender/io_export_babylon.py b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/Blender/io_export_babylon.py
new file mode 100644
index 0000000..ee68f53
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/Blender/io_export_babylon.py	
@@ -0,0 +1,1003 @@
+bl_info = {
+    "name": "Babylon.js",
+    "author": "David Catuhe",
+    "version": (1, 0),
+    "blender": (2, 67, 0),
+    "location": "File > Export > Babylon.js (.babylon)",
+    "description": "Export Babylon.js scenes (.babylon)",
+    "warning": "",
+    "wiki_url": "",
+    "tracker_url": "",
+    "category": "Import-Export"}
+    
+import math
+import os
+import bpy
+import string
+import bpy_extras.io_utils
+from bpy.props import *
+import mathutils, math
+import struct
+import shutil
+from os import remove
+from bpy_extras.io_utils import (ExportHelper, axis_conversion)
+from bpy.props import (BoolProperty, FloatProperty, StringProperty, EnumProperty, FloatVectorProperty)
+from math import radians
+from mathutils import *
+
+class SubMesh:
+    materialIndex = 0
+    verticesStart = 0
+    verticesCount = 0
+    indexStart = 0
+    indexCount = 0
+    
+class MultiMaterial:
+    name = ""
+    materials = []
+
+class Export_babylon(bpy.types.Operator, ExportHelper):  
+    """Export Babylon.js scene (.babylon)""" 
+    bl_idname = "scene.babylon"
+    bl_label = "Export Babylon.js scene"
+
+    filename_ext = ".babylon"
+    filepath = ""
+    
+    # global_scale = FloatProperty(name="Scale", min=0.01, max=1000.0, default=1.0)
+
+    def execute(self, context):
+           return Export_babylon.save(self, context, **self.as_keywords(ignore=("check_existing", "filter_glob", "global_scale")))
+           
+    def mesh_triangulate(mesh):
+        try:
+            import bmesh
+            bm = bmesh.new()
+            bm.from_mesh(mesh)
+            bmesh.ops.triangulate(bm, faces=bm.faces)
+            bm.to_mesh(mesh)
+            mesh.calc_tessface()
+            bm.free()
+        except:
+            pass
+
+    def write_matrix4(file_handler, name, matrix):
+        file_handler.write(",\""+name+"\":[")
+
+        tempMatrix = matrix.copy()
+        tempMatrix.transpose()
+
+        first = True
+        for vect in tempMatrix:
+            if (first != True):
+                file_handler.write(",")
+            first = False;
+
+            file_handler.write("%.4f,%.4f,%.4f,%.4f"%(vect[0],vect[1], vect[2], vect[3]))
+                
+        file_handler.write("]")
+            
+    def write_array3(file_handler, name, array):
+        file_handler.write(",\""+name+"\":[" + "%.4f,%.4f,%.4f"%(array[0],array[1],array[2]) + "]")     
+    
+    def write_color(file_handler, name, color):
+        file_handler.write(",\""+name+"\":[" + "%.4f,%.4f,%.4f"%(color.r,color.g,color.b) + "]")
+
+    def write_vector(file_handler, name, vector):
+        file_handler.write(",\""+name+"\":[" + "%.4f,%.4f,%.4f"%(vector.x,vector.z,vector.y) + "]")
+
+    def write_quaternion(file_handler, name, quaternion):
+        file_handler.write(",\""+name+"\":[" + "%.4f,%.4f,%.4f,%.4f"%(quaternion.x,quaternion.z,quaternion.y, -quaternion.w) + "]")
+
+    def write_vectorScaled(file_handler, name, vector, mult):
+        file_handler.write(",\""+name+"\":[" + "%.4f,%.4f,%.4f"%(vector.x * mult, vector.z * mult, vector.y * mult) + "]")
+    
+    def write_string(file_handler, name, string, noComma=False):
+        if noComma == False:
+            file_handler.write(",")
+        file_handler.write("\""+name+"\":\"" + string + "\"")
+    
+    def write_float(file_handler, name, float):
+        file_handler.write(",\""+name+"\":" + "%.4f"%(float))
+        
+    def write_int(file_handler, name, int, noComma=False):
+        if noComma == False:
+            file_handler.write(",")
+        file_handler.write("\""+name+"\":" + str(int))
+        
+    def write_bool(file_handler, name, bool, noComma=False):    
+        if noComma == False:
+            file_handler.write(",") 
+        if bool:
+            file_handler.write("\""+name+"\":" + "true")
+        else:
+            file_handler.write("\""+name+"\":" + "false")
+            
+    def getDirection(matrix):
+        return (matrix.to_3x3() * mathutils.Vector((0.0, 0.0, -1.0))).normalized()
+            
+    def export_camera(object, scene, file_handler):     
+        invWorld = object.matrix_world.copy()
+        invWorld.invert()
+        
+        target = mathutils.Vector((0, 1, 0)) * invWorld
+    
+        file_handler.write("{")
+        Export_babylon.write_string(file_handler, "name", object.name, True)        
+        Export_babylon.write_string(file_handler, "id", object.name)
+        Export_babylon.write_vector(file_handler, "position", object.location)
+        Export_babylon.write_vector(file_handler, "target", target)
+        Export_babylon.write_float(file_handler, "fov", object.data.angle)
+        Export_babylon.write_float(file_handler, "minZ", object.data.clip_start)
+        Export_babylon.write_float(file_handler, "maxZ", object.data.clip_end)
+        Export_babylon.write_float(file_handler, "speed", 1.0)
+        Export_babylon.write_float(file_handler, "inertia", 0.9)
+        Export_babylon.write_bool(file_handler, "checkCollisions", object.data.checkCollisions)
+        Export_babylon.write_bool(file_handler, "applyGravity", object.data.applyGravity)
+        Export_babylon.write_array3(file_handler, "ellipsoid", object.data.ellipsoid)
+
+        locAnim = False
+        coma = False
+
+        if object.animation_data:
+            if object.animation_data.action:
+                file_handler.write(",\"animations\":[")
+                for fcurve in object.animation_data.action.fcurves:
+                    if fcurve.data_path == "location" and locAnim == False:
+                        Export_babylon.export_animation(object, scene, file_handler, "location", "position", coma, 1)
+                        locAnim = coma = True
+                file_handler.write("]")
+                #Set Animations
+                Export_babylon.write_bool(file_handler, "autoAnimate", True)
+                Export_babylon.write_int(file_handler, "autoAnimateFrom", 0)
+                Export_babylon.write_int(file_handler, "autoAnimateTo", bpy.context.scene.frame_end - bpy.context.scene.frame_start + 1)
+                Export_babylon.write_bool(file_handler, "autoAnimateLoop", True)
+
+        file_handler.write("}")
+        
+    def export_light(object, scene, file_handler):      
+        light_type_items = {'POINT': 0, 'SUN': 1, 'SPOT': 2, 'HEMI': 3, 'AREA': 0}
+        light_type = light_type_items[object.data.type]
+        
+        file_handler.write("{")
+        Export_babylon.write_string(file_handler, "name", object.name, True)        
+        Export_babylon.write_string(file_handler, "id", object.name)        
+        Export_babylon.write_float(file_handler, "type", light_type)
+        if light_type == 0:
+            Export_babylon.write_vector(file_handler, "position", object.location)
+        elif light_type == 1:
+            direction = Export_babylon.getDirection(object.matrix_world)
+            Export_babylon.write_vector(file_handler, "position", object.location)
+            Export_babylon.write_vector(file_handler, "direction", direction)
+        elif light_type == 2:
+            Export_babylon.write_vector(file_handler, "position", object.location)
+            direction = Export_babylon.getDirection(object.matrix_world)
+            Export_babylon.write_vector(file_handler, "direction", direction)
+            Export_babylon.write_float(file_handler, "angle", object.data.spot_size)
+            Export_babylon.write_float(file_handler, "exponent", object.data.spot_blend * 2)
+        else:
+            matrix_world = object.matrix_world.copy()
+            matrix_world.translation = mathutils.Vector((0, 0, 0))
+            direction = mathutils.Vector((0, 0, -1)) * matrix_world
+            Export_babylon.write_vector(file_handler, "direction", -direction)
+            Export_babylon.write_color(file_handler, "groundColor", mathutils.Color((0, 0, 0)))
+            
+        Export_babylon.write_float(file_handler, "intensity", object.data.energy)
+        
+        if object.data.use_diffuse:
+            Export_babylon.write_color(file_handler, "diffuse", object.data.color)
+        else:
+            Export_babylon.write_color(file_handler, "diffuse", mathutils.Color((0, 0, 0)))
+
+        if object.data.use_specular:
+            Export_babylon.write_color(file_handler, "specular", object.data.color)
+        else:
+            Export_babylon.write_color(file_handler, "specular", mathutils.Color((0, 0, 0)))
+            
+        file_handler.write("}")     
+    
+    def export_texture(slot, level, texture, scene, file_handler, filepath):    
+        # Copy image to output
+        try:
+            image = texture.texture.image
+            imageFilepath = os.path.normpath(bpy.path.abspath(image.filepath))
+            basename = os.path.basename(imageFilepath)
+            targetdir = os.path.dirname(filepath)
+            targetpath = os.path.join(targetdir, basename)
+            
+            if image.packed_file:
+                image.save_render(targetpath)
+            else:
+                sourcepath = bpy.path.abspath(image.filepath)
+                shutil.copy(sourcepath, targetdir)
+        except:
+            pass
+        
+        # Export
+        file_handler.write(",\""+slot+"\":{")
+        Export_babylon.write_string(file_handler, "name", basename, True)
+        Export_babylon.write_float(file_handler, "level", level)
+        Export_babylon.write_float(file_handler, "hasAlpha", texture.texture.use_alpha)
+        
+        coordinatesMode = 0;
+        if (texture.mapping == "CUBE"):
+            coordinatesMode = 3;
+        if (texture.mapping == "SPHERE"):
+            coordinatesMode = 1;        
+        Export_babylon.write_int(file_handler, "coordinatesMode", coordinatesMode)
+        Export_babylon.write_float(file_handler, "uOffset", texture.offset.x)
+        Export_babylon.write_float(file_handler, "vOffset", texture.offset.y)
+        Export_babylon.write_float(file_handler, "uScale", texture.scale.x)
+        Export_babylon.write_float(file_handler, "vScale", texture.scale.y)
+        Export_babylon.write_float(file_handler, "uAng", 0)
+        Export_babylon.write_float(file_handler, "vAng", 0)     
+        Export_babylon.write_float(file_handler, "wAng", 0)
+        
+        if (texture.texture.extension == "REPEAT"):
+            Export_babylon.write_bool(file_handler, "wrapU", True)      
+            Export_babylon.write_bool(file_handler, "wrapV", True)
+        else:
+            Export_babylon.write_bool(file_handler, "wrapU", False)     
+            Export_babylon.write_bool(file_handler, "wrapV", False)
+            
+        Export_babylon.write_int(file_handler, "coordinatesIndex", 0)
+        
+        file_handler.write("}") 
+        
+    def export_material(material, scene, file_handler, filepath):       
+        file_handler.write("{")
+        Export_babylon.write_string(file_handler, "name", material.name, True)      
+        Export_babylon.write_string(file_handler, "id", material.name)
+        Export_babylon.write_color(file_handler, "ambient", material.ambient * material.diffuse_color)
+        Export_babylon.write_color(file_handler, "diffuse", material.diffuse_intensity * material.diffuse_color)
+        Export_babylon.write_color(file_handler, "specular", material.specular_intensity * material.specular_color)
+        Export_babylon.write_float(file_handler, "specularPower", material.specular_hardness)
+        Export_babylon.write_color(file_handler, "emissive", material.emit * material.diffuse_color)        
+        Export_babylon.write_float(file_handler, "alpha", material.alpha)
+        Export_babylon.write_bool(file_handler, "backFaceCulling", material.game_settings.use_backface_culling)
+                
+        # Textures
+        for mtex in material.texture_slots:
+            if mtex and mtex.texture and mtex.texture.type == 'IMAGE':
+                if mtex.texture.image:
+                    if (mtex.use_map_color_diffuse and(mtex.texture_coords != 'REFLECTION')):
+                        # Diffuse
+                        Export_babylon.export_texture("diffuseTexture", mtex.diffuse_color_factor, mtex, scene, file_handler, filepath)
+                    if mtex.use_map_ambient:
+                        # Ambient
+                        Export_babylon.export_texture("ambientTexture", mtex.ambient_factor, mtex, scene, file_handler, filepath)
+                    if mtex.use_map_alpha:
+                        # Opacity
+                        Export_babylon.export_texture("opacityTexture", mtex.alpha_factor, mtex, scene, file_handler, filepath)
+                    if mtex.use_map_color_diffuse and (mtex.texture_coords == 'REFLECTION'):
+                        # Reflection
+                        Export_babylon.export_texture("reflectionTexture", mtex.diffuse_color_factor, mtex, scene, file_handler, filepath)
+                    if mtex.use_map_emit:
+                        # Emissive
+                        Export_babylon.export_texture("emissiveTexture", mtex.emit_factor, mtex, scene, file_handler, filepath)     
+                    if mtex.use_map_normal:
+                        # Bump
+                        Export_babylon.export_texture("bumpTexture", mtex.emit_factor, mtex, scene, file_handler, filepath)                         
+        
+        file_handler.write("}")         
+    
+    def export_multimaterial(multimaterial, scene, file_handler):       
+        file_handler.write("{")
+        Export_babylon.write_string(file_handler, "name", multimaterial.name, True)
+        Export_babylon.write_string(file_handler, "id", multimaterial.name)
+        
+        file_handler.write(",\"materials\":[")
+        first = True
+        for materialName in multimaterial.materials:
+            if first != True:
+                file_handler.write(",")
+            file_handler.write("\"" + materialName +"\"")
+            first = False
+        file_handler.write("]")
+        file_handler.write("}")
+
+    def export_animation(object, scene, file_handler, typeBl, typeBa, coma, mult):
+        if coma == True:
+            file_handler.write(",")
+        
+        file_handler.write("{")
+        Export_babylon.write_int(file_handler, "dataType", 1, True)
+        Export_babylon.write_int(file_handler, "framePerSecond", 30)
+        Export_babylon.write_int(file_handler, "loopBehavior", 1)
+        Export_babylon.write_string(file_handler, "name", typeBa+" animation")
+        Export_babylon.write_string(file_handler, "property", typeBa)
+        
+        file_handler.write(",\"keys\":[")
+            
+        frames = dict() 
+        for fcurve in object.animation_data.action.fcurves:
+            if fcurve.data_path == typeBl:
+                for key in fcurve.keyframe_points: 
+                    frame = key.co.x 
+                    frames[frame] = 1
+            
+        #for each frame (next step ==> set for key frames)
+        i = 0
+        for Frame in sorted(frames):
+            if i == 0 and Frame != 0.0:
+                file_handler.write("{")
+                Export_babylon.write_int(file_handler, "frame", 0, True)
+                bpy.context.scene.frame_set(int(Frame + bpy.context.scene.frame_start))
+                Export_babylon.write_vectorScaled(file_handler, "values", getattr(object,typeBl), mult)
+                file_handler.write("},")
+            i = i + 1
+            file_handler.write("{")
+            Export_babylon.write_int(file_handler, "frame", Frame, True)
+            bpy.context.scene.frame_set(int(Frame + bpy.context.scene.frame_start))
+            Export_babylon.write_vectorScaled(file_handler, "values", getattr(object,typeBl), mult)
+            file_handler.write("}")
+            if i != len(frames):
+                file_handler.write(",")
+            else:
+                file_handler.write(",{")
+                Export_babylon.write_int(file_handler, "frame", bpy.context.scene.frame_end - bpy.context.scene.frame_start + 1, True)
+                bpy.context.scene.frame_set(int(Frame + bpy.context.scene.frame_start))
+                Export_babylon.write_vectorScaled(file_handler, "values", getattr(object,typeBl), mult)
+                file_handler.write("}")
+        
+        file_handler.write("]}")
+
+    def export_mesh(object, scene, file_handler, multiMaterials):
+        # Get mesh  
+        mesh = object.to_mesh(scene, True, "PREVIEW")
+        
+        # Transform
+        loc = mathutils.Vector((0, 0, 0))
+        rot = mathutils.Quaternion((0, 0, 0, 1))
+        scale = mathutils.Vector((1, 1, 1))
+        
+        world = object.matrix_world
+        if object.parent and object.parent.type == "ARMATURE" and len(object.vertex_groups) > 0:
+            hasSkeleton = True
+        else:
+            hasSkeleton = False
+            if (object.parent):
+                world = object.parent.matrix_world.inverted() * object.matrix_world
+
+        loc, rot, scale = world.decompose()
+                                                
+        # Triangulate mesh if required
+        Export_babylon.mesh_triangulate(mesh)
+        
+        # Getting vertices and indices
+        positions=",\"positions\":["
+        normals=",\"normals\":["
+        indices=",\"indices\":["    
+
+        hasUV = True;
+        hasUV2 = True;
+        hasVertexColor = True
+
+        if len(mesh.tessface_uv_textures) > 0:
+            UVmap=mesh.tessface_uv_textures[0].data
+            uvs=",\"uvs\":["    
+        else:
+            hasUV = False
+            
+        if len(mesh.tessface_uv_textures) > 1:
+            UV2map=mesh.tessface_uv_textures[1].data
+            uvs2=",\"uvs2\":["  
+        else:
+            hasUV2 = False
+
+        if len(mesh.vertex_colors) > 0:
+            Colormap = mesh.tessface_vertex_colors.active.data
+            colors=",\"colors\":["  
+        else:
+            hasVertexColor = False
+
+        if hasSkeleton:
+            skeletonWeight = ",\"matricesWeights\":["
+            skeletonIndices = ",\"matricesIndices\":["
+            
+        alreadySavedVertices = []
+        vertices_UVs=[]
+        vertices_UV2s=[]
+        vertices_Colors=[]
+        vertices_indices=[]
+        subMeshes = []
+                
+        for v in range(0, len(mesh.vertices)):
+            alreadySavedVertices.append(False)
+            vertices_UVs.append([])
+            vertices_UV2s.append([])
+            vertices_Colors.append([])
+            vertices_indices.append([])
+                       
+        materialsCount = max(1, len(object.material_slots))
+        verticesCount = 0
+        indicesCount = 0
+
+        for materialIndex in range(materialsCount):
+            subMeshes.append(SubMesh())
+            subMeshes[materialIndex].materialIndex = materialIndex
+            subMeshes[materialIndex].verticesStart = verticesCount
+            subMeshes[materialIndex].indexStart = indicesCount
+        
+            for face in mesh.tessfaces:  # For each face
+                
+                if face.material_index != materialIndex:
+                    continue
+                
+                for v in range(3): # For each vertex in face
+                    vertex_index = face.vertices[v]
+                    vertex = mesh.vertices[vertex_index]
+                    position = vertex.co
+                    normal = vertex.normal
+
+                    #skeletons
+                    if hasSkeleton:
+                        matricesWeights = []
+                        matricesIndices = 0
+                        matricesWeights.append(0.0)
+                        matricesWeights.append(0.0)
+                        matricesWeights.append(0.0)
+                        matricesWeights.append(0.0)
+
+                        # Getting influences
+                        i = 0
+                        offset = 0
+                        for group in vertex.groups:
+                            index = group.group
+                            weight = group.weight
+
+                            for boneIndex, bone in enumerate(object.parent.pose.bones):
+                                if object.vertex_groups[index].name == bone.name:
+                                    matricesWeights[i] = weight
+                                    matricesIndices += boneIndex << offset
+                                    offset = offset + 8
+
+                                    i = i + 1
+                                    if (i == 4):
+                                        break;
+                            if (i == 4):
+                                break;
+
+
+                    # Texture coordinates
+                    if hasUV:
+                        vertex_UV = UVmap[face.index].uv[v]
+                        
+                    if hasUV2:
+                        vertex_UV2 = UV2map[face.index].uv[v]
+
+                    # Vertex color
+                    if hasVertexColor:      
+                        if v == 0:              
+                            vertex_Color = Colormap[face.index].color1
+                        if v == 1:              
+                            vertex_Color = Colormap[face.index].color2
+                        if v == 2:              
+                            vertex_Color = Colormap[face.index].color3
+                        
+                    # Check if the current vertex is already saved                  
+                    alreadySaved = alreadySavedVertices[vertex_index] and not hasSkeleton
+                    if alreadySaved:
+                        alreadySaved=False                      
+                    
+                        # UV
+                        index_UV = 0
+                        for savedIndex in vertices_indices[vertex_index]:
+                            if hasUV:                                               
+                                vUV = vertices_UVs[vertex_index][index_UV]
+                                if (vUV[0]!=vertex_UV[0] or vUV[1]!=vertex_UV[1]):
+                                    continue
+
+                            if hasUV2:
+                                vUV2 = vertices_UV2s[vertex_index][index_UV]
+                                if (vUV2[0]!=vertex_UV2[0] or vUV2[1]!=vertex_UV2[1]):
+                                    continue
+
+                            if hasVertexColor:
+                                vColor = vertices_Colors[vertex_index][index_UV]
+                                if (vColor.r!=vertex_Color.r or vColor.g!=vertex_Color.g or vColor.b!=vertex_Color.b):
+                                    continue
+
+                            if vertices_indices[vertex_index][index_UV] >= subMeshes[materialIndex].verticesStart:
+                                alreadySaved=True
+                                break
+
+                            index_UV+=1                 
+
+                    if (alreadySaved):
+                        # Reuse vertex
+                        index=vertices_indices[vertex_index][index_UV]
+                    else:
+                        # Export new one
+                        index=verticesCount
+                        alreadySavedVertices[vertex_index]=True
+                        if hasUV:
+                            vertices_UVs[vertex_index].append(vertex_UV)
+                            uvs+="%.4f,%.4f,"%(vertex_UV[0], vertex_UV[1])
+                        if hasUV2:
+                            vertices_UV2s[vertex_index].append(vertex_UV2)
+                            uvs2+="%.4f,%.4f,"%(vertex_UV2[0], vertex_UV2[1])
+                        if hasVertexColor:  
+                            vertices_Colors[vertex_index].append(vertex_Color)
+                            colors+="%.4f,%.4f,%.4f,"%(vertex_Color.r,vertex_Color.g,vertex_Color.b)
+                        if hasSkeleton:
+                            skeletonWeight+="%.4f,%.4f,%.4f,%.4f,"%(matricesWeights[0], matricesWeights[1], matricesWeights[2], matricesWeights[3])
+                            skeletonIndices+="%i,"%(matricesIndices)
+
+
+                        vertices_indices[vertex_index].append(index)
+                        
+                        positions+="%.4f,%.4f,%.4f,"%(position.x,position.z,position.y)             
+                        normals+="%.4f,%.4f,%.4f,"%(normal.x,normal.z,normal.y)                     
+                        
+                        verticesCount += 1
+                    indices+="%i,"%(index)
+                    indicesCount += 1           
+                    
+            subMeshes[materialIndex].verticesCount = verticesCount - subMeshes[materialIndex].verticesStart
+            subMeshes[materialIndex].indexCount = indicesCount - subMeshes[materialIndex].indexStart
+                
+        positions=positions.rstrip(',')
+        normals=normals.rstrip(',')
+        indices=indices.rstrip(',')
+            
+        positions+="]\n"
+        normals+="]\n"
+        indices+="]\n"  
+
+        if hasUV:
+            uvs=uvs.rstrip(',')
+            uvs+="]\n"
+
+        if hasUV2:
+            uvs2=uvs.rstrip(',')
+            uvs2+="]\n"
+
+        if hasVertexColor:
+            colors=uvs.rstrip(',')
+            colors+="]\n"
+
+        if hasSkeleton:
+            skeletonWeight=skeletonWeight.rstrip(', ')
+            skeletonWeight+="]\n"
+            skeletonIndices= skeletonIndices.rstrip(', ')
+            skeletonIndices+="]\n"
+
+                
+        # Writing mesh      
+        file_handler.write("{")
+        
+        Export_babylon.write_string(file_handler, "name", object.name, True)        
+        Export_babylon.write_string(file_handler, "id", object.name)        
+        if object.parent != None:
+            Export_babylon.write_string(file_handler, "parentId", object.parent.name)
+        
+        if len(object.material_slots) == 1:
+            material = object.material_slots[0].material
+            Export_babylon.write_string(file_handler, "materialId", object.material_slots[0].name)
+            
+            if material.game_settings.face_orientation != "BILLBOARD":
+                billboardMode = 0
+            else:
+                billboardMode = 7
+        elif len(object.material_slots) > 1:
+            multimat = MultiMaterial()
+            multimat.name = "Multimaterial#" + str(len(multiMaterials))
+            multimat.materials = []
+            Export_babylon.write_string(file_handler, "materialId", multimat.name)
+            for mat in object.material_slots:
+                multimat.materials.append(mat.name)
+                
+            multiMaterials.append(multimat)
+            billboardMode = 0
+        else:
+            billboardMode = 0
+            
+        Export_babylon.write_vector(file_handler, "position", loc)
+        Export_babylon.write_vectorScaled(file_handler, "rotation", rot.to_euler("XYZ"), -1)
+        Export_babylon.write_vector(file_handler, "scaling", scale)
+        Export_babylon.write_bool(file_handler, "isVisible", object.is_visible(scene))
+        Export_babylon.write_bool(file_handler, "isEnabled", True)
+        Export_babylon.write_bool(file_handler, "checkCollisions", object.data.checkCollisions)
+        Export_babylon.write_int(file_handler, "billboardMode", billboardMode)
+        Export_babylon.write_bool(file_handler, "receiveShadows", object.data.receiveShadows)
+        if hasSkeleton:
+            i = 0
+            for obj in [object for object in scene.objects if object.is_visible(scene)]:
+                if (obj.type == 'ARMATURE'):
+                   if (obj.name == object.parent.name):
+                        Export_babylon.write_int(file_handler, "skeletonId", i)
+                   else:
+                       i = i+1
+                
+        file_handler.write(positions)
+        file_handler.write(normals)
+
+        if hasUV:
+            file_handler.write(uvs)
+
+        if hasUV2:
+            file_handler.write(uvs2)
+
+        if hasVertexColor:
+            file_handler.write(colors)
+
+        if hasSkeleton:
+            file_handler.write(skeletonWeight)
+            file_handler.write(skeletonIndices)
+
+
+        file_handler.write(indices) 
+        
+        # Sub meshes
+        file_handler.write(",\"subMeshes\":[")
+        first = True
+        for subMesh in subMeshes:
+            if first == False:
+                file_handler.write(",")
+            file_handler.write("{")
+            Export_babylon.write_int(file_handler, "materialIndex", subMesh.materialIndex, True)
+            Export_babylon.write_int(file_handler, "verticesStart", subMesh.verticesStart)
+            Export_babylon.write_int(file_handler, "verticesCount", subMesh.verticesCount)
+            Export_babylon.write_int(file_handler, "indexStart", subMesh.indexStart)
+            Export_babylon.write_int(file_handler, "indexCount", subMesh.indexCount)
+            file_handler.write("}")
+            first = False
+        file_handler.write("]")
+                
+        #Export Animations
+        
+        rotAnim = False
+        locAnim = False
+        scaAnim = False
+        coma = False
+        
+        if object.animation_data:
+            if object.animation_data.action:
+                file_handler.write(",\"animations\":[")
+                for fcurve in object.animation_data.action.fcurves:
+                    if fcurve.data_path == "rotation_euler" and rotAnim == False:
+                        Export_babylon.export_animation(object, scene, file_handler, "rotation_euler", "rotation", coma, -1)
+                        rotAnim = coma = True
+                    elif fcurve.data_path == "location" and locAnim == False:
+                        Export_babylon.export_animation(object, scene, file_handler, "location", "position", coma, 1)
+                        locAnim = coma = True
+                    elif fcurve.data_path == "scale" and scaAnim == False:
+                        Export_babylon.export_animation(object, scene, file_handler, "scale", "scaling", coma, 1)
+                        locAnim = coma = True
+                file_handler.write("]")
+                #Set Animations
+                Export_babylon.write_bool(file_handler, "autoAnimate", True)
+                Export_babylon.write_int(file_handler, "autoAnimateFrom", 0)
+                Export_babylon.write_int(file_handler, "autoAnimateTo", bpy.context.scene.frame_end - bpy.context.scene.frame_start + 1)
+                Export_babylon.write_bool(file_handler, "autoAnimateLoop", True)
+
+
+        # Closing
+        file_handler.write("}")
+        
+    def export_shadowGenerator(lamp, scene, file_handler):      
+        file_handler.write("{")
+        if lamp.data.shadowMap == 'VAR':
+            Export_babylon.write_bool(file_handler, "useVarianceShadowMap", True, True)
+        else:
+            Export_babylon.write_bool(file_handler, "useVarianceShadowMap", False, True)
+            
+        Export_babylon.write_int(file_handler, "mapSize", lamp.data.shadowMapSize)  
+        Export_babylon.write_string(file_handler, "lightId", lamp.name)     
+        
+        file_handler.write(",\"renderList\":[")
+        multiMaterials = []
+        first = True
+        for object in [object for object in scene.objects]:
+            if (object.type == 'MESH' and object.data.castShadows):
+                if first != True:
+                    file_handler.write(",")
+
+                first = False
+                file_handler.write("\"" + object.name + "\"")
+        file_handler.write("]")         
+        file_handler.write("}") 
+
+    def export_bone_matrix(armature, bone, label, file_handler):
+        SystemMatrix = Matrix.Scale(-1, 4, Vector((0, 0, 1))) * Matrix.Rotation(radians(-90), 4, 'X')
+
+        if (bone.parent):
+            Export_babylon.write_matrix4(file_handler, label, (SystemMatrix * armature.matrix_world * bone.parent.matrix).inverted() * (SystemMatrix * armature.matrix_world * bone.matrix))
+        else:
+            Export_babylon.write_matrix4(file_handler, label, SystemMatrix * armature.matrix_world * bone.matrix)
+
+
+    def export_bones(armature, scene, file_handler, id):
+        file_handler.write("{")
+
+        Export_babylon.write_string(file_handler, "name", armature.name, True)
+        Export_babylon.write_int(file_handler, "id", id)
+        
+        file_handler.write(",\"bones\":[")
+        bones = armature.pose.bones
+        first = True
+        j = 0
+        for bone in bones:
+            if first != True:
+                file_handler.write(",")
+            first = False
+
+            file_handler.write("{")
+            Export_babylon.write_string(file_handler, "name", bone.name, True)
+            Export_babylon.write_int(file_handler, "index", j)
+
+            Export_babylon.export_bone_matrix(armature, bone, "matrix", file_handler)
+
+            if (bone.parent):
+                parentId = 0
+                for parent in bones:
+                    if parent == bone.parent:
+                        break;
+                    parentId += 1
+
+                Export_babylon.write_int(file_handler, "parentBoneIndex", parentId)
+            else:
+                Export_babylon.write_int(file_handler, "parentBoneIndex", -1)
+
+            #animation
+            if (armature.animation_data.action):
+               Export_babylon.export_bonesAnimation(armature, bone, scene, file_handler)
+            
+            j = j + 1
+
+            file_handler.write("}")
+
+        file_handler.write("]")
+
+        file_handler.write("}") 
+
+    def export_bonesAnimation(armature, bone, scene, file_handler):
+        file_handler.write(",\"animation\": {")
+
+        start_frame = scene.frame_start
+        end_frame = scene.frame_end
+        fps = scene.render.fps
+
+        Export_babylon.write_int(file_handler, "dataType", 3, True)
+        Export_babylon.write_int(file_handler, "framePerSecond", fps)
+
+        #keys
+        file_handler.write(",\"keys\":[")
+                        
+        for Frame in range(start_frame, end_frame + 1):
+                
+            file_handler.write("{")
+
+            Export_babylon.write_int(file_handler, "frame", Frame, True)
+            bpy.context.scene.frame_set(Frame)
+
+            Export_babylon.export_bone_matrix(armature, bone, "values", file_handler)
+
+            if Frame == end_frame:
+                file_handler.write("}")
+            else:
+                file_handler.write("},")
+        
+        file_handler.write("]")
+            
+        Export_babylon.write_int(file_handler, "loopBehavior", 1)
+        Export_babylon.write_string(file_handler, "name", "anim")
+        Export_babylon.write_string(file_handler, "property", "_matrix")
+
+        file_handler.write("}")
+        bpy.context.scene.frame_set(start_frame)
+
+    def save(operator, context, filepath="",
+        use_apply_modifiers=False,
+        use_triangulate=True,
+        use_compress=False):
+
+        # Open file
+        file_handler = open(filepath, 'w')  
+            
+        if bpy.ops.object.mode_set.poll():
+            bpy.ops.object.mode_set(mode='OBJECT')      
+
+        # Writing scene
+        scene=context.scene
+        
+        world = scene.world
+        if world:
+            world_ambient = world.ambient_color
+        else:
+            world_ambient = Color((0.0, 0.0, 0.0))
+
+        bpy.ops.screen.animation_cancel()
+        currentFrame = bpy.context.scene.frame_current
+        bpy.context.scene.frame_set(0)
+    
+        file_handler.write("{")
+        file_handler.write("\"autoClear\":true")
+        Export_babylon.write_color(file_handler, "clearColor", world_ambient)
+        Export_babylon.write_color(file_handler, "ambientColor", world_ambient)
+        Export_babylon.write_vector(file_handler, "gravity", scene.gravity)
+        
+        if world and world.mist_settings.use_mist:
+                Export_babylon.write_int(file_handler, "fogMode", 3)
+                Export_babylon.write_color(file_handler, "fogColor", world.horizon_color)
+                Export_babylon.write_float(file_handler, "fogStart", world.mist_settings.start)
+                Export_babylon.write_float(file_handler, "fogEnd", world.mist_settings.depth)
+                Export_babylon.write_float(file_handler, "fogDensity", 0.1)
+        
+        # Cameras
+        file_handler.write(",\"cameras\":[")
+        first = True
+        for object in [object for object in scene.objects if object.is_visible(scene)]:
+            if (object.type == 'CAMERA'):
+                if first != True:
+                    file_handler.write(",")
+
+                first = False
+                data_string = Export_babylon.export_camera(object, scene, file_handler)
+        file_handler.write("]")
+                        
+        # Active camera
+        if scene.camera != None:
+            Export_babylon.write_string(file_handler, "activeCamera", scene.camera.name)
+            
+        # Lights
+        file_handler.write(",\"lights\":[")
+        first = True
+        for object in [object for object in scene.objects if object.is_visible(scene)]:
+            if (object.type == 'LAMP'):
+                if first != True:
+                    file_handler.write(",")
+
+                first = False
+                data_string = Export_babylon.export_light(object, scene, file_handler)
+        file_handler.write("]")
+        
+        # Materials
+        materials = [mat for mat in bpy.data.materials if mat.users >= 1]
+        file_handler.write(",\"materials\":[")
+        first = True
+        for material in materials:
+            if first != True:
+                file_handler.write(",")
+
+            first = False
+            data_string = Export_babylon.export_material(material, scene, file_handler, filepath)
+        file_handler.write("]")
+        
+        # Meshes
+        file_handler.write(",\"meshes\":[")
+        multiMaterials = []
+        first = True
+        for object in [object for object in scene.objects]:
+            if (object.type == 'MESH'):
+                if first != True:
+                    file_handler.write(",")
+
+                first = False
+                data_string = Export_babylon.export_mesh(object, scene, file_handler, multiMaterials)
+        file_handler.write("]")
+        
+        # Multi-materials
+        file_handler.write(",\"multiMaterials\":[")
+        first = True
+        for multimaterial in multiMaterials:
+            if first != True:
+                file_handler.write(",")
+
+            first = False
+            data_string = Export_babylon.export_multimaterial(multimaterial, scene, file_handler)
+        file_handler.write("]")
+        
+        # Shadow generators
+        file_handler.write(",\"shadowGenerators\":[")
+        first = True
+        for object in [object for object in scene.objects if object.is_visible(scene)]:
+            if (object.type == 'LAMP' and object.data.shadowMap != 'NONE'):
+                if first != True:
+                    file_handler.write(",")
+
+                first = False
+                data_string = Export_babylon.export_shadowGenerator(object, scene, file_handler)
+        file_handler.write("]")
+
+        # Armatures/Bones
+        file_handler.write(",\"skeletons\":[")
+        first = True
+        i = 0
+        for object in [object for object in scene.objects if object.is_visible(scene)]:
+            if (object.type == 'ARMATURE'):
+                if first != True:
+                    file_handler.write(",")
+
+                first = False
+                data_string = Export_babylon.export_bones(object, scene, file_handler, i)
+                i = i+1
+        file_handler.write("]")     
+        
+        # Closing
+        file_handler.write("}")
+        file_handler.close()
+
+        bpy.context.scene.frame_set(currentFrame)
+        
+        return {'FINISHED'}
+
+# UI
+bpy.types.Mesh.checkCollisions = BoolProperty(
+    name="Check Collisions", 
+    default = False)
+    
+bpy.types.Mesh.castShadows = BoolProperty(
+    name="Cast Shadows", 
+    default = False)
+    
+bpy.types.Mesh.receiveShadows = BoolProperty(
+    name="Receive Shadows", 
+    default = False)
+    
+bpy.types.Camera.checkCollisions = BoolProperty(
+    name="Check Collisions", 
+    default = False)
+    
+bpy.types.Camera.applyGravity = BoolProperty(
+    name="Apply Gravity", 
+    default = False)    
+    
+bpy.types.Camera.ellipsoid = FloatVectorProperty(
+    name="Ellipsoid", 
+    default = mathutils.Vector((0.2, 0.9, 0.2)))
+
+bpy.types.Lamp.shadowMap = EnumProperty(
+    name="Shadow Map Type", 
+    items = (('NONE', "None", "No Shadow Maps"), ('STD', "Standard", "Use Standard Shadow Maps"), ('VAR', "Variance", "Use Variance Shadow Maps")),
+    default = 'NONE')
+    
+bpy.types.Lamp.shadowMapSize = IntProperty(
+    name="Shadow Map Size", 
+    default = 512)  
+
+class ObjectPanel(bpy.types.Panel):
+    bl_label = "Babylon.js"
+    bl_space_type = "PROPERTIES"
+    bl_region_type = "WINDOW"
+    bl_context = "data"
+    
+    def draw(self, context):
+        ob = context.object
+        if not ob or not ob.data:
+            return
+            
+        layout = self.layout
+        isMesh = isinstance(ob.data, bpy.types.Mesh)
+        isCamera = isinstance(ob.data, bpy.types.Camera)
+        isLight = isinstance(ob.data, bpy.types.Lamp)
+        
+        if isMesh:
+            layout.prop(ob.data, 'checkCollisions')     
+            layout.prop(ob.data, 'castShadows')     
+            layout.prop(ob.data, 'receiveShadows')      
+        elif isCamera:
+            layout.prop(ob.data, 'checkCollisions')
+            layout.prop(ob.data, 'applyGravity')
+            layout.prop(ob.data, 'ellipsoid')
+        elif isLight:
+            layout.prop(ob.data, 'shadowMap')
+            layout.prop(ob.data, 'shadowMapSize')   
+            
+### REGISTER ###
+
+def menu_func(self, context):
+    self.layout.operator(Export_babylon.bl_idname, text="Babylon.js (.babylon)")
+
+def register():
+    bpy.utils.register_module(__name__)
+    bpy.types.INFO_MT_file_export.append(menu_func)
+
+def unregister():
+    bpy.utils.unregister_module(__name__)
+    bpy.types.INFO_MT_file_export.remove(menu_func)
+
+    
+if __name__ == "__main__":
+    register()
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/IExporter.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/IExporter.cs
new file mode 100644
index 0000000..30f14b0
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/IExporter.cs	
@@ -0,0 +1,13 @@
+﻿using System;
+
+namespace BabylonExport.Core
+{
+    public interface IExporter
+    {
+        event Action<int> OnImportProgressChanged;
+
+        string SupportedExtensions { get; }
+
+        void GenerateBabylonFile(string file, string outputFile, bool skinned);
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/MXB/NovaExporter.Materials.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/MXB/NovaExporter.Materials.cs
new file mode 100644
index 0000000..7f967db
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/MXB/NovaExporter.Materials.cs	
@@ -0,0 +1,468 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Linq;
+using BabylonExport;
+using SharpDX.Direct3D9;
+using Vertice.Core;
+using Vertice.Nova;
+using Vertice.Nova.Core;
+using Vertice.Nova.Materials;
+using System.Windows.Forms;
+
+namespace BabylonExport.Core.Exporters
+{
+    partial class NovaExporter
+    {
+        void DumpMaterials(BabylonScene babylonScene)
+        {
+            var count = 0;
+            foreach (NovaMaterial material in materialsToExport)
+            {
+                var stdMaterial = material as NovaStandardMaterial;
+
+                if (stdMaterial != null)
+                {
+                    DumpStandardMaterial(stdMaterial, babylonScene);
+                    continue;
+                }
+
+                var perPixelShader = material as NovaPerPixelShader;
+
+                if (perPixelShader != null)
+                {
+                    DumpPerPixelShader(perPixelShader, babylonScene);
+                    continue;
+                }
+
+                var multiMaterial = material as NovaMultiMaterial;
+
+                if (multiMaterial != null)
+                {
+                    DumpMultiMaterial(multiMaterial, babylonScene);
+                }
+
+                ReportProgressChanged(75 + (count++ * 25) / materialsToExport.Count);
+            }
+        }
+
+        void AttachMirrorPlane(BabylonTexture babylonTexture, NovaObject novaObject)
+        {
+            // Mirror plane
+            int f1, f2, f3;
+
+            if (novaObject.Is32bits)
+            {
+                f1 = novaObject.Indices32[2];
+                f2 = novaObject.Indices32[1];
+                f3 = novaObject.Indices32[0];
+            }
+            else
+            {
+                f1 = novaObject.Indices[2];
+                f2 = novaObject.Indices[1];
+                f3 = novaObject.Indices[0];
+            }
+            Vector3 a = novaObject.PositionOnlyVertices[f1];
+            Vector3 b = novaObject.PositionOnlyVertices[f2];
+            Vector3 c = novaObject.PositionOnlyVertices[f3];
+
+            var mainPlane = new Plane(a, b, c);
+
+            Matrix matrix = Matrix.Invert(novaObject.WorldMatrix);
+            matrix = Matrix.Transpose(matrix);
+            Plane plane = Plane.Transform(mainPlane, matrix);
+
+            babylonTexture.mirrorPlane = new[] { plane.Normal.X, plane.Normal.Y, plane.Normal.Z, plane.D };
+        }
+
+        void DumpStandardMaterial(NovaStandardMaterial stdMaterial, BabylonScene babylonScene)
+        {
+            var babylonMaterial = new BabylonMaterial();
+            babylonScene.MaterialsList.Add(babylonMaterial);
+
+            babylonMaterial.name = stdMaterial.Name;
+            babylonMaterial.id = stdMaterial.ID.ToString();
+            babylonMaterial.alpha = stdMaterial.Alpha;
+            babylonMaterial.ambient = (stdMaterial.Ambient * (1.0f - stdMaterial.SelfIllumination)).ToArray();
+            babylonMaterial.diffuse = (stdMaterial.Diffuse * (1.0f - stdMaterial.SelfIllumination)).ToArray();
+            babylonMaterial.emissive = (stdMaterial.Emissive * stdMaterial.SelfIllumination).ToArray();
+            babylonMaterial.specular = stdMaterial.Specular.ToArray();
+            babylonMaterial.specularPower = stdMaterial.SpecularSharpness;
+            babylonMaterial.backFaceCulling = (stdMaterial.CullMode == NovaCull.CounterClockwise);
+
+            if (stdMaterial.DiffuseTexture != null && stdMaterial.DiffuseTexture.HasTextureData && stdMaterial.OpacityTexture != null && stdMaterial.OpacityTexture.HasTextureData)
+            {
+                if (stdMaterial.DiffuseTexture.LoadedTexture == stdMaterial.OpacityTexture.LoadedTexture)
+                {
+                    stdMaterial.DiffuseTexture = stdMaterial.OpacityTexture;
+                    stdMaterial.OpacityTexture = null;
+                }
+            }
+
+            if (stdMaterial.DiffuseTexture != null && stdMaterial.DiffuseTexture.HasTextureData && !stdMaterial.DiffuseTexture.IsVideo && !stdMaterial.DiffuseTexture.IsCubeRender)
+            {
+                babylonMaterial.diffuseTexture = new BabylonTexture();
+                DumpTexture(stdMaterial.DiffuseTexture, babylonMaterial.diffuseTexture, babylonScene);
+            }
+
+            if (stdMaterial.AmbientTexture != null && stdMaterial.AmbientTexture.HasTextureData && !stdMaterial.AmbientTexture.IsVideo && !stdMaterial.AmbientTexture.IsCubeRender)
+            {
+                babylonMaterial.ambientTexture = new BabylonTexture();
+                DumpTexture(stdMaterial.AmbientTexture, babylonMaterial.ambientTexture, babylonScene);
+            }
+
+            if (stdMaterial.OpacityTexture != null && stdMaterial.OpacityTexture.HasTextureData && !stdMaterial.OpacityTexture.IsVideo && !stdMaterial.OpacityTexture.IsCubeRender)
+            {
+                babylonMaterial.opacityTexture = new BabylonTexture();
+                DumpTexture(stdMaterial.OpacityTexture, babylonMaterial.opacityTexture, babylonScene);
+            }
+
+            if (mirrorsMaterials.ContainsKey(stdMaterial))
+            {
+                babylonMaterial.reflectionTexture = new BabylonTexture();
+                var novaObject = mirrorsMaterials[stdMaterial];
+                DumpRenderTargetTexture(stdMaterial.ReflectionTexture, babylonMaterial.reflectionTexture, novaObject.MirrorMapSize, novaObject.MirrorLevel, novaObject.MirroredObjects);
+
+                AttachMirrorPlane(babylonMaterial.reflectionTexture, novaObject);
+            }
+            else if (stdMaterial.ReflectionTexture != null && stdMaterial.ReflectionTexture.HasTextureData && !stdMaterial.ReflectionTexture.IsVideo && !stdMaterial.ReflectionTexture.IsCubeRender)
+            {
+                babylonMaterial.reflectionTexture = new BabylonTexture();
+                DumpTexture(stdMaterial.ReflectionTexture, babylonMaterial.reflectionTexture, babylonScene);
+            }
+
+            if (stdMaterial.EmissiveTexture != null && stdMaterial.EmissiveTexture.HasTextureData && !stdMaterial.EmissiveTexture.IsVideo && !stdMaterial.EmissiveTexture.IsCubeRender)
+            {
+                babylonMaterial.emissiveTexture = new BabylonTexture();
+                DumpTexture(stdMaterial.EmissiveTexture, babylonMaterial.emissiveTexture, babylonScene);
+            }
+
+            if (stdMaterial.SpecularTexture != null && stdMaterial.SpecularTexture.HasTextureData && !stdMaterial.SpecularTexture.IsVideo && !stdMaterial.SpecularTexture.IsCubeRender)
+            {
+                babylonMaterial.specularTexture = new BabylonTexture();
+                DumpTexture(stdMaterial.SpecularTexture, babylonMaterial.specularTexture, babylonScene);
+            }
+
+            if (stdMaterial.BumpTexture != null && stdMaterial.BumpTexture.HasTextureData && !stdMaterial.BumpTexture.IsVideo && !stdMaterial.BumpTexture.IsCubeRender)
+            {
+                babylonMaterial.bumpTexture = new BabylonTexture();
+                DumpTexture(stdMaterial.BumpTexture, babylonMaterial.bumpTexture, babylonScene);
+                babylonMaterial.bumpTexture.level /= 2.0f;
+            }
+        }
+
+        void DumpPerPixelShader(NovaPerPixelShader ppShader, BabylonScene babylonScene)
+        {
+            var babylonMaterial = new BabylonMaterial();
+            babylonScene.MaterialsList.Add(babylonMaterial);
+
+            babylonMaterial.name = ppShader.Name;
+            babylonMaterial.id = ppShader.ID.ToString();
+            babylonMaterial.alpha = ppShader.Alpha;
+            babylonMaterial.ambient = (ppShader.Ambient * (1.0f - ppShader.SelfIllumination)).ToArray();
+            babylonMaterial.diffuse = (ppShader.Diffuse * (1.0f - ppShader.SelfIllumination)).ToArray();
+            babylonMaterial.emissive = (ppShader.Emissive * ppShader.SelfIllumination).ToArray();
+            babylonMaterial.specular = ppShader.Specular.ToArray();
+            babylonMaterial.specularPower = ppShader.SpecularSharpness;
+            babylonMaterial.backFaceCulling = (ppShader.CullMode == NovaCull.CounterClockwise);
+
+            if (ppShader.DiffuseTexture != null && ppShader.DiffuseTexture.HasTextureData && ppShader.OpacityTexture != null && ppShader.OpacityTexture.HasTextureData)
+            {
+                if (ppShader.DiffuseTexture.LoadedTexture == ppShader.OpacityTexture.LoadedTexture)
+                {
+                    ppShader.DiffuseTexture = ppShader.OpacityTexture;
+                    ppShader.OpacityTexture = null;
+                }
+            }
+
+            if (ppShader.DiffuseTexture != null && ppShader.DiffuseTexture.HasTextureData && !ppShader.DiffuseTexture.IsVideo && !ppShader.DiffuseTexture.IsCubeRender)
+            {
+                babylonMaterial.diffuseTexture = new BabylonTexture();
+                DumpTexture(ppShader.DiffuseTexture, babylonMaterial.diffuseTexture, babylonScene);
+            }
+
+            if (ppShader.AmbientTexture != null && ppShader.AmbientTexture.HasTextureData && !ppShader.AmbientTexture.IsVideo && !ppShader.AmbientTexture.IsCubeRender)
+            {
+                babylonMaterial.ambientTexture = new BabylonTexture();
+                DumpTexture(ppShader.AmbientTexture, babylonMaterial.ambientTexture, babylonScene);
+            }
+
+            if (ppShader.OpacityTexture != null && ppShader.OpacityTexture.HasTextureData && !ppShader.OpacityTexture.IsVideo && !ppShader.OpacityTexture.IsCubeRender)
+            {
+                babylonMaterial.opacityTexture = new BabylonTexture();
+                DumpTexture(ppShader.OpacityTexture, babylonMaterial.opacityTexture, babylonScene);
+            }
+
+            if (mirrorsMaterials.ContainsKey(ppShader))
+            {
+                babylonMaterial.reflectionTexture = new BabylonTexture();
+                var novaObject = mirrorsMaterials[ppShader];
+                DumpRenderTargetTexture(ppShader.ReflectionTexture, babylonMaterial.reflectionTexture, novaObject.MirrorMapSize, novaObject.MirrorLevel, novaObject.MirroredObjects);
+
+                AttachMirrorPlane(babylonMaterial.reflectionTexture, novaObject);
+            }
+            else if (ppShader.ReflectionTexture != null && ppShader.ReflectionTexture.HasTextureData && !ppShader.ReflectionTexture.IsVideo && !ppShader.ReflectionTexture.IsCubeRender)
+            {
+                babylonMaterial.reflectionTexture = new BabylonTexture();
+                DumpTexture(ppShader.ReflectionTexture, babylonMaterial.reflectionTexture, babylonScene);
+            }
+
+            // Refraction
+            if (ppShader.RefractionLevel > 0)
+            {
+                babylonMaterial.alpha = 1.0f - ppShader.RefractionLevel;
+            }
+
+            if (ppShader.EmissiveTexture != null && ppShader.EmissiveTexture.HasTextureData && !ppShader.EmissiveTexture.IsVideo && !ppShader.EmissiveTexture.IsCubeRender)
+            {
+                babylonMaterial.emissiveTexture = new BabylonTexture();
+                DumpTexture(ppShader.EmissiveTexture, babylonMaterial.emissiveTexture, babylonScene);
+            }
+
+            if (ppShader.SpecularTexture != null && ppShader.SpecularTexture.HasTextureData && !ppShader.SpecularTexture.IsVideo && !ppShader.SpecularTexture.IsCubeRender)
+            {
+                babylonMaterial.specularTexture = new BabylonTexture();
+                DumpTexture(ppShader.SpecularTexture, babylonMaterial.specularTexture, babylonScene);
+            }
+
+            if (ppShader.BumpTexture != null && ppShader.BumpTexture.HasTextureData && !ppShader.BumpTexture.IsVideo && !ppShader.BumpTexture.IsCubeRender)
+            {
+                babylonMaterial.bumpTexture = new BabylonTexture();
+                DumpTexture(ppShader.BumpTexture, babylonMaterial.bumpTexture, babylonScene);
+                babylonMaterial.bumpTexture.level /= 2.0f;
+            }
+        }
+
+        static void DumpMultiMaterial(NovaMultiMaterial multiMaterial, BabylonScene babylonScene)
+        {
+            var babylonMultiMaterial = new BabylonMultiMaterial();
+            babylonScene.MultiMaterialsList.Add(babylonMultiMaterial);
+
+            babylonMultiMaterial.name = multiMaterial.Name;
+            babylonMultiMaterial.id = multiMaterial.ID.ToString();
+
+            babylonMultiMaterial.materials = multiMaterial.Materials.Select(material => (material != null ? material.ID.ToString() : "")).ToArray();
+        }
+
+        void DumpTextureAnimation(NovaTexture texture, BabylonTexture babylonTexture)
+        {
+            var animations = new List<BabylonAnimation>();
+
+            DumpInterpolator("Texture UOffset", "uOffset", texture.UOffsetInterpolator, texture.ParentScene, animations);
+            DumpInterpolator("Texture VOffset", "vOffset", texture.VOffsetInterpolator, texture.ParentScene, animations);
+            DumpInterpolator("Texture UScale", "uScale", texture.UScaleInterpolator, texture.ParentScene, animations);
+            DumpInterpolator("Texture VScale", "vScale", texture.VScaleInterpolator, texture.ParentScene, animations);
+
+            babylonTexture.animations = animations.ToArray();
+        }
+
+        private void DumpCubeTexture(NovaTexture texture, BabylonTexture babylonTexture, BabylonScene babylonScene)
+        {
+            var textureFilename = Path.Combine(texture.LoadedTexture.Directory, texture.LoadedTexture.Filename);
+            var baseName = Path.GetFileNameWithoutExtension(texture.LoadedTexture.Filename);
+
+            babylonTexture.isCube = true;
+            babylonTexture.name = baseName;
+
+            baseName = Path.Combine(babylonScene.OutputPath, baseName);
+
+            if (!File.Exists(textureFilename))
+            {
+                texture.LoadedTexture.SaveToDDS(false, textureFilename);
+            }
+
+            if (!alreadyExportedTextures.Contains(textureFilename))
+            {
+                alreadyExportedTextures.Add(textureFilename);
+
+                // Use SharpDX to extract face images
+                var form = new Form { ClientSize = new Size(64, 64) };
+                var device = new Device(new Direct3D(), 0, DeviceType.Hardware, form.Handle,
+                                        CreateFlags.HardwareVertexProcessing,
+                                        new PresentParameters(form.ClientSize.Width, form.ClientSize.Height));
+
+                var cubeTexture = CubeTexture.FromFile(device, textureFilename);
+
+                using (var surface = cubeTexture.GetCubeMapSurface(CubeMapFace.PositiveX, 0))
+                {
+                    Surface.ToFile(surface, baseName + "_px.jpg", ImageFileFormat.Jpg);
+                }
+                using (var surface = cubeTexture.GetCubeMapSurface(CubeMapFace.PositiveY, 0))
+                {
+                    Surface.ToFile(surface, baseName + "_py.jpg", ImageFileFormat.Jpg);
+                }
+                using (var surface = cubeTexture.GetCubeMapSurface(CubeMapFace.PositiveZ, 0))
+                {
+                    Surface.ToFile(surface, baseName + "_pz.jpg", ImageFileFormat.Jpg);
+                }
+                using (var surface = cubeTexture.GetCubeMapSurface(CubeMapFace.NegativeX, 0))
+                {
+                    Surface.ToFile(surface, baseName + "_nx.jpg", ImageFileFormat.Jpg);
+                }
+                using (var surface = cubeTexture.GetCubeMapSurface(CubeMapFace.NegativeY, 0))
+                {
+                    Surface.ToFile(surface, baseName + "_ny.jpg", ImageFileFormat.Jpg);
+                }
+                using (var surface = cubeTexture.GetCubeMapSurface(CubeMapFace.NegativeZ, 0))
+                {
+                    Surface.ToFile(surface, baseName + "_nz.jpg", ImageFileFormat.Jpg);
+                }
+
+                cubeTexture.Dispose();
+                device.Dispose();
+                form.Dispose();
+            }
+        }
+
+        private void DumpRenderTargetTexture(NovaTexture texture, BabylonTexture babylonTexture, int renderSize, float level, NovaMirroredObjectsList renderList)
+        {
+            babylonTexture.level = level;
+            babylonTexture.hasAlpha = false;
+            babylonTexture.coordinatesMode = (int)NovaTexture.NovaTextureMapType.Projection;
+
+            babylonTexture.name = texture.Name;
+            babylonTexture.uOffset = texture.UOffset;
+            babylonTexture.vOffset = texture.VOffset;
+            babylonTexture.uScale = texture.UScale;
+            babylonTexture.vScale = texture.VScale;
+            babylonTexture.uAng = texture.UAng;
+            babylonTexture.vAng = texture.VAng;
+            babylonTexture.wAng = texture.WAng;
+            switch (texture.UAddressMode)
+            {
+                case NovaTextureAddress.Wrap:
+                    babylonTexture.wrapU = 1;
+                    break;
+                case NovaTextureAddress.Mirror:
+                    babylonTexture.wrapU = 2;
+                    break;
+                case NovaTextureAddress.Clamp:
+                    babylonTexture.wrapU = 0;
+                    break;
+            }
+            switch (texture.VAddressMode)
+            {
+                case NovaTextureAddress.Wrap:
+                    babylonTexture.wrapV = 1;
+                    break;
+                case NovaTextureAddress.Mirror:
+                    babylonTexture.wrapV = 2;
+                    break;
+                case NovaTextureAddress.Clamp:
+                    babylonTexture.wrapV = 0;
+                    break;
+            }
+            babylonTexture.coordinatesIndex = texture.MapCoordinateIndex;
+
+            DumpTextureAnimation(texture, babylonTexture);
+
+            babylonTexture.isRenderTarget = true;
+            babylonTexture.renderTargetSize = renderSize;
+
+            babylonTexture.renderList = renderList.Select(o => o.ID.ToString()).ToArray();
+        }
+
+        void DumpTexture(NovaTexture texture, BabylonTexture babylonTexture, BabylonScene babylonScene)
+        {
+            babylonTexture.level = texture.Level;
+            babylonTexture.hasAlpha = texture.HasAlpha;
+            babylonTexture.coordinatesMode = (int)texture.MapType;
+
+            if (texture.LoadedTexture.IsCube)
+            {
+                DumpCubeTexture(texture, babylonTexture, babylonScene);
+                return;
+            }
+
+            babylonTexture.name = texture.Name;
+            babylonTexture.uOffset = texture.UOffset;
+            babylonTexture.vOffset = texture.VOffset;
+            babylonTexture.uScale = texture.UScale;
+            babylonTexture.vScale = texture.VScale;
+            babylonTexture.uAng = texture.UAng;
+            babylonTexture.vAng = texture.VAng;
+            babylonTexture.wAng = texture.WAng;
+            switch (texture.UAddressMode)
+            {
+                case NovaTextureAddress.Wrap:
+                    babylonTexture.wrapU = 1;
+                    break;
+                case NovaTextureAddress.Mirror:
+                    babylonTexture.wrapU = 2;
+                    break;
+                case NovaTextureAddress.Clamp:
+                    babylonTexture.wrapU = 0;
+                    break;
+            }
+            switch (texture.VAddressMode)
+            {
+                case NovaTextureAddress.Wrap:
+                    babylonTexture.wrapV = 1;
+                    break;
+                case NovaTextureAddress.Mirror:
+                    babylonTexture.wrapV = 2;
+                    break;
+                case NovaTextureAddress.Clamp:
+                    babylonTexture.wrapV = 0;
+                    break;
+            }
+            babylonTexture.coordinatesIndex = texture.MapCoordinateIndex;
+
+            DumpTextureAnimation(texture, babylonTexture);
+
+            babylonTexture.name = CopyTexture(texture, babylonScene);
+        }
+
+        string CopyTexture(NovaTexture texture, BabylonScene babylonScene)
+        {
+            string name = texture.Name;
+            // Data
+            if (!alreadyExportedTextures.Contains(texture.Name + texture.HasAlpha))
+            {
+                alreadyExportedTextures.Add(texture.Name + texture.HasAlpha);
+
+                if (Path.GetExtension(texture.Name).ToLower() == ".dds" || Path.GetExtension(texture.Name).ToLower() == ".bmp")
+                {
+                    name = Path.GetFileNameWithoutExtension(texture.Name) + ".png";
+                    var alreadyExists = File.Exists(Path.Combine(babylonScene.OutputPath, name));
+
+                    texture.LoadedTexture.SaveToPNG(Path.Combine(babylonScene.OutputPath, name));
+
+                    if (!texture.HasAlpha)
+                    {
+                        var oldPath = Path.Combine(babylonScene.OutputPath, name);
+                        var bmp = Image.FromFile(oldPath);
+
+                        name = Path.GetFileNameWithoutExtension(texture.Name) + ".jpg";
+
+                        bmp.Save(Path.Combine(babylonScene.OutputPath, name), ImageFormat.Jpeg);
+                        bmp.Dispose();
+
+                        if (!alreadyExists)
+                        {
+                            File.Delete(oldPath);
+                        }
+                    }
+                }
+                else
+                {
+                    var sourceFile = Path.Combine(texture.Directory, texture.Filename);
+                    File.Copy(sourceFile, Path.Combine(babylonScene.OutputPath, Path.GetFileName(sourceFile)), true);
+                }
+            }
+            else
+            {
+                if (Path.GetExtension(texture.Name).ToLower() == ".dds" ||
+                    Path.GetExtension(texture.Name).ToLower() == ".bmp")
+                {
+                    name = Path.GetFileNameWithoutExtension(texture.Name) + (texture.HasAlpha ? ".png" : ".jpg");
+                }
+            }
+
+            return name;
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/MXB/NovaExporter.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/MXB/NovaExporter.cs
new file mode 100644
index 0000000..db75342
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/MXB/NovaExporter.cs	
@@ -0,0 +1,705 @@
+﻿using System;
+using System.Linq;
+using System.Collections.Generic;
+using System.IO;
+using System.Runtime.Serialization.Json;
+using Vertice.Core;
+using Vertice.Nova;
+using Vertice.Nova.Core;
+using Vertice.Nova.Core.DirectX9;
+using Vertice.Nova.Materials;
+using Vertice.Nova.Animations;
+using Vertice.Nova.Core.DirectX10;
+
+namespace BabylonExport.Core.Exporters
+{
+    public partial class NovaExporter : IExporter
+    {
+        readonly List<string> alreadyExportedTextures = new List<string>();
+        readonly List<NovaMaterial> materialsToExport = new List<NovaMaterial>();
+        readonly List<NovaParticleSystem> particleSystemsToExport = new List<NovaParticleSystem>();
+        readonly List<NovaLensFlares> lensFlareSystemToExport = new List<NovaLensFlares>();
+        readonly Dictionary<NovaMaterial, NovaObject> mirrorsMaterials = new Dictionary<NovaMaterial, NovaObject>();
+
+        public event Action<int> OnImportProgressChanged;
+
+        public string SupportedExtensions
+        {
+            get
+            {
+                return ".mxb .mxc";
+            }
+        }
+
+        void ReportProgressChanged(int progress)
+        {
+            if (OnImportProgressChanged != null)
+            {
+                OnImportProgressChanged(progress);
+            }
+        }
+
+        public void GenerateBabylonFile(string file, string outputFile, bool skinned)
+        {
+            try
+            {
+                ReportProgressChanged(0);
+                NovaEngine.Launch<DirectX9Provider>("", 128, 128);
+                NovaScene novaScene = NovaEngine.CreateScene("TempScene");
+
+                if (file.EndsWith(".mxc"))
+                {
+                    NovaEngine.ResourceManager.ArchivePath = Path.GetFullPath(file);
+
+                    // Get the mbx file name
+                    file = NovaEngine.ResourceManager.GetStartSceneFilename();
+                }
+
+                novaScene.Load(file);
+                novaScene.Render(false);
+
+                Generate(novaScene, outputFile);
+            }
+
+            finally
+            {
+                NovaEngine.Stop();
+            }
+        }
+
+        void Generate(NovaScene scene, string outputFile)
+        {
+            ReportProgressChanged(25);
+            var babylonScene = new BabylonScene(Path.GetDirectoryName(outputFile));
+            alreadyExportedTextures.Clear();
+
+            babylonScene.autoClear = scene.AutoClear;
+            babylonScene.clearColor = scene.ClearColor.ToArray();
+            babylonScene.ambientColor = scene.AmbientColor.ToArray();
+            babylonScene.gravity = ((scene.Gravity == Vector3.Zero) ? new Vector3(0, -9.0f, 0) : scene.Gravity).ToArray();
+
+            // Fog
+            babylonScene.fogMode = (int)scene.FogMode;
+            babylonScene.fogColor = scene.FogColor.ToArray();
+            babylonScene.fogStart = scene.ActiveCamera.NearClip;
+            babylonScene.fogEnd = scene.ActiveCamera.FarClip;
+            babylonScene.fogDensity = scene.FogDensity;
+
+            // Cameras
+            DumpCameras(scene, babylonScene);
+
+            // Lights
+            DumpLights(scene, babylonScene);
+            ReportProgressChanged(50);
+
+            // Objects
+            DumpObjects(scene, babylonScene);
+
+            // Materials
+            DumpMaterials(babylonScene);
+
+            // Particles
+            DumpParticles(babylonScene);
+
+            // Lens flares
+            DumpLensFlares(babylonScene);
+
+            // Output
+            babylonScene.Prepare(false);
+            using (var outputStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
+            {
+                var ser = new DataContractJsonSerializer(typeof(BabylonScene));
+                ser.WriteObject(outputStream, babylonScene);
+            }
+            ReportProgressChanged(100);
+        }
+
+
+        void DumpLensFlares(BabylonScene babylonScene)
+        {
+            if (lensFlareSystemToExport.Count == 0)
+                return;
+
+            babylonScene.lensFlareSystems = new BabylonLensFlareSystem[lensFlareSystemToExport.Count];
+
+            var index = 0;
+            foreach (var lensFlareSystem in lensFlareSystemToExport)
+            {
+                var flares = new List<BabylonLensFlare>();
+                foreach (var flare in lensFlareSystem.Flares)
+                {
+                    flares.Add(new BabylonLensFlare
+                    {
+                        color = flare.Color.ToArray(),
+                        position = flare.Position,
+                        size = flare.Size / 1000.0f,
+                        textureName = CopyTexture(flare.Texture, babylonScene)
+                    });
+                }
+
+                babylonScene.lensFlareSystems[index] = new BabylonLensFlareSystem
+                {
+                    emitterId = (lensFlareSystem.Tag as NovaLight).ID.ToString(),
+                    borderLimit = lensFlareSystem.BorderLimit,
+                    flares = flares.ToArray()
+                };
+
+                index++;
+            }
+        }
+
+        private void DumpParticles(BabylonScene babylonScene)
+        {
+            if (particleSystemsToExport.Count == 0)
+                return;
+
+            babylonScene.particleSystems = new BabylonParticleSystem[particleSystemsToExport.Count];
+
+            var index = 0;
+            foreach (var particleSystem in particleSystemsToExport)
+            {
+                babylonScene.particleSystems[index] = new BabylonParticleSystem
+                    {
+                        capacity = particleSystem.BufferSize,
+                        emitterId = particleSystem.Emitter.ID.ToString(),
+                        gravity = particleSystem.Gravity.ToArray(),
+                        direction1 = Vector3.TransformNormal(particleSystem.Direction1, particleSystem.Emitter.LocalMatrix).ToArray(),
+                        direction2 = Vector3.TransformNormal(particleSystem.Direction2, particleSystem.Emitter.LocalMatrix).ToArray(),
+                        minEmitBox = particleSystem.MinEmitBox.ToArray(),
+                        maxEmitBox = particleSystem.MaxEmitBox.ToArray(),
+                        color1 = particleSystem.Color1.ToArray(),
+                        color2 = particleSystem.Color2.ToArray(),
+                        colorDead = new RGBAColor(particleSystem.ColorDead.Red, particleSystem.ColorDead.Green, particleSystem.ColorDead.Blue, particleSystem.DeadAlpha).ToArray(),
+                        emitRate = particleSystem.EmitRate,
+                        updateSpeed = particleSystem.UpdateSpeed,
+                        targetStopFrame = particleSystem.TargetStopFrame,
+                        minEmitPower = particleSystem.MinEmitPower,
+                        maxEmitPower = particleSystem.MaxEmitPower,
+                        minLifeTime = particleSystem.MinLifeTime,
+                        maxLifeTime = particleSystem.MaxLifeTime,
+                        minSize = particleSystem.MinSize,
+                        maxSize = particleSystem.MaxSize,
+                        minAngularSpeed = particleSystem.MinAngularSpeed,
+                        maxAngularSpeed = particleSystem.MaxAngularSpeed,
+                        textureName = CopyTexture(particleSystem.Texture, babylonScene),
+                        blendMode = (int)particleSystem.BlendType,
+                        linkToEmitter = particleSystem.LinkToEmitter
+                    };
+
+                Vector4 textureMask = Vector4.Zero;
+
+                switch (particleSystem.TextureUsage)
+                {
+                    case NovaParticleSystem.ParticleTextureUsages.Alpha:
+                        textureMask = new Vector4(0, 0, 0, 1);
+                        break;
+                    case NovaParticleSystem.ParticleTextureUsages.RGB:
+                        textureMask = new Vector4(1, 1, 1, 0);
+                        break;
+                    case NovaParticleSystem.ParticleTextureUsages.ARGB:
+                        textureMask = new Vector4(1, 1, 1, 1);
+                        break;
+                }
+
+                babylonScene.particleSystems[index].textureMask = textureMask.ToArray();
+
+                index++;
+            }
+        }
+
+        bool IsInterpolatorIsEmpty(NovaFloatInterpolator interpolator)
+        {
+            for (int index = 0; index < interpolator.Datas.Length - 1; index++)
+            {
+                if (interpolator.Datas[index].Value != interpolator.Datas[index + 1].Value)
+                {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
+        bool IsInterpolatorIsEmpty(NovaVector3Interpolator interpolator)
+        {
+            for (int index = 0; index < interpolator.Datas.Length - 1; index++)
+            {
+                if (interpolator.Datas[index].Value != interpolator.Datas[index + 1].Value)
+                {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
+        bool DumpInterpolator(string name, string property, NovaFloatInterpolator interpolator, NovaScene scene, List<BabylonAnimation> animations, float mult = 1.0f)
+        {
+            if (interpolator.Ready && !IsInterpolatorIsEmpty(interpolator))
+            {
+                var fps = scene.AnimationFramerate < 1 ? 30 : scene.AnimationFramerate;
+                var babylonAnimation = new BabylonAnimation { name = name, property = property, dataType = BabylonAnimation.DataType.Float, framePerSecond = fps };
+
+                babylonAnimation.keys = interpolator.Datas.Select(value => new BabylonAnimationKey { frame = value.Key / scene.AnimationKeyStep, values = new[] { value.Value * mult } }).ToArray();
+
+                babylonAnimation.loopBehavior = interpolator.LoopAfter;
+
+                animations.Add(babylonAnimation);
+                return true;
+            }
+
+            return false;
+        }
+
+        bool DumpInterpolator(string name, string property, NovaVector3Interpolator interpolator, NovaScene scene, List<BabylonAnimation> animations)
+        {
+            if (interpolator.Ready && !IsInterpolatorIsEmpty(interpolator))
+            {
+                var fps = scene.AnimationFramerate < 1 ? 30 : scene.AnimationFramerate;
+                var babylonAnimation = new BabylonAnimation { name = name, property = property, dataType = BabylonAnimation.DataType.Vector3, framePerSecond = fps };
+
+                babylonAnimation.keys = interpolator.Datas.Select(value => new BabylonAnimationKey { frame = value.Key / scene.AnimationKeyStep, values = value.Value.ToArray() }).ToArray();
+
+                babylonAnimation.loopBehavior = interpolator.LoopAfter;
+
+                animations.Add(babylonAnimation);
+                return true;
+            }
+
+            return false;
+        }
+
+        bool DumpInterpolator(string name, string property, NovaQuaternionInterpolator interpolator, NovaScene scene, List<BabylonAnimation> animations)
+        {
+            if (interpolator.Ready)
+            {
+                var fps = scene.AnimationFramerate < 1 ? 30 : scene.AnimationFramerate;
+                var babylonAnimation = new BabylonAnimation { name = name, property = property, dataType = BabylonAnimation.DataType.Quaternion, framePerSecond = fps };
+
+                babylonAnimation.keys = interpolator.Datas.Select(value => new BabylonAnimationKey { frame = value.Key / scene.AnimationKeyStep, values = value.Value.ToArray() }).ToArray();
+
+                babylonAnimation.loopBehavior = interpolator.LoopAfter;
+
+                animations.Add(babylonAnimation);
+                return true;
+            }
+
+            return false;
+        }
+
+        void DumpObjects(NovaScene scene, BabylonScene babylonScene)
+        {
+            int count = 0;
+            foreach (NovaObject novaObject in scene.Objects)
+            {
+                if (novaObject.Is32bits)
+                {
+                    if (novaObject.SubObjects.Count == 1)
+                    {
+                        var total = novaObject.VerticesCount;
+                        const int step = 32000;
+                        var stepsCount = (int)(Math.Floor((float)total / step) + 1);
+
+                        for (var index = 0; index < stepsCount; index++)
+                        {
+                            var start = index * step;
+                            var end = (index + 1) * step;
+                            DumpObject(novaObject, babylonScene, scene, start, end, string.Format("#{0}", index));
+                        }
+                    }
+                }
+                else
+                {
+                    DumpObject(novaObject, babylonScene, scene, 0, novaObject.VerticesCount);
+                }
+
+                ReportProgressChanged(50 + (count++ * 25) / scene.Objects.Count);
+            }
+        }
+
+        void DumpObject(NovaObject novaObject, BabylonScene babylonScene, NovaScene scene, int startIndex, int endIndex, string nameIndex = "")
+        {
+            var babylonMesh = new BabylonMesh();
+            babylonScene.MeshesList.Add(babylonMesh);
+
+            babylonMesh.name = novaObject.Name + nameIndex;
+            babylonMesh.id = novaObject.ID.ToString();
+            babylonMesh.materialId = novaObject.Material == null ? "" : novaObject.Material.ID.ToString();
+            babylonMesh.parentId = novaObject.ParentEntity == null ? "" : novaObject.ParentEntity.ID.ToString();
+            babylonMesh.isEnabled = novaObject.Enabled;
+            babylonMesh.isVisible = novaObject.Renderable;
+            babylonMesh.visibility = novaObject.Visibility;
+            babylonMesh.checkCollisions = novaObject.CheckCollisions;
+            babylonMesh.receiveShadows = novaObject.ReceiveShadows;
+            babylonMesh.infiniteDistance = novaObject.InfiniteDistance;
+
+            if (novaObject.Billboard)
+            {
+                babylonMesh.billboardMode |= (novaObject.BillboardX ? 1 : 0);
+                babylonMesh.billboardMode |= (novaObject.BillboardY ? 2 : 0);
+                babylonMesh.billboardMode |= (novaObject.BillboardZ ? 4 : 0);
+            }
+
+            if (novaObject.ParticleSystem != null)
+            {
+                particleSystemsToExport.Add(novaObject.ParticleSystem);
+            }
+
+            // Mirror
+            if (novaObject.IsMirror && novaObject.Material != null)
+            {
+                mirrorsMaterials.Add(novaObject.Material, novaObject);
+            }
+
+            // World
+            babylonMesh.position = novaObject.Position.ToArray();
+            babylonMesh.rotation = novaObject.Rotation.ToArray();
+            babylonMesh.localMatrix = (Matrix.Scaling(novaObject.Scaling) * novaObject.LocalMatrix).ToArray();
+
+            // Animations
+            var animations = new List<BabylonAnimation>();
+
+            DumpInterpolator("Visibility animation", "visibility", novaObject.VisibilityInterpolator, scene, animations);
+
+            // Position
+            if (!DumpInterpolator("Position animation", "position", novaObject.PositionInterpolator, scene, animations))
+            {
+                DumpInterpolator("PositionX animation", "position.x", novaObject.PositionXInterpolator, scene, animations);
+                DumpInterpolator("PositionY animation", "position.y", novaObject.PositionYInterpolator, scene, animations);
+                DumpInterpolator("PositionZ animation", "position.z", novaObject.PositionZInterpolator, scene, animations);
+            }
+
+            // Rotation
+            if (!DumpInterpolator("Rotation animation", "rotationQuaternion", novaObject.RotationInterpolator, scene, animations))
+            {
+                DumpInterpolator("RotationX animation", "rotation.x", novaObject.RotationXInterpolator, scene,
+                    animations, -novaObject.Determinant);
+                DumpInterpolator("RotationY animation", "rotation.y", novaObject.RotationYInterpolator, scene,
+                    animations, -novaObject.Determinant);
+                DumpInterpolator("RotationZ animation", "rotation.z", novaObject.RotationZInterpolator, scene,
+                    animations, -novaObject.Determinant);
+            }
+            else
+            {
+                babylonMesh.localMatrix = Matrix.Identity.ToArray();
+                babylonMesh.scaling = novaObject.Scaling.ToArray();
+            }
+
+            // Scaling
+            if (!DumpInterpolator("Scaling animation", "scaling", novaObject.ScalingInterpolator, scene, animations))
+            {
+                DumpInterpolator("ScalingX animation", "scaling.x", novaObject.ScalingXInterpolator, scene, animations);
+                DumpInterpolator("ScalingY animation", "scaling.y", novaObject.ScalingYInterpolator, scene, animations);
+                DumpInterpolator("ScalingZ animation", "scaling.z", novaObject.ScalingZInterpolator, scene, animations);
+            }
+            else
+            {
+                babylonMesh.localMatrix = novaObject.LocalMatrix.ToArray();
+                babylonMesh.scaling = novaObject.Scaling.ToArray();
+            }
+
+            babylonMesh.animations = animations.ToArray();
+            babylonMesh.autoAnimate = novaObject.AutoAnimate;
+
+            if (novaObject.AutoAnimate)
+            {
+                babylonMesh.autoAnimateFrom = novaObject.AnimationStartKey;
+                if (novaObject.AnimationEndKey == -1)
+                {
+                    babylonMesh.autoAnimateTo = scene.AnimationKeyMax / scene.AnimationKeyStep;
+                    babylonMesh.autoAnimateLoop = true;
+                }
+                else
+                {
+                    babylonMesh.autoAnimateTo = novaObject.AnimationEndKey;
+                }
+            }
+
+            // Vertices & faces
+            var exportedVerticesCount = DumpObjectGeometry(novaObject, babylonMesh, startIndex, endIndex);
+
+            // Subobjects
+            var subMeshes = new List<BabylonSubMesh>();
+
+            if (novaObject.Is32bits)
+            {
+                var subMesh = new BabylonSubMesh();
+                subMesh.materialIndex = 0;
+                subMesh.verticesStart = 0;
+                subMesh.verticesCount = exportedVerticesCount;
+                subMesh.indexStart = 0;
+                subMesh.indexCount = babylonMesh.indices.Length;
+
+                subMeshes.Add(subMesh);
+            }
+            else
+            {
+                foreach (NovaSubObject subObject in novaObject.SubObjects)
+                {
+                    var subMesh = new BabylonSubMesh();
+                    subMesh.materialIndex = subObject.AttributeRange.AttributeId;
+                    subMesh.verticesStart = subObject.AttributeRange.VertexStart;
+                    subMesh.verticesCount = subObject.AttributeRange.VertexCount;
+                    subMesh.indexStart = subObject.AttributeRange.FaceStart * 3;
+                    subMesh.indexCount = subObject.AttributeRange.FaceCount * 3;
+
+                    subMeshes.Add(subMesh);
+                }
+            }
+            babylonMesh.subMeshes = subMeshes.ToArray();
+
+            if (novaObject.Material != null)
+            {
+                if (!materialsToExport.Contains(novaObject.Material))
+                {
+                    materialsToExport.Add(novaObject.Material);
+                    var multiMat = novaObject.Material as NovaMultiMaterial;
+
+                    if (multiMat != null)
+                    {
+                        foreach (var mat in multiMat.Materials)
+                        {
+                            if (!materialsToExport.Contains(mat))
+                            {
+                                materialsToExport.Add(mat);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        private void DumpVertex(NovaCustomVertexFormat.GlobalVector3 vertex, List<float> positions, List<float> normals, List<float> uvs, List<float> uvs2, List<float> colors, Matrix transformMatrix, NovaObject novaObject)
+        {
+            var position = Vector3.TransformCoordinate(vertex.Position, transformMatrix);
+            var normal = Vector3.TransformNormal(vertex.Normal, transformMatrix);
+
+            positions.Add(position.X); positions.Add(position.Y); positions.Add(position.Z);
+            normals.Add(normal.X); normals.Add(normal.Y); normals.Add(normal.Z);
+            uvs.Add(vertex.Tu); uvs.Add(vertex.Tv);
+
+            if (novaObject.Use2TextureCoordinatesForMeshCreation)
+            {
+                uvs2.Add(vertex.Tu2); uvs2.Add(vertex.Tv2);
+            }
+
+            if (novaObject.VertexPaint)
+            {
+                var color = RGBAColor.FromArgb((int)vertex.Color);
+                colors.Add(color.Red); colors.Add(color.Green); colors.Add(color.Blue);
+            }
+        }
+
+        private int DumpObjectGeometry(NovaObject novaObject, BabylonMesh babylonMesh, int startIndex, int endIndex)
+        {
+            var verticesIndices = new int[novaObject.VerticesCount];
+            for (var index = 0; index < verticesIndices.Length; index++)
+            {
+                verticesIndices[index] = -1;
+            }
+
+            // Vertices
+            var transformMatrix = Matrix.Identity;//.Scaling(novaObject.Scaling) * novaObject.LocalMatrix;
+            var indicesList = new List<int>();
+
+            NovaCustomVertexFormat.GlobalVector3[] vertices = novaObject.InternalMesh.LockVertexBuffer<NovaCustomVertexFormat.GlobalVector3>(NovaLock.ReadOnly, novaObject.VerticesCount);
+
+            // Faces
+            INovaDataStream data = novaObject.InternalMesh.LockIndexBuffer(NovaLock.ReadOnly);
+
+            int[] indices;
+
+            if (novaObject.Is32bits)
+            {
+                indices = data.Read<int>(novaObject.FacesCount * 3 * 4);
+            }
+            else
+            {
+                indices = (data.Read<ushort>(novaObject.FacesCount * 3 * 4)).Select(i => (int)i).ToArray();
+            }
+
+            var positions = new List<float>();
+            var normals = new List<float>();
+            var uvs = new List<float>();
+            var uvs2 = new List<float>();
+            var colors = new List<float>();
+            int exportedVerticesCount = 0;
+            for (var index = 0; index < novaObject.FacesCount; index++)
+            {
+                var v0 = indices[index * 3];
+                var v1 = indices[index * 3 + 1];
+                var v2 = indices[index * 3 + 2];
+
+                if (v0 < startIndex || v1 < startIndex || v2 < startIndex)
+                {
+                    continue;
+                }
+
+                if (v0 >= startIndex && v0 < endIndex || v1 >= startIndex && v1 < endIndex || v2 >= startIndex && v2 < endIndex)
+                {
+                    if (verticesIndices[v0] == -1)
+                    {
+                        verticesIndices[v0] = exportedVerticesCount++;
+                        DumpVertex(vertices[v0], positions, normals, uvs, uvs2, colors, transformMatrix, novaObject);
+                    }
+                    if (verticesIndices[v1] == -1)
+                    {
+                        verticesIndices[v1] = exportedVerticesCount++;
+                        DumpVertex(vertices[v1], positions, normals, uvs, uvs2, colors, transformMatrix, novaObject);
+                    }
+                    if (verticesIndices[v2] == -1)
+                    {
+                        verticesIndices[v2] = exportedVerticesCount++;
+                        DumpVertex(vertices[v2], positions, normals, uvs, uvs2, colors, transformMatrix, novaObject);
+                    }
+
+                    indicesList.Add(verticesIndices[v0]);
+                    indicesList.Add(verticesIndices[v1]);
+                    indicesList.Add(verticesIndices[v2]);
+                }
+            }
+
+            if (positions.Count > 0)
+            {
+                babylonMesh.positions = positions.ToArray();
+            }
+            if (normals.Count > 0)
+            {
+                babylonMesh.normals = normals.ToArray();
+            }
+            if (uvs.Count > 0)
+            {
+                babylonMesh.uvs = uvs.ToArray();
+            }
+            if (uvs2.Count > 0)
+            {
+                babylonMesh.uvs2 = uvs2.ToArray();
+            }
+            if (colors.Count > 0)
+            {
+                babylonMesh.colors = colors.ToArray();
+            }
+            babylonMesh.indices = indicesList.ToArray();
+
+            // Invert normal order
+            for (var index = 0; index < babylonMesh.indices.Length; index += 3)
+            {
+                var temp = babylonMesh.indices[index];
+                babylonMesh.indices[index] = babylonMesh.indices[index + 2];
+                babylonMesh.indices[index + 2] = temp;
+            }
+
+            novaObject.InternalMesh.UnlockIndexBuffer();
+            novaObject.InternalMesh.UnlockVertexBuffer();
+
+            return exportedVerticesCount;
+        }
+
+        void DumpCameras(NovaScene scene, BabylonScene babylonScene)
+        {
+            foreach (NovaCamera camera in scene.Cameras)
+            {
+                var babylonCamera = new BabylonCamera();
+                babylonScene.CamerasList.Add(babylonCamera);
+
+                babylonCamera.name = camera.Name;
+                babylonCamera.id = camera.ID.ToString();
+                babylonCamera.parentId = camera.ParentEntity == null ? "" : camera.ParentEntity.ID.ToString();
+                babylonCamera.lockedTargetId = camera.Target == null ? "" : camera.Target.ID.ToString();
+                babylonCamera.position = camera.Position.ToArray();
+                babylonCamera.rotation = camera.Rotation.ToArray();
+                babylonCamera.fov = camera.FOV;
+                babylonCamera.minZ = camera.NearClip;
+                babylonCamera.maxZ = camera.FarClip;
+                babylonCamera.inertia = camera.Inertia;
+                babylonCamera.speed = camera.Speed;
+                babylonCamera.checkCollisions = camera.CheckCollisions;
+                babylonCamera.applyGravity = camera.ApplyGravity;
+                babylonCamera.ellipsoid = camera.EllipsoidVector.ToArray();
+
+                // Animations
+                var animations = new List<BabylonAnimation>();
+
+                // Position
+                if (!DumpInterpolator("Position animation", "position", camera.PositionInterpolator, scene, animations))
+                {
+                    DumpInterpolator("PositionX animation", "position.x", camera.PositionXInterpolator, scene, animations);
+                    DumpInterpolator("PositionY animation", "position.y", camera.PositionYInterpolator, scene, animations);
+                    DumpInterpolator("PositionZ animation", "position.z", camera.PositionZInterpolator, scene, animations);
+                }
+
+                babylonCamera.animations = animations.ToArray();
+                babylonCamera.autoAnimate = camera.AutoAnimate;
+
+                if (camera.AutoAnimate)
+                {
+                    babylonCamera.autoAnimateFrom = camera.AnimationStartKey;
+                    if (camera.AnimationEndKey == -1)
+                    {
+                        babylonCamera.autoAnimateTo = scene.AnimationKeyMax / scene.AnimationKeyStep;
+                        babylonCamera.autoAnimateLoop = true;
+                    }
+                    else
+                    {
+                        babylonCamera.autoAnimateTo = camera.AnimationEndKey;
+                    }
+                }
+            }
+
+            if (scene.ActiveCamera != null)
+            {
+                babylonScene.activeCameraID = scene.ActiveCamera.ID.ToString();
+            }
+        }
+
+        void DumpLights(NovaScene scene, BabylonScene babylonScene)
+        {
+            foreach (NovaLight light in scene.Lights)
+            {
+                if (light.Enabled)
+                {
+                    var babylonLight = new BabylonLight();
+                    babylonScene.LightsList.Add(babylonLight);
+
+                    babylonLight.name = light.Name;
+                    babylonLight.id = light.ID.ToString();
+                    switch (light.Type)
+                    {
+                        case NovaLightType.Point:
+                            babylonLight.type = 0;
+                            babylonLight.position = light.Position.ToArray();
+                            break;
+                        case NovaLightType.Spot:
+                        case NovaLightType.Directional:
+                            babylonLight.type = 1;
+                            babylonLight.position = light.Position.ToArray();
+                            babylonLight.direction = light.Direction.ToArray();
+                            break;
+                    }
+                    babylonLight.diffuse = light.Diffuse.ToArray();
+                    babylonLight.specular = light.Specular.ToArray();
+                    babylonLight.intensity = light.Multiplicator;
+
+                    if (light.ShadowMembers.Count > 0)
+                    {
+                        var shadowGenerator = new BabylonShadowGenerator
+                        {
+                            useVarianceShadowMap = true,
+                            lightId = light.ID.ToString(),
+                            mapSize = light.ShadowMapSize,
+                            renderList = light.ShadowMembers.Select(m => m.ID.ToString()).ToArray()
+                        };
+                        babylonScene.ShadowGeneratorsList.Add(shadowGenerator);
+                    }
+
+                    if (light.LensFlares != null)
+                    {
+                        light.LensFlares.Tag = light;
+                        lensFlareSystemToExport.Add(light.LensFlares);
+                    }
+                }
+            }
+        }
+
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/Document.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/Document.cs
new file mode 100644
index 0000000..87fa94c
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/Document.cs	
@@ -0,0 +1,62 @@
+﻿
+using System.Collections.Generic;
+using System.IO;
+using System.Collections.ObjectModel;
+
+namespace BabylonExport.Core
+{
+    internal class Document<T> where T : Line, new()
+    {
+        ReadOnlyCollection<List<T>> blocks;
+
+        public Document(string text)
+        {
+            int lineIndex = 0;
+            List<T> tempLines = null;
+            List<List<T>> tempBlocks = new List<List<T>>();
+            string previousHeader = "";
+            var lines = text.Split('\n');
+
+            for (int index = 0; index < lines.Length; index++)
+            {
+                T line = new T { Index = lineIndex++ };
+
+                string lineContent = "";
+
+                bool multiline;
+                do
+                {
+                    multiline = false;
+                    lineContent += lines[index].Trim();
+                    if (lineContent.EndsWith("\\"))
+                    {
+                        multiline = true;
+                        lineContent = lineContent.Substring(0, lineContent.Length - 1);
+                        index++;
+                    }
+                }
+                while (multiline);
+
+                line.SetLine(lineContent);
+
+                if (!line.IsValid)
+                    continue;
+
+                if ((line.Tokens[0] == line.BlockSperator && previousHeader != line.BlockSperator) || tempLines == null)
+                {
+                    tempLines = new List<T>();
+                    tempBlocks.Add(tempLines);
+                }
+                tempLines.Add(line);
+                previousHeader = line.Tokens[0];
+            }
+
+            blocks = new ReadOnlyCollection<List<T>>(tempBlocks);
+        }
+
+        public ReadOnlyCollection<List<T>> Blocks
+        {
+            get { return blocks; }
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/Line.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/Line.cs
new file mode 100644
index 0000000..c3a47f5
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/Line.cs	
@@ -0,0 +1,73 @@
+﻿using System;
+using System.Globalization;
+using SharpDX;
+
+namespace BabylonExport.Core
+{
+    internal abstract class Line
+    {
+        string[] tokens;
+
+        public bool IsValid
+        {
+            get
+            {
+                return Tokens.Length > 0 && !string.IsNullOrEmpty(Tokens[0]);
+            }
+        }
+
+        public bool IsComment
+        {
+            get
+            {
+                return Tokens[0].StartsWith("#");
+            }
+        }
+
+        public int Index { get; internal set; }
+
+        public abstract string BlockSperator { get; }
+
+        public string[] Tokens
+        {
+            get { return tokens; }
+        }
+
+        internal void SetLine(string line)
+        {
+            char[] blank = { ' ', '\t' };
+            tokens = line.Split(blank, StringSplitOptions.RemoveEmptyEntries);
+        }
+
+        public float ToFloat()
+        {
+            return float.Parse(Tokens[1], CultureInfo.InvariantCulture);
+        }
+
+        public Vector2 ToVector2()
+        {
+            return new Vector2(float.Parse(Tokens[1], CultureInfo.InvariantCulture),
+                               float.Parse(Tokens[2], CultureInfo.InvariantCulture));
+        }
+
+        public Vector3 ToVector3()
+        {
+            return new Vector3(float.Parse(Tokens[1], CultureInfo.InvariantCulture),
+                               float.Parse(Tokens[2], CultureInfo.InvariantCulture),
+                               float.Parse(Tokens[3], CultureInfo.InvariantCulture));
+        }
+
+
+        public Color3 ToColor()
+        {
+            return new Color3(float.Parse(Tokens[1], CultureInfo.InvariantCulture),
+                             float.Parse(Tokens[2], CultureInfo.InvariantCulture),
+                             float.Parse(Tokens[3], CultureInfo.InvariantCulture));
+        }
+
+        public override string ToString()
+        {
+            return string.Join(" ", Tokens);
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/MtlHeader.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/MtlHeader.cs
new file mode 100644
index 0000000..2916825
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/MtlHeader.cs	
@@ -0,0 +1,25 @@
+﻿namespace BabylonExport.Core
+{
+    internal enum MtlHeader
+    {
+        None,
+        Comment,
+        Material,
+        DiffuseColor,
+        DiffuseTexture,
+        SpecularColor,
+        SpecularTexture,
+        SpecularPower,
+        EmissiveColor,
+        Alpha,
+        IlluminationModel,
+        BumpTexture,
+        ReflectionTexture,
+        TransparencyTexture,
+        AmbientTexture,
+        AmbientColor,
+        RefractionIndex,
+        Transparency,
+        TransmissionFiter,
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/MtlLine.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/MtlLine.cs
new file mode 100644
index 0000000..b49b0e2
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/MtlLine.cs	
@@ -0,0 +1,60 @@
+﻿using System;
+
+namespace BabylonExport.Core
+{
+    internal class MtlLine : Line
+    {
+        public override string BlockSperator { get { return "newmtl"; }}
+
+        public MtlHeader Header
+        {
+            get
+            {
+                if (IsComment)
+                    return MtlHeader.Comment;
+
+                string lineType = Tokens[0].ToLower();
+                switch (lineType)
+                {
+                    case "newmtl":
+                        return MtlHeader.Material;
+                    case "kd":
+                        return MtlHeader.DiffuseColor;
+                    case "map_kd":
+                        return MtlHeader.DiffuseTexture;
+                    case "ks":
+                        return MtlHeader.SpecularColor;
+                    case "ns":
+                        return MtlHeader.SpecularPower;
+                    case "map_ks":
+                        return MtlHeader.SpecularTexture;
+                    case "ke":
+                        return MtlHeader.EmissiveColor;
+                    case "d":
+                        return MtlHeader.Alpha;
+                    case "illum":
+                        return MtlHeader.IlluminationModel;
+                    case "ni":
+                        return MtlHeader.RefractionIndex;
+                    case "tr":
+                        return MtlHeader.Transparency;
+                    case "map_d":
+                        return MtlHeader.TransparencyTexture;
+                    case "tf":
+                        return MtlHeader.TransmissionFiter;
+                    case "ka":
+                        return MtlHeader.AmbientColor;
+                    case "map_ka":
+                        return MtlHeader.AmbientTexture;
+                    case "bump":
+                    case "map_bump":
+                        return MtlHeader.BumpTexture;
+                    case "map_refl":
+                        return MtlHeader.ReflectionTexture;
+                }
+
+                throw new Exception(string.Format("Unsupported line type [{0}] at line {1}", lineType, Index));
+            }
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/ObjExporter.Material.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/ObjExporter.Material.cs
new file mode 100644
index 0000000..307ce22
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/ObjExporter.Material.cs	
@@ -0,0 +1,64 @@
+﻿using System.Collections.Generic;
+using System.IO;
+using BabylonExport;
+using SharpDX;
+
+namespace BabylonExport.Core.Exporters
+{
+    public partial class ObjExporter
+    {
+        readonly List<StandardMaterial> materials = new List<StandardMaterial>();
+
+        void ImportMaterialLibraries(ObjLine materialLine, BabylonScene scene)
+        {
+            for (int i = 1; i < materialLine.Tokens.Length; i++)
+            {
+                string fileName = materialLine.Tokens[i];
+
+                var mtlDocument = new Document<MtlLine>(File.ReadAllText(fileName));
+
+                StandardMaterial currentMaterial = null;
+
+                foreach (var lines in mtlDocument.Blocks)
+                {
+                    foreach (MtlLine line in lines)
+                    {
+
+                        switch (line.Header)
+                        {
+                            case MtlHeader.Material:
+                                currentMaterial = new StandardMaterial(line.Tokens[1]);
+                                currentMaterial.BackFaceCulling = false;
+                                materials.Add(currentMaterial);
+                                break;
+                            case MtlHeader.DiffuseColor:
+                                currentMaterial.Diffuse = line.ToColor();
+                                break;
+                            case MtlHeader.DiffuseTexture:
+                                currentMaterial.Diffuse = new Color3(1, 1, 1);
+                                currentMaterial.DiffuseTexture = line.Tokens[1].Replace("//", @"\");
+                                break;
+                            case MtlHeader.Alpha:
+                                currentMaterial.Alpha = line.ToFloat();
+                                break;
+                            case MtlHeader.EmissiveColor:
+                                currentMaterial.Emissive = line.ToColor();
+                                break;
+                            case MtlHeader.SpecularColor:
+                                currentMaterial.Specular = line.ToColor();
+                                break;
+                            case MtlHeader.SpecularPower:
+                                currentMaterial.SpecularPower = line.ToFloat();
+                                break;
+                        }
+                    }
+                }
+            }
+
+            foreach (var material in materials)
+            {
+                material.CreateBabylonMaterial(scene);
+            }
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/ObjExporter.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/ObjExporter.cs
new file mode 100644
index 0000000..16ab743
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/ObjExporter.cs	
@@ -0,0 +1,254 @@
+﻿using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System;
+using System.Linq;
+using System.Runtime.Serialization.Json;
+using SharpDX;
+using BabylonExport;
+
+namespace BabylonExport.Core.Exporters
+{
+    public partial class ObjExporter : IExporter
+    {
+        readonly List<Vector3> positions = new List<Vector3>();
+        readonly List<Vector3> normals = new List<Vector3>();
+        readonly List<Vector2> textureCoordinates = new List<Vector2>();
+        readonly List<PositionNormalTextured> stagingVertices = new List<PositionNormalTextured>();
+        readonly List<int> stagingIndices = new List<int>();
+        readonly Dictionary<string, int> registeredVertices = new Dictionary<string, int>();
+        readonly Dictionary<StandardMaterial, Mesh<PositionNormalTextured>> meshParts = new Dictionary<StandardMaterial, Mesh<PositionNormalTextured>>();
+
+        int positionsIndexOffset = 1;
+        int normalsIndexOffset = 1;
+        int textureCoordinatesIndexOffset = 1;
+
+        StandardMaterial defaultMaterial;
+
+        public event Action<int> OnImportProgressChanged;
+
+        public string SupportedExtensions
+        {
+            get
+            {
+                return ".obj";
+            }
+        }
+
+        public void GenerateBabylonFile(string file, string outputFile, bool skinned)
+        {
+            var text = File.ReadAllText(file);
+
+            Environment.CurrentDirectory = Path.GetDirectoryName(file);
+
+            // Scene
+            var scene = new BabylonScene(Path.GetDirectoryName(outputFile));
+
+            // Loading
+            var objDocument = new Document<ObjLine>(text);
+
+            materials.Clear();
+
+            int currentProgression = 0;
+
+            int total = objDocument.Blocks.Sum(lines => lines.Count);
+
+            string currentName = "";
+            StandardMaterial currentMaterial = null;
+
+            foreach (var lines in objDocument.Blocks)
+            {
+                if (lines[0].Tokens[0] == lines[0].BlockSperator)
+                {
+                    AppendNewPart(currentName, currentMaterial);
+                }
+                foreach (ObjLine line in lines)
+                {
+                    currentProgression++;
+                    ReportProgressChanged((currentProgression * 100) / total);
+
+                    switch (line.Header)
+                    {
+                        case ObjHeader.Vertices:
+                            positions.Add(line.ToVector3());
+                            break;
+                        case ObjHeader.TextureCoordinates:
+                            Vector2 tv = line.ToVector2();
+                            textureCoordinates.Add(tv);
+                            break;
+                        case ObjHeader.Normals:
+                            normals.Add(line.ToVector3());
+                            break;
+                        case ObjHeader.Group:
+                            currentName = line.Tokens[1];
+                            break;
+                        case ObjHeader.Faces:
+                            AppendFace(line);
+                            break;
+                        case ObjHeader.MaterialLibrary:
+                            ImportMaterialLibraries(line, scene);
+                            break;
+                        case ObjHeader.Material:
+                            string materialName = line.Tokens[1];
+                            currentMaterial = materials.FirstOrDefault(e => e.Name == materialName);
+                            break;
+                    }
+                }
+            }
+
+            if (positions.Count > 0)
+            {
+                AppendNewPart(currentName, currentMaterial);
+            }
+
+            if (meshParts.Count > 1)
+            {
+                var proxyID = ProxyMesh.CreateBabylonMesh(currentName, scene);
+                foreach (Mesh<PositionNormalTextured> part in meshParts.Values)
+                {
+                    part.CreateBabylonMesh(scene, proxyID);
+                }
+            }
+            else
+            {
+                meshParts.Values.First().CreateBabylonMesh(scene);
+            }
+
+            // Output
+            scene.Prepare();
+            using (var outputStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
+            {
+                var ser = new DataContractJsonSerializer(typeof (BabylonScene));
+                ser.WriteObject(outputStream, scene);
+            }
+        }
+
+        void ReportProgressChanged(int progress)
+        {
+            if (OnImportProgressChanged != null)
+            {
+                OnImportProgressChanged(progress);
+            }
+        }
+
+        void AppendFace(ObjLine line)
+        {
+            // Line
+            if (line.Tokens.Length == 3)
+            {
+                AppendIndex(1, line);
+                AppendIndex(2, line);
+                AppendIndex(2, line);
+
+                return;
+            }
+
+            // Triangle
+            if (line.Tokens.Length == 4)
+            {
+                for (int index = 1; index <= 3; index++)
+                {
+                    AppendIndex(index, line);
+                }
+
+                return;
+            }
+
+            // Quad
+            if (line.Tokens.Length == 5)
+            {
+                for (int index = 1; index <= 3; index++)
+                {
+                    AppendIndex(index, line);
+                }
+
+                AppendIndex(1, line);
+                AppendIndex(3, line);
+                AppendIndex(4, line);
+            }
+        }
+
+        void AppendIndex(int index, ObjLine line)
+        {
+            string[] indices = line.Tokens[index].Split('/');
+
+            // Required: Position
+            int positionIndex = int.Parse(indices[0], CultureInfo.InvariantCulture) - positionsIndexOffset;
+            int texCoordIndex = -1;
+            int normalIndex = -1;
+
+            // Optional: Texture coordinate
+            if (indices.Length > 1 && indices[1].Equals(string.Empty) == false)
+            {
+                texCoordIndex = int.Parse(indices[1]) - textureCoordinatesIndexOffset;
+            }
+
+            // Optional: Normal
+            if (indices.Length > 2 && indices[2].Equals(string.Empty) == false)
+            {
+                normalIndex = int.Parse(indices[2]) - normalsIndexOffset;
+            }
+
+            // Build vertex
+            var vertex = new PositionNormalTextured { Position = positions[positionIndex] };
+
+            if (texCoordIndex >= 0)
+                vertex.TextureCoordinates = textureCoordinates[texCoordIndex];
+
+            if (normalIndex >= 0)
+                vertex.Normal = normals[normalIndex];
+
+            // check if the vertex does not already exists
+            string hash = vertex.ToString();
+            int vertexIndex;
+
+            if (!registeredVertices.TryGetValue(hash, out vertexIndex))
+            {
+                stagingVertices.Add(vertex);
+                vertexIndex = stagingVertices.Count - 1;
+                registeredVertices.Add(hash, vertexIndex);
+            }
+
+            stagingIndices.Add(vertexIndex);
+        }
+
+        void AppendNewPart(string name, StandardMaterial currentMaterial)
+        {
+            if (stagingVertices.Count == 0)
+                return;
+
+            if (currentMaterial == null)
+            {
+                if (defaultMaterial == null)
+                {
+                    defaultMaterial = new StandardMaterial("empty");
+                }
+
+                currentMaterial = defaultMaterial;
+            }
+
+            Mesh<PositionNormalTextured> part;
+
+            if (!meshParts.TryGetValue(currentMaterial, out part))
+            {
+                part = new Mesh<PositionNormalTextured>(currentMaterial == defaultMaterial ? null : currentMaterial);
+                meshParts.Add(currentMaterial, part);
+            }
+
+            part.AddPart(name, stagingVertices, stagingIndices);
+
+            positionsIndexOffset += positions.Count;
+            positions.Clear();
+
+            normalsIndexOffset += normals.Count;
+            normals.Clear();
+
+            textureCoordinatesIndexOffset += textureCoordinates.Count;
+            textureCoordinates.Clear();
+
+            stagingVertices.Clear();
+            stagingIndices.Clear();
+            registeredVertices.Clear();
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/ObjHeader.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/ObjHeader.cs
new file mode 100644
index 0000000..87645e6
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/ObjHeader.cs	
@@ -0,0 +1,18 @@
+﻿namespace BabylonExport.Core
+{
+    internal enum ObjHeader
+    {
+        None,
+        Comment,
+        Object,
+        Vertices,
+        TextureCoordinates,
+        Normals,
+        Group,
+        SmoothingGroup,
+        Line,
+        Faces,
+        MaterialLibrary,
+        Material,
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/ObjLine.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/ObjLine.cs
new file mode 100644
index 0000000..f583d70
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/OBJ/ObjLine.cs	
@@ -0,0 +1,44 @@
+﻿using System;
+
+namespace BabylonExport.Core
+{
+    internal class ObjLine : Line
+    {
+        public override string BlockSperator { get { return "v"; } }
+        public ObjHeader Header
+        {
+            get
+            {
+                if (IsComment)
+                    return ObjHeader.Comment;
+
+                string lineType = Tokens[0].ToLower();
+                switch (lineType)
+                {
+                    case "o":
+                        return ObjHeader.Object;
+                    case "v":
+                        return ObjHeader.Vertices;
+                    case "vt":
+                        return ObjHeader.TextureCoordinates;
+                    case "vn":
+                        return ObjHeader.Normals;
+                    case "g":
+                        return ObjHeader.Group;
+                    case "s":
+                        return ObjHeader.None;
+                    case "l":
+                        return ObjHeader.Line;
+                    case "f":
+                        return ObjHeader.Faces;
+                    case "mtllib":
+                        return ObjHeader.MaterialLibrary;
+                    case "usemtl":
+                        return ObjHeader.Material;
+                }
+
+                throw new Exception(string.Format("Unsupported line type [{0}] at line {1}", lineType, Index));
+            }
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/DAE/ColladaXna b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/DAE/ColladaXna
new file mode 160000
index 0000000..fc8c36d
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/DAE/ColladaXna	
@@ -0,0 +1 @@
+Subproject commit fc8c36d10129a9ef47cc294117f00be0203a4605
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/DAE/DAEExporter.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/DAE/DAEExporter.cs
new file mode 100644
index 0000000..3122c11
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/DAE/DAEExporter.cs	
@@ -0,0 +1,28 @@
+﻿using System.Collections.Generic;
+using BabylonExport.Core.Exporters.XNA;
+
+namespace BabylonExport.Core.Exporters.DAE
+{
+    public class DAEExporter : XNAExporter
+    {
+        public override string SupportedExtensions
+        {
+            get { return ".dae"; }
+        }
+
+        public override string Importer
+        {
+            get { return "ColladaStdModelImporter"; }
+        }
+
+        static readonly string[] extraPipelineAssemblies =
+        {
+            "ColladaXnaImporter",
+        };
+
+        public override IEnumerable<string> ExtraPipelineAssemblies
+        {
+            get { return extraPipelineAssemblies; }
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/FBX/FBXExporter.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/FBX/FBXExporter.cs
new file mode 100644
index 0000000..13842a8
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/FBX/FBXExporter.cs	
@@ -0,0 +1,28 @@
+﻿using System.Collections.Generic;
+using BabylonExport.Core.Exporters.XNA;
+
+namespace BabylonExport.Core.Exporters.FBX
+{
+    public class FBXExporter : XNAExporter
+    {
+        public override string SupportedExtensions
+        {
+            get { return ".fbx"; }
+        }
+
+        public override string Importer
+        {
+            get { return null; } // use default one
+        }
+
+        static readonly string[] extraPipelineAssemblies =
+        {
+            "Microsoft.Xna.Framework.Content.Pipeline.FBXImporter, Version=4.0.0.0, PublicKeyToken=842cf8be1de50553",
+        };
+
+        public override IEnumerable<string> ExtraPipelineAssemblies 
+        {
+            get { return extraPipelineAssemblies; } 
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/ContentBuilder.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/ContentBuilder.cs
new file mode 100644
index 0000000..d679053
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/ContentBuilder.cs	
@@ -0,0 +1,200 @@
+using System;
+using System.IO;
+using System.Diagnostics;
+using System.Collections.Generic;
+using Microsoft.Build.Construction;
+using Microsoft.Build.Evaluation;
+using Microsoft.Build.Execution;
+using Microsoft.Build.Framework;
+using System.Windows.Forms;
+
+namespace BabylonExport.Core.Exporters.XNA
+{
+    class ContentBuilder : IDisposable
+    {
+        const string xnaVersion = ", Version=4.0.0.0, PublicKeyToken=842cf8be1de50553";
+
+        static readonly string[] pipelineAssemblies =
+        {
+            "Microsoft.Xna.Framework.Content.Pipeline.XImporter" + xnaVersion,
+            "Microsoft.Xna.Framework.Content.Pipeline.TextureImporter" + xnaVersion,
+            "Microsoft.Xna.Framework.Content.Pipeline.EffectImporter" + xnaVersion,
+            "SkinnedModelPipeline"
+        };
+
+        Project buildProject;
+        ProjectRootElement projectRootElement;
+        BuildParameters buildParameters;
+        readonly List<ProjectItem> projectItems = new List<ProjectItem>();
+        ErrorLogger errorLogger;
+
+        string buildDirectory;
+        string processDirectory;
+        string baseDirectory;
+
+        static int directorySalt;
+
+        public string OutputDirectory
+        {
+            get { return Path.Combine(buildDirectory, "bin"); }
+        }
+
+        public ContentBuilder(IEnumerable<string> extraPipelineAssemblies = null)
+        {
+            CreateTempDirectory();
+            CreateBuildProject(extraPipelineAssemblies);
+        }
+
+        public void Dispose()
+        {
+            DeleteTempDirectory();
+        }
+
+        void CreateBuildProject(IEnumerable<string> extraPipelineAssemblies = null)
+        {
+            string projectPath = Path.Combine(buildDirectory, "content.contentproj");
+            string outputPath = Path.Combine(buildDirectory, "bin");
+
+            // Create the build project.
+            projectRootElement = ProjectRootElement.Create(projectPath);
+
+            // Include the standard targets file that defines how to build XNA Framework content.
+            projectRootElement.AddImport(Application.StartupPath + "\\Exporters\\ThroughXNA\\XNA\\XNA Game Studio\\" +
+                                         "v4.0\\Microsoft.Xna.GameStudio.ContentPipeline.targets");
+
+            buildProject = new Project(projectRootElement);
+
+            buildProject.SetProperty("XnaPlatform", "Windows");
+            buildProject.SetProperty("XnaProfile", "Reach");
+            buildProject.SetProperty("XnaFrameworkVersion", "v4.0");
+            buildProject.SetProperty("Configuration", "Release");
+            buildProject.SetProperty("OutputPath", outputPath);
+            buildProject.SetProperty("ContentRootDirectory", ".");
+            buildProject.SetProperty("ReferencePath", Application.StartupPath);
+
+            // Register any custom importers or processors.
+            foreach (string pipelineAssembly in pipelineAssemblies)
+            {
+                buildProject.AddItem("Reference", pipelineAssembly);
+            }
+            if (extraPipelineAssemblies != null)
+            {
+                foreach (string pipelineAssembly in extraPipelineAssemblies)
+                {
+                    buildProject.AddItem("Reference", pipelineAssembly);
+                }
+            }
+
+            // Hook up our custom error logger.
+            errorLogger = new ErrorLogger();
+
+            buildParameters = new BuildParameters(ProjectCollection.GlobalProjectCollection)
+                                  {Loggers = new ILogger[] {errorLogger}};
+        }
+
+        public void Add(string filename, string name, string importer, string processor)
+        {
+            ProjectItem item = buildProject.AddItem("Compile", filename)[0];
+
+            item.SetMetadataValue("Link", Path.GetFileName(filename));
+            item.SetMetadataValue("Name", name);
+
+            if (!string.IsNullOrEmpty(importer))
+                item.SetMetadataValue("Importer", importer);
+
+            if (!string.IsNullOrEmpty(processor))
+                item.SetMetadataValue("Processor", processor);
+
+            projectItems.Add(item);
+        }
+
+        public void Clear()
+        {
+            buildProject.RemoveItems(projectItems);
+
+            projectItems.Clear();
+        }
+
+        public string Build()
+        {
+            // Clear any previous errors.
+            errorLogger.Errors.Clear();
+
+            // Create and submit a new asynchronous build request.
+            BuildManager.DefaultBuildManager.BeginBuild(buildParameters);
+            
+            var request = new BuildRequestData(buildProject.CreateProjectInstance(), new string[0]);
+            BuildSubmission submission = BuildManager.DefaultBuildManager.PendBuildRequest(request);
+
+            submission.ExecuteAsync(null, null);
+
+            // Wait for the build to finish.
+            submission.WaitHandle.WaitOne();
+
+            BuildManager.DefaultBuildManager.EndBuild();
+
+            // If the build failed, return an error string.
+            if (submission.BuildResult.OverallResult == BuildResultCode.Failure)
+            {
+                return string.Join("\n", errorLogger.Errors.ToArray());
+            }
+
+            return null;
+        }
+
+        void CreateTempDirectory()
+        {
+            baseDirectory = Path.Combine(Path.GetTempPath(), GetType().FullName);
+            int processId = Process.GetCurrentProcess().Id;
+
+            processDirectory = Path.Combine(baseDirectory, processId.ToString());
+            directorySalt++;
+
+            buildDirectory = Path.Combine(processDirectory, directorySalt.ToString());
+
+            Directory.CreateDirectory(buildDirectory);
+
+            PurgeStaleTempDirectories();
+        }
+
+        void DeleteTempDirectory()
+        {
+            Directory.Delete(buildDirectory, true);
+
+            if (Directory.GetDirectories(processDirectory).Length == 0)
+            {
+                Directory.Delete(processDirectory);
+
+                if (Directory.GetDirectories(baseDirectory).Length == 0)
+                {
+                    Directory.Delete(baseDirectory);
+                }
+            }
+        }
+
+
+        void PurgeStaleTempDirectories()
+        {
+            // Check all subdirectories of our base location.
+            foreach (string directory in Directory.GetDirectories(baseDirectory))
+            {
+                // The subdirectory name is the ID of the process which created it.
+                int processId;
+
+                if (int.TryParse(Path.GetFileName(directory), out processId))
+                {
+                    try
+                    {
+                        // Is the creator process still running?
+                        Process.GetProcessById(processId);
+                    }
+                    catch (ArgumentException)
+                    {
+                        // If the process is gone, we can delete its temp directory.
+                        Directory.Delete(directory, true);
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/ErrorLogger.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/ErrorLogger.cs
new file mode 100644
index 0000000..1051727
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/ErrorLogger.cs	
@@ -0,0 +1,49 @@
+using System.Collections.Generic;
+using Microsoft.Build.Framework;
+
+namespace BabylonExport.Core.Exporters.XNA
+{
+    class ErrorLogger : ILogger
+    {
+        public void Initialize(IEventSource eventSource)
+        {
+            if (eventSource != null)
+            {
+                eventSource.ErrorRaised += ErrorRaised;
+            }
+        }
+
+        public void Shutdown()
+        {
+        }
+
+        void ErrorRaised(object sender, BuildErrorEventArgs e)
+        {
+            errors.Add(e.Message);
+        }
+
+        public List<string> Errors
+        {
+            get { return errors; }
+        }
+
+        List<string> errors = new List<string>();
+
+
+        string ILogger.Parameters
+        {
+            get { return parameters; }
+            set { parameters = value; }
+        }
+
+        string parameters;
+
+        LoggerVerbosity ILogger.Verbosity
+        {
+            get { return verbosity; }
+            set { verbosity = value; }
+        }
+
+        LoggerVerbosity verbosity = LoggerVerbosity.Detailed;
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/GraphicsDeviceService.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/GraphicsDeviceService.cs
new file mode 100644
index 0000000..3d1df9d
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/GraphicsDeviceService.cs	
@@ -0,0 +1,93 @@
+using System;
+using System.Threading;
+using Microsoft.Xna.Framework.Graphics;
+
+#pragma warning disable 67
+
+namespace BabylonExport.Core.Exporters.XNA
+{
+    public class GraphicsDeviceService : IGraphicsDeviceService
+    {
+        static int referenceCount;
+
+        public static GraphicsDeviceService SingletonInstance
+        {
+            get;
+            private set;
+        }
+
+        GraphicsDeviceService(IntPtr windowHandle, int width, int height)
+        {
+            parameters = new PresentationParameters();
+
+            parameters.BackBufferWidth = Math.Max(width, 1);
+            parameters.BackBufferHeight = Math.Max(height, 1);
+            parameters.BackBufferFormat = SurfaceFormat.Color;
+            parameters.DepthStencilFormat = DepthFormat.Depth24;
+            parameters.DeviceWindowHandle = windowHandle;
+            parameters.PresentationInterval = PresentInterval.Immediate;
+            parameters.IsFullScreen = false;
+
+            GraphicsAdapter.UseReferenceDevice = true;
+
+            graphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter,
+                                                GraphicsProfile.Reach,
+                                                parameters);
+        }
+
+        public static GraphicsDeviceService AddRef(IntPtr windowHandle, int width, int height)
+        {
+            if (Interlocked.Increment(ref referenceCount) == 1)
+            {
+                SingletonInstance = new GraphicsDeviceService(windowHandle, width, height);
+            }
+
+            return SingletonInstance;
+        }
+
+        public void Release(bool disposing)
+        {
+            if (Interlocked.Decrement(ref referenceCount) == 0)
+            {
+                if (disposing)
+                {
+                    if (DeviceDisposing != null)
+                        DeviceDisposing(this, EventArgs.Empty);
+
+                    graphicsDevice.Dispose();
+                }
+
+                graphicsDevice = null;
+            }
+        }
+
+        public void ResetDevice(int width, int height)
+        {
+            if (DeviceResetting != null)
+                DeviceResetting(this, EventArgs.Empty);
+
+            parameters.BackBufferWidth = Math.Max(parameters.BackBufferWidth, width);
+            parameters.BackBufferHeight = Math.Max(parameters.BackBufferHeight, height);
+
+            graphicsDevice.Reset(parameters);
+
+            if (DeviceReset != null)
+                DeviceReset(this, EventArgs.Empty);
+        }
+
+        
+        public GraphicsDevice GraphicsDevice
+        {
+            get { return graphicsDevice; }
+        }
+
+        GraphicsDevice graphicsDevice;
+
+        PresentationParameters parameters;
+
+        public event EventHandler<EventArgs> DeviceCreated;
+        public event EventHandler<EventArgs> DeviceDisposing;
+        public event EventHandler<EventArgs> DeviceReset;
+        public event EventHandler<EventArgs> DeviceResetting;
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/ServiceContainer.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/ServiceContainer.cs
new file mode 100644
index 0000000..f895c21
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/ServiceContainer.cs	
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+
+namespace BabylonExport.Core.Exporters.XNA
+{
+    public class ServiceContainer : IServiceProvider
+    {
+        Dictionary<Type, object> services = new Dictionary<Type, object>();
+
+        /// <summary>
+        /// Adds a new service to the collection.
+        /// </summary>
+        public void AddService<T>(T service)
+        {
+            services.Add(typeof(T), service);
+        }
+
+        /// <summary>
+        /// Looks up the specified service.
+        /// </summary>
+        public object GetService(Type serviceType)
+        {
+            object service;
+
+            services.TryGetValue(serviceType, out service);
+
+            return service;
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/Microsoft.Xna.GameStudio.ContentPipelineExtensions.targets b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/Microsoft.Xna.GameStudio.ContentPipelineExtensions.targets
new file mode 100644
index 0000000..a67255e
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/Microsoft.Xna.GameStudio.ContentPipelineExtensions.targets	
@@ -0,0 +1,28 @@
+﻿<!--
+***********************************************************************************************
+Microsoft.Xna.GameStudio.ContentPipelineExtensions.targets
+
+WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
+          created a backup copy.  Incorrect changes to this file will make it
+          impossible to load or build your projects from the command-line or the IDE.
+
+This file imports the version- and platform-specific targets for the project importing
+this file. This file also defines targets to produce an error if the specified targets
+file does not exist, but the project is built anyway (command-line or IDE build).
+
+Copyright (C) Microsoft Corporation. All rights reserved.
+***********************************************************************************************
+-->
+
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+  <PropertyGroup>
+    <_XnaVersionSpecificAvailablePlatforms>$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\$(XnaFrameworkVersion)\Microsoft.Xna.GameStudio.AvailablePlatforms.targets</_XnaVersionSpecificAvailablePlatforms>
+  </PropertyGroup>
+
+  <!--
+    Import the appropriate targets file, if it exists.
+  -->
+  <Import Condition="Exists('$(_XnaVersionSpecificAvailablePlatforms)')" Project="$(_XnaVersionSpecificAvailablePlatforms)" />
+
+</Project>
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/Microsoft.Xna.GameStudio.targets b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/Microsoft.Xna.GameStudio.targets
new file mode 100644
index 0000000..55e546b
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/Microsoft.Xna.GameStudio.targets	
@@ -0,0 +1,42 @@
+﻿<!--
+***********************************************************************************************
+Microsoft.Xna.GameStudio.targets
+
+WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
+          created a backup copy.  Incorrect changes to this file will make it
+          impossible to load or build your projects from the command-line or the IDE.
+
+This file imports the version- and platform-specific targets for the project importing
+this file. This file also defines targets to produce an error if the specified targets
+file does not exist, but the project is built anyway (command-line or IDE build).
+
+Copyright (C) Microsoft Corporation. All rights reserved.
+***********************************************************************************************
+-->
+
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+  <PropertyGroup>
+    <_XnaVersionSpecificImportPath>$(XnaFrameworkVersion)\</_XnaVersionSpecificImportPath>
+    <_XnaPlatformSpecificTargetsFile>Microsoft.Xna.GameStudio.$(XnaPlatform).targets</_XnaPlatformSpecificTargetsFile>
+    <_XnaPlatformSpecificTargetsPath>$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\$(_XnaVersionSpecificImportPath)$(_XnaPlatformSpecificTargetsFile)</_XnaPlatformSpecificTargetsPath>
+  </PropertyGroup>
+
+  <!--
+    If the appropriate targets file exists, it will be imported and will override
+    this target definition. If it does not exist, then this target will produce an
+    error for the user if the user attempts to build.
+  -->
+  <PropertyGroup>
+    <PrepareForBuildDependsOn Condition="!Exists('$(_XnaPlatformSpecificTargetsPath)')">UnsupportedXnaProject;$(PrepareForBuildDependsOn)</PrepareForBuildDependsOn>
+  </PropertyGroup>
+  <Target Name="UnsupportedXnaProject">
+    <Error Text="Your installation of XNA Game Studio does not support this project (XNA Platform = '$(XnaPlatform)', XNA Framework Version = '$(XnaFrameworkVersion)')." />
+  </Target>
+
+  <!--
+    Import the appropriate targets file, if it exists.
+  -->
+  <Import Condition="Exists('$(_XnaPlatformSpecificTargetsPath)')" Project="$(_XnaPlatformSpecificTargetsPath)" />
+
+</Project>
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll
new file mode 100644
index 0000000..ac8b20f
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.AvailablePlatforms.targets b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.AvailablePlatforms.targets
new file mode 100644
index 0000000..7343e0c
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.AvailablePlatforms.targets	
@@ -0,0 +1,24 @@
+﻿<!--
+***********************************************************************************************
+Microsoft.Xna.GameStudio.AvailablePlatforms.targets
+
+WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
+          created a backup copy.  Incorrect changes to this file will make it
+          impossible to load or build your projects from the command-line or the IDE.
+
+This file defines the version-specific AvailablePlatforms property for Content Pipeline
+Extension Library (CPEL) projects. This definition makes the specified platforms available
+in the IDE's Configuration Manager. That way, upgraded CPEL projects can add new platform
+configurations if the newer version supports new platforms.
+
+Copyright (C) Microsoft Corporation. All rights reserved.
+***********************************************************************************************
+-->
+
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+  <PropertyGroup>
+    <AvailablePlatforms>x86,Xbox 360,Windows Phone</AvailablePlatforms>
+  </PropertyGroup>
+
+</Project>
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Common.targets b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Common.targets
new file mode 100644
index 0000000..8081e49
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Common.targets	
@@ -0,0 +1,286 @@
+﻿<!--
+***********************************************************************************************
+Microsoft.Xna.GameStudio.Common.targets
+
+WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
+          created a backup copy.  Incorrect changes to this file will make it
+          impossible to load or build your projects from the command-line or the IDE.
+
+This file defines the steps in the standard build process specific for C# .NET projects.
+For example, it contains the step that actually calls the C# compiler.  The remainder
+of the build process is defined in Microsoft.Common.targets, which is imported by 
+this file.
+
+Copyright (C) Microsoft Corporation. All rights reserved.
+***********************************************************************************************
+-->
+
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+  <!-- These tasks are specific to the build process defined in this file, and are not considered general-purpose build tasks. -->
+  <UsingTask TaskName="XnaClubPackageTask" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\v4.0\Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll"/>
+
+  <!--
+    If the appropriate targets file exists, it will be imported and will override
+    this target definition. If it does not exist, then this target will produce an
+    error for the user if the user attempts to build.
+  -->
+  <PropertyGroup>
+    <PrepareForBuildDependsOn Condition="'$(_XnaPlatformSpecificTargetsPath)' == ''">XnaProjectFileNeedsUpgrade;$(PrepareForBuildDependsOn)</PrepareForBuildDependsOn>
+  </PropertyGroup>
+  <Target Name="XnaProjectFileNeedsUpgrade">
+    <Error Text="The project file '$(ProjectFileName)' appears to have been created with XNA Game Studio 3.0 CTP. For instructions on how to upgrade this project to work with the current version, copy and paste this link into your browser: http://go.microsoft.com/fwlink/?LinkId=121512." />
+  </Target>
+
+  <!-- Have our package build run after the user builds the project. -->
+  <PropertyGroup>
+    <BuildDependsOn>
+      $(BuildDependsOn);
+      XNAPackageBuild;
+    </BuildDependsOn>
+  </PropertyGroup>
+
+  <!--
+    Windows platform supports C# 4.0, while non-Windows platforms currently support up to C# 3.0.
+    For Windows platform, do not alter the setting.
+    For non-Windows platforms, set it to C# 3.0 if the user has not explicitly set it to something else.
+  -->
+  <PropertyGroup Condition=" '$(XnaPlatform)' != 'Windows' ">
+    <LangVersion Condition=" '$(LangVersion)' == '' ">3</LangVersion>
+  </PropertyGroup>
+
+  <!--
+        We will not look in the TargetFrameworkDirectory for Xbox 360, nor in the GAC.
+    -->
+  <PropertyGroup>
+    <!--
+        The SearchPaths property is set to find assemblies in the following order:
+
+            (1) Files from current project - indicated by {CandidateAssemblyFiles}
+            (2) $(ReferencePath) - the reference path property, which comes from the .USER file.
+            (3) The hintpath from the referenced item itself, indicated by {HintPathFromItem}.
+            (4) The directory of MSBuild's "target" runtime from GetFrameworkPath.
+                The "target" runtime folder is the folder of the runtime that MSBuild is a part of.
+            (5) Registered assembly folders, indicated by {Registry:*,*,*}
+            (6) Legacy registered assembly folders, indicated by {AssemblyFolders}
+            (7) Look in the application's output folder (like bin\debug)
+            (8) Resolve to the GAC.
+            (9) Treat the reference's Include as if it were a real file name.
+        -->
+    <AssemblySearchPaths Condition=" '$(XnaPlatform)' != 'Windows' ">
+      {CandidateAssemblyFiles};
+      $(ReferencePath);
+      {HintPathFromItem};
+      ;
+      {Registry:$(FrameworkRegistryBase),$(XnaFrameworkVersion),$(AssemblyFoldersSuffix)};
+      ;
+      ;
+      {RawFileName};
+      $(OutputPath)
+    </AssemblySearchPaths>
+  </PropertyGroup>
+
+  <!--
+    In VS 2008, a new feature was introduced to speed up the "F5" scenario when
+    no changes have occurred. It does this by skipping the build entirely if the
+    IDE believes there are no changes. This is fast, but unreliable because it
+    does not check all the same files as msbuild does. In XNA game projects, for
+    example, the IDE does not check if any content needs to be rebuilt. As a
+    result, F5 is way faster, but you may start debugging a project that is out
+    of date. To disable the new feature, we set DisableFastUpToDateCheck to true.
+  -->
+  <PropertyGroup>
+    <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
+  </PropertyGroup>
+
+  <!--
+    The TargetFrameworkAttribute is not available in the Compact Framework.
+  -->
+  <PropertyGroup>
+    <GenerateTargetFrameworkAttribute Condition="'$(XnaPlatform)' != 'Windows'">false</GenerateTargetFrameworkAttribute>
+  </PropertyGroup>
+
+  <!--  Build the Package if the Create XNA Club Package menu was selected.  -->
+  <Target Name="XnaPackageBuild">
+
+    <XnaClubPackageTask XnaFrameworkVersion="$(XnaFrameworkVersion)" XnaPlatform="$(XnaPlatform)" ProjectPath="$(ProjectDir)" OutputPath="$(OutputPath)" AssemblyName="$(AssemblyName)" TargetExt="$(TargetExt)" ArchiveName="$(XnaArchiveName)">
+      <Output PropertyName="XnaPackageVersion" TaskParameter="XnaFrameworkVersion" />
+      <Output PropertyName="XnaPackagePlatform" TaskParameter="XnaPlatform" />
+      <Output PropertyName="XnaPackageToolPath" TaskParameter="ToolPath" />
+      <Output PropertyName="DoPackageBuild" TaskParameter="ShouldPackage" />
+      <Output PropertyName="XnaPackageThumbnail" TaskParameter="Thumbnail" />
+      <Output PropertyName="XnaPackageOutputPath" TaskParameter="OutputPath" />
+    </XnaClubPackageTask>
+
+  </Target>
+
+  <PropertyGroup>
+    <!-- Default the runtime profile to the XNA Framework version being targeted. -->
+    <XnaFrameworkRuntimeProfile Condition="'$(XnaFrameworkRuntimeProfile)'==''">$(XnaPlatform).$(XnaFrameworkVersion).$(XnaProfile)</XnaFrameworkRuntimeProfile>
+
+    <!-- Define the intermediate file into which we write the runtime profile token. -->
+    <XnaFrameworkRuntimeProfileFile Condition="'$(XnaFrameworkRuntimeProfileFile)'==''">Microsoft.Xna.Framework.RuntimeProfile.txt</XnaFrameworkRuntimeProfileFile>
+
+    <!-- Make sure our target runs before the EmbeddedResource items are processed. -->
+    <PrepareResourceNamesDependsOn>
+      EmbedXnaFrameworkRuntimeProfile;
+      $(PrepareResourceNamesDependsOn)
+    </PrepareResourceNamesDependsOn>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ToBeEmbeddedResource Include="$(IntermediateOutputPath)$(XnaFrameworkRuntimeProfileFile)">
+      <LogicalName>Microsoft.Xna.Framework.RuntimeProfile</LogicalName>
+    </ToBeEmbeddedResource>
+  </ItemGroup>
+
+  <Target Name="EmbedXnaFrameworkRuntimeProfile"
+          Condition="'$(XnaFrameworkRuntimeProfile)' != '' and '$(BuildingProject)'=='true'"
+          Inputs="$(MSBuildProjectFile)"
+          Outputs="$(IntermediateOutputPath)$(XnaFrameworkRuntimeProfileFile)" >
+
+    <CreateItem Include="$(XnaFrameworkRuntimeProfile)">
+      <Output TaskParameter="Include" ItemName="_XnaFrameworkRuntimeProfile"/>
+    </CreateItem>
+
+    <WriteLinesToFile
+      File="$(IntermediateOutputPath)$(XnaFrameworkRuntimeProfileFile)"
+      Lines="@(_XnaFrameworkRuntimeProfile)"
+      Overwrite="true"/>
+
+    <CreateItem Include="$(IntermediateOutputPath)$(XnaFrameworkRuntimeProfileFile)">
+      <Output TaskParameter="Include" ItemName="FileWrites"/>
+    </CreateItem>
+
+    <CreateItem Include="@(ToBeEmbeddedResource)">
+      <Output TaskParameter="Include" ItemName="EmbeddedResource"/>
+    </CreateItem>
+
+  </Target>
+
+
+
+  <!-- Write the cache file listing all items to be copied to the output directory. -->
+  <Target
+      Name="XnaWriteCacheFile"
+      Inputs="@(AllItemsFullPathWithTargetPath)"
+      Outputs="$(MSBuildProjectFullPath).$(Configuration).cachefile"
+      AfterTargets="GetCopyToOutputDirectoryItems">
+
+    <WriteLinesToFile File="$(MSBuildProjectFullPath).$(Configuration).cachefile"
+                      Lines="@(AllItemsFullPathWithTargetPath->'%(TargetPath)')"
+                      Overwrite="true"/>
+  </Target>
+
+
+  <!--
+    ============================================================
+                                        XNAReadDependenciesCacheFile
+
+    Reads all cache files that we output from referenced XNA projects.  
+    Cache files contain the Content files target path information, which 
+    we use to populate the manifest ItemGroup _DeploymentManifestFiles
+    ============================================================
+    -->
+
+  <PropertyGroup>
+    <GenerateManifestsDependsOn>
+      _SplitProjectReferencesByFileExistence;
+      _CopySourceItemsToOutputDirectory;
+      XNAReadDependenciesCacheFile;
+      $(GenerateManifestsDependsOn)
+    </GenerateManifestsDependsOn>
+  </PropertyGroup>
+
+  <Target
+    Name="XNAReadDependenciesCacheFile">
+
+    <CreateItem Include="%(_MSBuildProjectReferenceExistent.Identity).$(Configuration).cachefile">
+      <Output ItemName="XNADependenciesCacheFiles" TaskParameter="Include"/>
+    </CreateItem>
+
+    <ReadLinesFromFile File="%(XNADependenciesCacheFiles.Identity)"
+                       Condition="'@(XNADependenciesCacheFiles)' != ''">
+      <Output TaskParameter="Lines" ItemName="_FromBuiltDependencyContentTargetPath"/>
+    </ReadLinesFromFile>
+
+    <CreateItem Include="$(OutputPath)%(_FromBuiltDependencyContentTargetPath.Identity)"
+                AdditionalMetadata="TargetPath=%(_FromBuiltDependencyContentTargetPath.Identity);IsDataFile=false"
+                Condition="'@(_FromBuiltDependencyContentTargetPath)' != ''">
+      <Output ItemName="_DeploymentManifestFiles" TaskParameter="Include" />
+    </CreateItem>
+  </Target>
+
+  <!--
+      ============================================================
+                                          GetReferenceAssemblyPaths
+
+      Redefines the standard GetReferenceAssemblyPaths to make the original
+      target conditional on the XnaPlatform property. The original target is
+      defined below as "RealGetReferenceAssemblyPaths".
+      
+      The additional paths are specific to the desktop framework, and we do not
+      want those appended to our reference paths in non-Windows projects.
+      ============================================================
+      -->
+  <Target
+      Name="GetReferenceAssemblyPaths"
+      DependsOnTargets="RealGetReferenceAssemblyPaths">
+  </Target>
+
+  <!--
+      ============================================================
+                                          RealGetReferenceAssemblyPaths
+
+      Get the paths for the Reference Assemblies for the known versions of the
+      .NET Framework.
+
+      These paths are used by the build process in order to resolve the correct
+      assemblies from the various directories, and to support multi-targeting
+      ============================================================
+      -->
+  <Target
+      Name="RealGetReferenceAssemblyPaths"
+      DependsOnTargets="$(GetReferenceAssemblyPathsDependsOn)"
+      Condition="'$(XnaPlatform)' == 'Windows'">
+
+    <!-- if TargetFrameworkDirectory doesn't have a custom value, clear it out; that way we can get reference paths and target framework directories all in the right order -->
+    <PropertyGroup>
+      <TargetFrameworkDirectory Condition="'@(_CombinedTargetFrameworkDirectoriesItem)' == '$(TargetFrameworkDirectory)'"/>
+    </PropertyGroup>
+
+    <!-- By default if there is no root path set then the task will assume it is Program Files\Reference Assemblies\Microsoft\Framework-->
+    <GetReferenceAssemblyPaths
+        Condition="'$(TargetFrameworkMoniker)' != '' and ('$(_TargetFrameworkDirectories)' == '' or '$(_FullFrameworkReferenceAssemblyPaths)' == '')"
+        TargetFrameworkMoniker="$(TargetFrameworkMoniker)"
+        RootPath="$(TargetFrameworkRootPath)"
+        BypassFrameworkInstallChecks="$(BypassFrameworkInstallChecks)"
+          >
+      <Output TaskParameter="ReferenceAssemblyPaths" PropertyName="_TargetFrameworkDirectories"/>
+      <Output TaskParameter="FullFrameworkReferenceAssemblyPaths" PropertyName="_FullFrameworkReferenceAssemblyPaths"/>
+      <Output TaskParameter="TargetFrameworkMonikerDisplayName" PropertyName="TargetFrameworkMonikerDisplayName" Condition="'$(TargetFrameworkMonikerDisplayName)' == ''"/>
+    </GetReferenceAssemblyPaths>
+
+    <PropertyGroup>
+      <TargetFrameworkDirectory>$(_TargetFrameworkDirectories);$(TargetFrameworkDirectory);$(WinFXAssemblyDirectory)</TargetFrameworkDirectory>
+    </PropertyGroup>
+
+    <!-- Remove the AssemblyFolders if no target framework directories could be found. This is to prevent us from
+               resolving from the assemblyfolders global location if we are not acutally targeting a framework-->
+
+    <PropertyGroup>
+      <RemoveAssemblyFoldersIfNoTargetFramework Condition="'$(RemoveAssemblyFoldersIfNoTargetFramework)' == ''">true</RemoveAssemblyFoldersIfNoTargetFramework>
+    </PropertyGroup>
+
+    <PropertyGroup Condition="'$(_TargetFrameworkDirectories)' == '' and '$(AssemblySearchPaths)' != '' and '$(RemoveAssemblyFoldersIfNoTargetFramework)' == 'true'">
+      <AssemblySearchPaths>$(AssemblySearchPaths.Replace('{AssemblyFolders}', '').Split(';'))</AssemblySearchPaths>
+    </PropertyGroup>
+
+    <PropertyGroup Condition="'$(_TargetFrameworkDirectories)' == ''">
+      <TargetFrameworkProfile/>
+    </PropertyGroup>
+  </Target>
+
+
+</Project>
+
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Content.targets b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Content.targets
new file mode 100644
index 0000000..7542506
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Content.targets	
@@ -0,0 +1,343 @@
+<!--
+***********************************************************************************************
+Microsoft.Xna.GameStudio.Content.targets
+
+WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
+          created a backup copy.  Incorrect changes to this file will make it
+          impossible to load or build your projects from the command-line or the IDE.
+
+This file defines the steps in the standard build process specific for handling nested
+XNA Game Content projects. For example, it contains the step that builds the nested content
+and copies the built content to the output directory. The remainder of the build process is
+defined in Microsoft.Common.targets, which should be imported before importing this file.
+
+Copyright (C) Microsoft Corporation. All rights reserved.
+***********************************************************************************************
+-->
+
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+  <!-- Have our package build run after the user builds the project. -->
+  <PropertyGroup>
+    <CoreBuildDependsOn>
+      BuildContentProjects;
+      $(CoreBuildDependsOn)
+    </CoreBuildDependsOn>
+
+    <CoreCleanDependsOn>
+      CleanContentProjects;
+      $(CoreCleanDependsOn)
+    </CoreCleanDependsOn>
+  </PropertyGroup>
+
+  <!-- Specifies the platform and profile for which content will be built,
+       in case they are not the same as the code project. -->
+  <PropertyGroup>
+    <XnaContentPlatform Condition="'$(XnaContentPlatform)' == ''" >$(XnaPlatform)</XnaContentPlatform>
+    <XnaContentProfile Condition="'$(XnaContentProfile)' == ''" >$(XnaProfile)</XnaContentProfile>
+  </PropertyGroup>
+
+  <!--
+    ============================================================
+                                        _GetContentReferences
+
+    Creates ContentReference items for ProjectReference items which
+    are content project references. Also splits referenced projects
+    into two lists: those that exist on disk and those that don't.
+    ============================================================
+    -->
+  <Target
+    Name="_GetContentReferences">
+
+    <ItemGroup>
+      <ContentReference Include="@(ProjectReference)" Condition="'%(ProjectReference.XnaReferenceType)' == 'Content'" />
+      <!-- Break the project list into two lists: those that exist on disk and those that don't. -->
+      <_MSBuildContentProjectExistent Include="@(ContentReference)" Condition="Exists('%(Identity)')" />
+      <_MSBuildContentProjectReferenceNonexistent Include="@(ContentReference)" Condition="!Exists('%(Identity)')" />
+    </ItemGroup>   
+  </Target>
+
+  <!--
+    ============================================================
+                                BeforeAssignProjectConfiguration
+    
+    Removes content project references from the ProjectReference
+    item group. This is to opt out of the assembly resolution
+    and project reference configuration processes because content
+    projects do not produce DLLs.
+    ============================================================
+    -->
+  <PropertyGroup>
+    <BeforeAssignProjectConfigurationDependsOn>
+      _GetContentReferences
+    </BeforeAssignProjectConfigurationDependsOn>
+  </PropertyGroup>
+  
+  <Target
+    Name="BeforeAssignProjectConfiguration"
+    DependsOnTargets="$(BeforeAssignProjectConfigurationDependsOn)"
+    BeforeTargets="AssignProjectConfiguration">
+    
+    <ItemGroup>
+      <ProjectReference Remove="@(ContentReference)" />
+    </ItemGroup>
+  </Target>
+
+  <!--
+    ============================================================
+                                        SetParentOutputDir
+    ============================================================
+    -->  
+  <Target
+    Name="SetParentOutputDir">
+    
+    <CreateProperty Value="$(TargetDir)">
+      <Output TaskParameter="Value" PropertyName="ParentOutputDir"/>
+    </CreateProperty>
+    <CreateProperty Value="$(MSBuildProjectDirectory)\$(IntermediateOutputPath)">
+      <Output TaskParameter="Value" PropertyName="ParentIntermediateDir"/>
+    </CreateProperty>
+  </Target>
+  
+  <!--
+    ============================================================
+                                        BuildContentProjects
+
+    Builds nested content projects to match the current platform
+    and configuration. Projects can skip this target by setting
+    SkipNestedContentBuild to true.
+    ============================================================
+    -->
+  <PropertyGroup>
+    <BuildContentProjectsDependsOn>
+      PrepareForBuild;
+      _GetContentReferences;
+      SetParentOutputDir
+    </BuildContentProjectsDependsOn>
+  </PropertyGroup>
+
+  <Target
+    Name="BuildContentProjects"
+    DependsOnTargets="$(BuildContentProjectsDependsOn)"
+    Condition="'$(SkipNestedContentBuild)'!='true'" >
+
+    <!--
+        Always build nested content projects, because the IDE and/or solution does not build them.
+        
+        The $(ContentProjectBuildTargets) will normally be blank so that the project's
+        default target is used during a P2P reference. However if a custom build process requires
+        that the referenced project has a different target to build it can be specified.
+        -->
+
+    <MSBuild
+      Projects="@(_MSBuildContentProjectExistent)"
+      BuildInParallel="true"
+      Targets="$(ContentProjectBuildTargets)"
+      Properties="Configuration=$(Configuration); Platform=$(Platform); XnaPlatform=$(XnaContentPlatform); XnaProfile=$(XnaContentProfile); ParentOutputDir=$(ParentOutputDir); ParentIntermediateDir=$(ParentIntermediateDir); ParentProjectDir=$(ProjectDir); XnaCompressContent=$(XnaCompressContent)"
+      Condition="'@(_MSBuildContentProjectExistent)'!=''">
+
+      <Output TaskParameter="TargetOutputs" ItemName="_BuiltNestedContentFiles"/>
+
+    </MSBuild>
+
+  </Target>
+
+  <!--
+    ============================================================
+                                        CleanContentProjects
+
+    Cleans nested content projects matching the current platform
+    and configuration.
+    ============================================================
+    -->
+  <PropertyGroup>
+    <CleanContentProjectsDependsOn>
+      _GetContentReferences;
+      SetParentOutputDir
+    </CleanContentProjectsDependsOn>
+  </PropertyGroup>
+  
+  <Target
+    Name="CleanContentProjects"
+    DependsOnTargets="$(CleanContentProjectsDependsOn)">
+
+    <MSBuild
+      Projects="@(_MSBuildContentProjectExistent)"
+      Targets="Clean"
+      Properties="Configuration=$(Configuration); Platform=$(Platform); XnaPlatform=$(XnaContentPlatform); XnaProfile=$(XnaContentProfile); ParentOutputDir=$(ParentOutputDir); ParentIntermediateDir=$(ParentIntermediateDir)"
+      Condition="'@(_MSBuildContentProjectExistent)'!=''" />
+
+  </Target>
+
+  <!--
+    ============================================================
+                                        GetCopyToOutputDirectoryContentProjectItems
+
+    Creates an item group of all the most-recently-built outputs
+    from the nested projects. This target is meant to be chained
+    by GetCopyToOutputDirectoryItems, so that content can be added
+    to the list of files to copy from projects referencing this
+    one.
+    
+    Also hooking into MSBuild's preexisting GetCopyToOutputDirectoryItemDependsOn
+    (which now exists as a property in MSBuild3.5, where it didn't in MSBuild 2.0)
+    ============================================================
+    -->
+
+  <PropertyGroup>
+    <GetCopyToOutputDirectoryItemsDependsOn>
+      $(GetCopyToOutputDirectoryItemsDependsOn);
+      GetCopyToOutputDirectoryContentProjectItems
+    </GetCopyToOutputDirectoryItemsDependsOn>
+  </PropertyGroup>
+  
+  <PropertyGroup>
+    <GetCopyToOutputDirectoryContentProjectItemsDependsOn>
+      _GetContentReferences;
+      SetParentOutputDir
+    </GetCopyToOutputDirectoryContentProjectItemsDependsOn>
+  </PropertyGroup>
+
+  <Target
+    Name="GetCopyToOutputDirectoryContentProjectItems"
+    DependsOnTargets="$(GetCopyToOutputDirectoryContentProjectItemsDependsOn)">
+
+    <!-- Get items from child projects first. -->
+    <MSBuild
+      Projects="@(_MSBuildContentProjectExistent)"
+      Targets="GetCopyToOutputDirectoryItems"
+      Properties="Configuration=$(Configuration); Platform=$(Platform); XnaPlatform=$(XnaContentPlatform); XnaProfile=$(XnaContentProfile); ParentOutputDir=$(ParentOutputDir); ParentIntermediateDir=$(ParentIntermediateDir)"
+      Condition="'@(_MSBuildContentProjectExistent)'!=''">
+
+      <Output TaskParameter="TargetOutputs" ItemName="_AllNestedContentProjectItemsWithTargetPath"/>
+
+    </MSBuild>
+
+    <!-- Target outputs must be full paths because they will be consumed by a different project. -->
+    <CreateItem
+      Include="@(_AllNestedContentProjectItemsWithTargetPath->'%(FullPath)')"
+      Condition="'%(_AllNestedContentProjectItemsWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(_AllNestedContentProjectItemsWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"
+                >
+      <Output TaskParameter="Include" ItemName="AllItemsFullPathWithTargetPath"/>
+      <Output TaskParameter="Include" ItemName="_NestedContentItemsToCopyToOutputDirectoryAlways"
+              Condition="'%(_AllNestedContentProjectItemsWithTargetPath.CopyToOutputDirectory)'=='Always'"/>
+      <Output TaskParameter="Include" ItemName="_NestedContentItemsToCopyToOutputDirectory"
+              Condition="'%(_AllNestedContentProjectItemsWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"/>
+    </CreateItem>
+
+  </Target>
+
+  <!--
+  ============================================================
+                                      _CopySourceItemsToOutputDirectory
+  ============================================================
+  -->
+  <Target
+      Name="_CopySourceItemsToOutputDirectory"
+      DependsOnTargets="
+            GetCopyToOutputDirectoryItems;
+            _CopyOutOfDateSourceItemsToOutputDirectory;
+            _CopyOutOfDateSourceItemsToOutputDirectoryAlways;
+            GetCopyToOutputDirectoryContentProjectItems;
+            _CopyOutOfDateNestedContentItemsToOutputDirectory;
+            _CopyOutOfDateNestedContentItemsToOutputDirectoryAlways;"/>
+
+  
+
+
+  
+  <!--
+  ============================================================
+                                      _CopyOutOfDateNestedContentItemsToOutputDirectory
+
+  Copy files that have the CopyToOutputDirectory attribute set to 'PreserveNewest'.
+  ============================================================
+  -->
+  <Target
+      Name="_CopyOutOfDateNestedContentItemsToOutputDirectory"
+      Condition=" '@(_NestedContentItemsToCopyToOutputDirectory)' != '' "
+      Inputs="@(_NestedContentItemsToCopyToOutputDirectory)"
+      Outputs="@(_NestedContentItemsToCopyToOutputDirectory->'$(OutDir)%(TargetPath)')">
+
+    <!--
+    Not using SkipUnchangedFiles="true" because the application may want to change
+    one of these files and not have an incremental build replace it.
+    -->
+    <Copy
+        SourceFiles = "@(_NestedContentItemsToCopyToOutputDirectory)"
+        DestinationFiles = "@(_NestedContentItemsToCopyToOutputDirectory->'$(OutDir)%(TargetPath)')">
+
+      <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
+
+    </Copy>
+
+  </Target>
+
+  <!--
+  ============================================================
+                                      _CopyOutOfDateNestedContentItemsToOutputDirectoryAlways
+
+  Copy files that have the CopyToOutputDirectory attribute set to 'Always'.
+  ============================================================
+  -->
+  <Target
+      Name="_CopyOutOfDateNestedContentItemsToOutputDirectoryAlways"
+      Condition=" '@(_NestedContentItemsToCopyToOutputDirectoryAlways)' != '' ">
+
+    <!--
+    Not using SkipUnchangedFiles="true" because the application may want to change
+    one of these files and not have an incremental build replace it.
+    -->
+    <Copy
+        SourceFiles = "@(_NestedContentItemsToCopyToOutputDirectoryAlways)"
+        DestinationFiles = "@(_NestedContentItemsToCopyToOutputDirectoryAlways->'$(OutDir)%(TargetPath)')">
+
+      <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
+
+    </Copy>
+
+  </Target>
+
+
+  <!--
+    ============================================================
+                                        XNAReadContentCacheFile
+
+    Reads all cache files that we output to the intermediate path during the 
+    content build process.  Cache files contain the Content files target path 
+    information, which we use to populate the manifest ItemGroup 
+    _DeploymentManifestFiles
+    ============================================================
+    -->
+
+  <PropertyGroup>
+    <GenerateManifestsDependsOn>
+      _GetContentReferences;
+      _CopySourceItemsToOutputDirectory;
+      XNAReadContentCacheFile;
+      $(GenerateManifestsDependsOn)
+    </GenerateManifestsDependsOn>
+  </PropertyGroup>
+
+  <Target Name="XNAReadContentCacheFile">    
+    <XmlPeek XmlInputPath="%(ContentReference.Identity)" 
+             Namespaces="&lt;Namespace Prefix='msbuild' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/&gt;"
+             Query="/msbuild:Project/msbuild:PropertyGroup/msbuild:ProjectGuid/text()">
+      <Output TaskParameter="Result" ItemName="ContentProjectGuid" />
+    </XmlPeek>
+    <CreateItem Include="$(MSBuildProjectDirectory)\$(IntermediateOutputPath)cachefile-%(ContentProjectGuid.Identity)-targetpath.txt">
+      <Output ItemName="XNAAllCacheFiles" TaskParameter="Include"/>
+    </CreateItem>
+    
+    <ReadLinesFromFile File="%(XNAAllCacheFiles.Identity)" 
+                       Condition="'@(XNAAllCacheFiles)' != ''">
+      <Output TaskParameter="Lines" ItemName="_FromBuiltContentTargetPath"/>
+    </ReadLinesFromFile>
+
+    <CreateItem Include="$(OutputPath)%(_FromBuiltContentTargetPath.Identity)" 
+                AdditionalMetadata="TargetPath=%(_FromBuiltContentTargetPath.Identity);IsDataFile=false"
+                Condition="'@(_FromBuiltContentTargetPath)' != ''">
+      <Output ItemName="_DeploymentManifestFiles" TaskParameter="Include" />
+    </CreateItem>
+  </Target>
+</Project>
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.ContentPipeline.targets b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.ContentPipeline.targets
new file mode 100644
index 0000000..0d026ff
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.ContentPipeline.targets	
@@ -0,0 +1,493 @@
+﻿<!--
+***********************************************************************************************
+Microsoft.Xna.GameStudio.ContentPipeline.targets
+
+WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
+          created a backup copy.  Incorrect changes to this file will make it
+          impossible to load or build your projects from the command-line or the IDE.
+
+This file defines the steps in the standard content build process for XNA Game Studio projects.
+
+Copyright (C) Microsoft Corporation. All rights reserved.
+***********************************************************************************************
+-->
+
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+  <!-- These tasks are specific to the build process defined in this file, and are not considered general-purpose build tasks. -->
+  <UsingTask TaskName="BuildContent"      AssemblyName="Microsoft.Xna.Framework.Content.Pipeline, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"/>
+  <UsingTask TaskName="BuildXact"         AssemblyName="Microsoft.Xna.Framework.Content.Pipeline, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"/>
+  <UsingTask TaskName="CleanContent"      AssemblyName="Microsoft.Xna.Framework.Content.Pipeline, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"/>
+  <UsingTask TaskName="GetLastOutputs"    AssemblyName="Microsoft.Xna.Framework.Content.Pipeline, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"/>
+  
+  <!--
+    ============================================================
+                                        _BuildXNAContentLists
+
+    Build the ItemGroups of content we want to process with the
+    XNA Content Pipeline.
+    ============================================================
+    -->
+  <Target 
+    Name="_BuildXNAContentLists" 
+    Condition="'$(BuildingProject)'=='true' or '$(BuildXnaContent)' == 'true'">
+
+    <CreateItem
+      Include="@(Compile)"
+      Condition="'%(Compile.Importer)' != 'XactImporter'">
+      <Output ItemName="XNAContent" TaskParameter="Include"/>
+    </CreateItem>
+
+    <CreateItem
+      Include="@(Compile)"
+      Condition="'%(Compile.Importer)' == 'XactImporter'">
+      <Output ItemName="XACTContent" TaskParameter="Include"/>
+    </CreateItem>
+
+  </Target>
+
+  <!--
+    ============================================================
+                                        CreateManifestResourceNames
+
+    This target is required by Microsoft.Common.targets.
+    ============================================================
+    -->
+  <Target
+    Name="CreateManifestResourceNames"
+    Condition="false"
+    DependsOnTargets="$(CreateManifestResourceNamesDependsOn)"/>
+
+  <!--
+    ============================================================
+                                        CoreCompile
+
+    This target is required by Microsoft.Common.targets. It compiles
+    content using the XNA Framework Content Pipeline.
+    ============================================================
+    -->
+  <Target 
+    Name="CoreCompile"
+    DependsOnTargets="$(CoreCompileDependsOn)" 
+    Condition="'$(BuildingProject)'=='true' or '$(BuildXnaContent)' == 'true'">
+
+    <Error Condition="'$(XNAContentPipelineTargetPlatform)' == ''" Text="The XNAContentPipelineTargetPlatform property is required to build content." />
+    <Error Condition="'$(XNAContentPipelineTargetProfile)' == ''"  Text="The XNAContentPipelineTargetProfile property is required to build content." />
+    
+    <!-- Build the non-XACT content. -->
+    <BuildContent
+      BuildConfiguration="$(Configuration)"
+      IntermediateDirectory="$(ProjectDir)$(IntermediateOutputPath)"
+      OutputDirectory="$(ParentOutputDir)$(ContentRootDirectory)"
+      PipelineAssemblies="@(ReferencePath)"
+      PipelineAssemblyDependencies="@(ReferenceDependencyPaths)"
+      RebuildAll="$(XNARebuildContent)"
+      RootDirectory="$(ProjectDir)"
+      LoggerRootDirectory="$(ParentProjectDir)"
+      SourceAssets="@(XNAContent)"
+      TargetPlatform="$(XNAContentPipelineTargetPlatform)"
+      TargetProfile="$(XNAContentPipelineTargetProfile)"
+      CompressContent="$(XNACompressContent)">
+      <Output ItemName="XNAIntermediateContentFiles" TaskParameter="IntermediateFiles"/>
+      <Output ItemName="XNAOutputContentFiles" TaskParameter="OutputContentFiles"/>
+      <Output ItemName="XNARebuiltContentFiles" TaskParameter="RebuiltContentFiles"/>
+    </BuildContent>
+
+    <!-- Build the XACT content.
+    <BuildXact
+      BuildConfiguration="$(Configuration)"
+      IntermediateDirectory="$(ProjectDir)$(IntermediateOutputPath)"
+      OutputDirectory="$(ParentOutputDir)$(ContentRootDirectory)"
+      RebuildAll="$(XNARebuildContent)"
+      RootDirectory="$(ProjectDir)"
+      LoggerRootDirectory="$(ParentProjectDir)"
+      TargetPlatform="$(XNAContentPipelineTargetPlatform)"
+      TargetProfile="$(XNAContentPipelineTargetProfile)"
+      XactProjects="@(XACTContent)"
+      XnaFrameworkVersion="$(XnaFrameworkVersion)">
+      <Output ItemName="_XNAIntermediateXactFiles" TaskParameter="IntermediateFiles"/>
+      <Output ItemName="XNAIntermediateContentFiles" TaskParameter="IntermediateFiles"/>
+      <Output ItemName="XNAOutputContentFiles" TaskParameter="OutputXactFiles"/>
+      <Output ItemName="XNARebuiltContentFiles" TaskParameter="RebuiltXactFiles"/>
+      <Output ItemName="_AllBuiltXactFiles" TaskParameter="OutputXactFiles"/>
+      <Output ItemName="_AddBuiltXactFiles" TaskParameter="RebuiltXactFiles"/>
+    </BuildXact>
+
+    <AssignTargetPath
+      Files="@(_XNAIntermediateXactFiles)"
+      RootFolder="$(ProjectDir)">
+      <Output TaskParameter="AssignedFiles" ItemName="_XNAIntermediateXactFilesWithTargetPath"/>
+    </AssignTargetPath>
+
+    <CreateItem
+      Include="@(_XNAIntermediateXactFilesWithTargetPath->'%(TargetPath)')">
+      <Output TaskParameter="Include" ItemName="FileWrites"/>
+    </CreateItem>
+
+    <AssignTargetPath
+      Files="@(_AllBuiltXactFiles)"
+      RootFolder="$(ParentOutputDir)">
+      <Output TaskParameter="AssignedFiles" ItemName="_AllBuiltXactFilesWithTargetPath"/>
+    </AssignTargetPath>
+    
+    <RemoveDuplicates
+      Inputs="@(_AllBuiltXactFilesWithTargetPath->'%(TargetPath)')">
+      <Output TaskParameter="Filtered" ItemName="_AllBuiltXactFilesNoDuplicates"/>
+    </RemoveDuplicates>
+    
+    <WriteLinesToFile
+      File="$(BaseIntermediateOutputPath)$(XactOutputCacheFile)"
+      Lines="@(_AllBuiltXactFilesNoDuplicates)"
+      Overwrite="true"/>
+
+    <CreateItem
+      Include="$(BaseIntermediateOutputPath)$(XactOutputCacheFile)">
+      <Output TaskParameter="Include" ItemName="FileWrites"/>
+    </CreateItem>
+     -->
+    <!-- Items in the Content item group are not built by the XNA Framework
+         Content Pipeline. This warning is for informational purposes only,
+         but can be disabled by advanced users if custom targets have been
+         defined.
+     -->
+    <Warning
+      Condition="'@(Content)'!='' and '$(DisableContentItemWarning)'!='true'"
+      Text="Project item '%(Content.Identity)' was not built with the XNA Framework Content Pipeline. Set its Build Action property to Compile to build it."/>
+
+    <!-- Items in the EmbeddedResource item group are not supported in nested
+         content projects. This error can be disabled by advanced users if custom
+         targets have been defined.
+     -->
+    <Error
+      Condition="'@(EmbeddedResource)'!='' and '$(DisableEmbeddedResourceItemError)'!='true'"
+      Text="Project item '%(EmbeddedResource.Identity)' could not be built. Embedded Resource is not a supported Build Action for items in the Content subproject."/>
+
+
+    <!-- Begin figuring out files that should go into cache file -->
+
+    <AssignTargetPath
+      Files="@(XNAOutputContentFiles)"
+      RootFolder="$(ParentOutputDir)">
+      <Output TaskParameter="AssignedFiles" ItemName="_XNAOutputCacheFilesWithTargetPath"/>
+    </AssignTargetPath>
+
+    <!-- Grab everything marked as 'Copy always' or 'Copy if newer' 
+         Do this for files marked with build action 'None', 'Compile', and 'Content'-->
+    <CreateItem
+      Include="@(ContentWithTargetPath->'%(FullPath)')"
+      Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(ContentWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'">
+      <Output TaskParameter="Include" ItemName="_XNAOutputCacheFilesWithTargetPath"/>
+    </CreateItem>
+
+    <CreateItem
+      Include="@(Compile->'%(FullPath)')"
+      Condition="'%(Compile.CopyToOutputDirectory)'=='Always' or '%(Compile.CopyToOutputDirectory)'=='PreserveNewest'">
+      <Output TaskParameter="Include" ItemName="_CacheCompileItemsToCopy"/>
+    </CreateItem>
+    <AssignTargetPath Files="@(_CacheCompileItemsToCopy)" RootFolder="$(MSBuildProjectDirectory)">
+      <Output TaskParameter="AssignedFiles" ItemName="_CacheCompileItemsToCopyWithTargetPathTemp" />
+    </AssignTargetPath>
+    <CreateItem
+      Include="@(_CacheCompileItemsToCopyWithTargetPathTemp)"
+      AdditionalMetadata="TargetPath=$(ContentRootDirectoryDir)%(_CacheCompileItemsToCopyWithTargetPathTemp.TargetPath)">
+      <Output TaskParameter="Include" ItemName="_CacheCompileItemsToCopyWithTargetPath"/>
+    </CreateItem>
+    <CreateItem Include="@(_CacheCompileItemsToCopyWithTargetPath)">
+      <Output TaskParameter="Include" ItemName="_XNAOutputCacheFilesWithTargetPath"/>
+    </CreateItem>
+
+    <CreateItem
+        Include="@(_NoneWithTargetPath->'%(FullPath)')"
+        Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'">
+      <Output TaskParameter="Include" ItemName="_XNAOutputCacheFilesWithTargetPath"/>
+    </CreateItem>
+
+    <WriteLinesToFile
+      File="$(ParentIntermediateDir)cachefile-$(ProjectGuid)-targetpath.txt"
+      Lines="@(_XNAOutputCacheFilesWithTargetPath->'%(TargetPath)')"
+      Overwrite="true" />
+  </Target>
+
+  <!--
+    ============================================================
+                                        XNAContentClean
+
+    Clean the XNA content from the project.
+    ============================================================
+    -->
+  <Target Name="XNAContentClean">
+
+    <CleanContent
+      BuildConfiguration="$(Configuration)"
+      IntermediateDirectory="$(ProjectDir)$(IntermediateOutputPath)"
+      OutputDirectory="$(ParentOutputDir)$(ContentRootDirectory)"
+      RootDirectory="$(ProjectDir)"
+      TargetPlatform="$(XNAContentPipelineTargetPlatform)"
+      TargetProfile="$(XNAContentPipelineTargetProfile)">
+    </CleanContent>
+
+    <Delete
+      Files="$(BaseIntermediateOutputPath)$(XactOutputCacheFile)"
+      Condition="Exists('$(BaseIntermediateOutputPath)$(XactOutputCacheFile)')"
+      TreatErrorsAsWarnings="true"/>
+
+    <CreateItem Include="$(ParentIntermediateDir)cachefile-*-targetpath.txt">
+      <Output TaskParameter="Include" ItemName="_XNAContentCleanCacheFiles"/>
+    </CreateItem>
+    
+    <Delete
+      Files="@(_XNAContentCleanCacheFiles)"
+      Condition="'@(_XNAContentCleanCacheFiles)' != ''"
+      TreatErrorsAsWarnings="true" />
+  </Target>
+
+  <!--
+    ============================================================
+                                        GetBuiltContentWithTargetPaths
+
+    Gathers the built content so that it can be copied by parent
+    projects.
+    ============================================================
+    -->
+  <Target
+    Name="GetBuiltContentWithTargetPaths"
+    Outputs="@(BuiltContentWithTargetPaths)">
+
+    <GetLastOutputs
+      IntermediateDirectory="$(ProjectDir)$(IntermediateOutputPath)">
+      <Output TaskParameter="OutputContentFiles" ItemName="LastBuiltContentFiles" />
+    </GetLastOutputs>
+
+    <!-- Add metadata so only new built content is copied to the output directory. -->
+    <CreateItem
+      Include="@(LastBuiltContentFiles)"
+      AdditionalMetadata="CopyToOutputDirectory=PreserveNewest">
+      <Output TaskParameter="Include" ItemName="LastBuiltContentFilesPreserveNewest"/>
+    </CreateItem>
+    
+    <AssignTargetPath
+      Files="@(LastBuiltContentFilesPreserveNewest)"
+      RootFolder="$(ParentOutputDir)">
+      <Output TaskParameter="AssignedFiles" ItemName="BuiltContentWithTargetPaths" />
+    </AssignTargetPath>
+
+  </Target>
+
+  <!--
+    ============================================================
+                                        GetBuiltXactContentWithTargetPaths
+
+    Gathers the built XACT content so that it can be copied by
+    parent projects.
+    ============================================================
+    -->
+  <Target
+    Name="GetBuiltXactContentWithTargetPaths"
+    Outputs="@(BuiltXactContentWithTargetPaths">
+
+    <ReadLinesFromFile
+      File="$(BaseIntermediateOutputPath)$(XactOutputCacheFile)"
+      Condition="Exists('$(BaseIntermediateOutputPath)$(XactOutputCacheFile)')">
+      <Output TaskParameter="Lines" ItemName="LastBuiltXactContent"/>
+    </ReadLinesFromFile>
+
+    <!-- Add metadata so only new built content is copied to the output directory. -->
+    <CreateItem
+      Include="@(LastBuiltXactContent->'$(ParentOutputDir)%(Identity)')"
+      AdditionalMetadata="CopyToOutputDirectory=PreserveNewest">
+      <Output TaskParameter="Include" ItemName="LastBuiltXactContentPreserveNewest"/>
+    </CreateItem>
+    
+    <AssignTargetPath
+      Files="@(LastBuiltXactContentPreserveNewest)"
+      RootFolder="$(ParentOutputDir)">
+      <Output TaskParameter="AssignedFiles" ItemName="BuiltXactContentWithTargetPaths" />
+    </AssignTargetPath>
+    
+  </Target>
+  
+  <!-- Microsoft.Common.targets must be imported *before* overriding anything in it. -->
+  
+  <Import Project="$(MSBuildBinPath)\Microsoft.Common.targets" />
+  
+  <PropertyGroup>
+    <!-- This is specified as an input to CoreCompile so that msbuild recognizes a project is dirty when the targets file changes. -->
+    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\v4.0\Microsoft.Xna.GameStudio.ContentPipeline.targets</MSBuildAllProjects>
+    <!-- This is normally specified by the parent code project, but we'll define it when content is being built stand-alone. -->
+    <ParentOutputDir Condition="'$(ParentOutputDir)'==''">$(TargetDir)</ParentOutputDir>
+
+    <!-- Have our content build run when the user builds the project. -->
+    <CoreCompileDependsOn>_BuildXNAContentLists</CoreCompileDependsOn>
+
+    <!-- Have our clean targets run when the user cleans the project (also invoked by Rebuild). -->
+    <CleanDependsOn>
+      XNAContentClean;
+      $(CleanDependsOn)
+    </CleanDependsOn>
+
+    <!-- Create a property with the correct target platform for the XNA Content Pipeline BuildContent task. -->
+    <XNAContentPipelineTargetPlatform Condition="'$(XNAContentPipelineTargetPlatform)' == ''">$(XnaPlatform)</XNAContentPipelineTargetPlatform>
+    <XNAContentPipelineTargetPlatform Condition="'$(XNAContentPipelineTargetPlatform)' == 'Xbox 360'">Xbox360</XNAContentPipelineTargetPlatform>
+    <XNAContentPipelineTargetPlatform Condition="'$(XNAContentPipelineTargetPlatform)' == 'Windows Phone'">WindowsPhone</XNAContentPipelineTargetPlatform>
+
+
+    <XNAContentPipelineTargetProfile Condition="'$(XNAContentPipelineTargetProfile)' == ''">$(XnaProfile)</XNAContentPipelineTargetProfile>
+
+    <ContentRootDirectory Condition="'$(ContentRootDirectory)' == ''">$(ProjectName)</ContentRootDirectory>  <!-- Example, Content\ -->
+    <!-- Make sure this is set to String.Empty for our special case as some tasks we don't own don't like /./ in paths -->
+    <ContentRootDirectoryDir Condition="'$(ContentRootDirectoryDir)' == '' and '$(ContentRootDirectory)' != '.'">$(ContentRootDirectory)</ContentRootDirectoryDir>
+    <!-- Ensure ContentDir has a trailing slash, so it can be concatenated -->
+    <ContentRootDirectoryDir Condition="'$(ContentRootDirectoryDir)' != '' and !HasTrailingSlash('$(ContentRootDirectoryDir)')">$(ContentRootDirectory)\</ContentRootDirectoryDir>
+
+    <XactOutputCacheFile Condition="'$(XactOutputCacheFile)'==''">$(MSBuildProjectFile).XactOutput.FileList.txt</XactOutputCacheFile>
+
+    <!-- AvailablePlatforms is the list of platform targets available. -->
+    <AvailablePlatforms>Xbox 360,x86,Windows Phone</AvailablePlatforms>
+  </PropertyGroup>
+
+  <!--
+    ============================================================
+                                        AssignTargetPaths
+
+    This target creates <TargetPath> tags for items. <TargetPath> is a relative folder plus filename
+    for the destination of this item. Overridden so that the nested project's source items can be
+    copied to the output directory.
+    ============================================================
+    -->
+  <Target
+      Name="AssignTargetPaths">
+
+    <AssignTargetPath Files="@(Content)" RootFolder="$(MSBuildProjectDirectory)">
+      <Output TaskParameter="AssignedFiles" ItemName="ContentWithTargetPathTemp" />
+    </AssignTargetPath>
+
+    <CreateItem
+      Include="@(ContentWithTargetPathTemp)"
+      AdditionalMetadata="TargetPath=$(ContentRootDirectoryDir)%(ContentWithTargetPathTemp.TargetPath)">
+      <Output TaskParameter="Include" ItemName="ContentWithTargetPath"/>
+    </CreateItem>
+
+    <AssignTargetPath Files="@(None)" RootFolder="$(MSBuildProjectDirectory)">
+      <Output TaskParameter="AssignedFiles" ItemName="_NoneWithTargetPathTemp" />
+    </AssignTargetPath>
+
+    <CreateItem
+      Include="@(_NoneWithTargetPathTemp)"
+      AdditionalMetadata="TargetPath=$(ContentRootDirectoryDir)%(_NoneWithTargetPathTemp.TargetPath)">
+      <Output TaskParameter="Include" ItemName="_NoneWithTargetPath"/>
+    </CreateItem>
+
+  </Target>
+
+  <!--
+    ============================================================
+                                        GetCopyToOutputDirectoryItems
+
+    Override the standard Microsoft.Common.targets' definition of
+    GetCopyToOutputDirectoryItems in order to add our built content
+    to @(AllItemsFullPathWithTargetPath).
+    ============================================================
+    -->
+  <PropertyGroup>
+    <GetCopyToOutputDirectoryItemsDependsOn>
+      GetBuiltContentWithTargetPaths;
+      GetBuiltXactContentWithTargetPaths;
+      AssignTargetPaths
+    </GetCopyToOutputDirectoryItemsDependsOn>
+  </PropertyGroup>
+
+  <Target
+      Name="GetCopyToOutputDirectoryItems"
+      Outputs="@(AllItemsFullPathWithTargetPath)"
+      DependsOnTargets="$(GetCopyToOutputDirectoryItemsDependsOn)">
+
+    <!-- Do not get items from child projects. Referenced projects are used by the Content Pipeline,
+         and we do not want to pass build-related assemblies to projects that reference this one. This
+         also means a Content project cannot reference another Content project. -->
+
+    <!-- Get built content items from this project. -->
+    <CreateItem
+        Include="@(BuiltContentWithTargetPaths->'%(FullPath)')"
+        Condition="'%(BuiltContentWithTargetPaths.CopyToOutputDirectory)'=='Always' or '%(BuiltContentWithTargetPaths.CopyToOutputDirectory)'=='PreserveNewest'"
+                >
+      <Output TaskParameter="Include" ItemName="AllItemsFullPathWithTargetPath"/>
+      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectoryAlways"
+              Condition="'%(BuiltContentWithTargetPaths.CopyToOutputDirectory)'=='Always'"/>
+      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectory"
+              Condition="'%(BuiltContentWithTargetPaths.CopyToOutputDirectory)'=='PreserveNewest'"/>
+    </CreateItem>
+
+    <!-- Get built XACT content items from this project. -->
+    <CreateItem
+        Include="@(BuiltXactContentWithTargetPaths->'%(FullPath)')"
+        Condition="'%(BuiltXactContentWithTargetPaths.CopyToOutputDirectory)'=='Always' or '%(BuiltXactContentWithTargetPaths.CopyToOutputDirectory)'=='PreserveNewest'"
+                >
+      <Output TaskParameter="Include" ItemName="AllItemsFullPathWithTargetPath"/>
+      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectoryAlways"
+              Condition="'%(BuiltXactContentWithTargetPaths.CopyToOutputDirectory)'=='Always'"/>
+      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectory"
+              Condition="'%(BuiltXactContentWithTargetPaths.CopyToOutputDirectory)'=='PreserveNewest'"/>
+    </CreateItem>
+
+    <!-- Get source items from this project. -->
+    <CreateItem
+        Include="@(ContentWithTargetPath->'%(FullPath)')"
+        Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(ContentWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"
+                >
+      <Output TaskParameter="Include" ItemName="AllItemsFullPathWithTargetPath"/>
+      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectoryAlways"
+              Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='Always'"/>
+      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectory"
+              Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"/>
+    </CreateItem>
+
+    <!-- Content projects do not have Embedded Resource build actions. -->
+
+    <CreateItem
+        Include="@(Compile->'%(FullPath)')"
+        Condition="'%(Compile.CopyToOutputDirectory)'=='Always' or '%(Compile.CopyToOutputDirectory)'=='PreserveNewest'">
+      <Output TaskParameter="Include" ItemName="_CompileItemsToCopy"/>
+    </CreateItem>
+    <AssignTargetPath Files="@(_CompileItemsToCopy)" RootFolder="$(MSBuildProjectDirectory)">
+      <Output TaskParameter="AssignedFiles" ItemName="_CompileItemsToCopyWithTargetPathTemp" />
+    </AssignTargetPath>
+    <CreateItem
+      Include="@(_CompileItemsToCopyWithTargetPathTemp)"
+      AdditionalMetadata="TargetPath=$(ContentRootDirectoryDir)%(_CompileItemsToCopyWithTargetPathTemp.TargetPath)">
+      <Output TaskParameter="Include" ItemName="_CompileItemsToCopyWithTargetPath"/>
+    </CreateItem>
+    <CreateItem Include="@(_CompileItemsToCopyWithTargetPath)">
+      <Output TaskParameter="Include" ItemName="AllItemsFullPathWithTargetPath"/>
+      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectoryAlways"
+              Condition="'%(_CompileItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='Always'"/>
+      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectory"
+              Condition="'%(_CompileItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"/>
+    </CreateItem>
+
+    <CreateItem
+        Include="@(_NoneWithTargetPath->'%(FullPath)')"
+        Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"
+                >
+      <Output TaskParameter="Include" ItemName="AllItemsFullPathWithTargetPath"/>
+      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectoryAlways"
+              Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always'"/>
+      <Output TaskParameter="Include" ItemName="_SourceItemsToCopyToOutputDirectory"
+              Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"/>
+    </CreateItem>
+
+  </Target>
+
+  <!--
+    ============================================================
+                                        CopyFilesToOutputDirectory
+
+    Override the standard Microsoft.Common.targets CopyFilesToOutputDirectory, since our content
+    project type doesn't build most of the regular code build outputs. We also don't copy references
+    that were copy local into the output directory, since references are for use during build only,
+    not runtime. Finally, we leave it up to the parent project to copy any of our source items to
+    its own output directory.
+    ============================================================
+    -->
+  <Target Name="CopyFilesToOutputDirectory"/>
+  
+</Project>
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Windows.targets b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Windows.targets
new file mode 100644
index 0000000..12ae2f4
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Windows.targets	
@@ -0,0 +1,26 @@
+﻿<!--
+***********************************************************************************************
+Microsoft.Xna.GameStudio.Windows.targets
+
+WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
+          created a backup copy.  Incorrect changes to this file will make it
+          impossible to load or build your projects from the command-line or the IDE.
+
+This file defines the steps in the standard build process specific for XNA Game Studio
+projects targeting the Windows platform.
+
+Copyright (C) Microsoft Corporation. All rights reserved.
+***********************************************************************************************
+-->
+
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+  <!-- AvailablePlatforms is the list of platform targets available. -->
+  <PropertyGroup>
+    <AvailablePlatforms>x86</AvailablePlatforms>
+  </PropertyGroup>
+
+  <Import Project="Microsoft.Xna.GameStudio.Common.targets" />
+  <Import Project="Microsoft.Xna.GameStudio.Content.targets" />
+
+</Project>
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Xbox 360.targets b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Xbox 360.targets
new file mode 100644
index 0000000..23e1eb4
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNA/XNA Game Studio/v4.0/Microsoft.Xna.GameStudio.Xbox 360.targets	
@@ -0,0 +1,54 @@
+﻿<!--
+***********************************************************************************************
+Microsoft.Xna.GameStudio.Xbox 360.targets
+
+WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
+          created a backup copy.  Incorrect changes to this file will make it
+          impossible to load or build your projects from the command-line or the IDE.
+
+This file defines the steps in the standard build process specific for XNA Game Studio
+projects targeting the Xbox 360 platform.
+
+Copyright (C) Microsoft Corporation. All rights reserved.
+***********************************************************************************************
+-->
+
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+  <!-- AvailablePlatforms is the list of platform targets available. -->
+  <PropertyGroup>
+    <AvailablePlatforms>Xbox 360</AvailablePlatforms>
+  </PropertyGroup>
+
+  <!--
+        These are used to have the AssemblySearchPaths include the following registry location
+        when resolving assemblies:
+              
+            HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\XNA\AssemblyFolders\$(XnaFrameworkVersion)\$(XnaPlatform)\AssemblyFoldersEx
+
+    -->
+  <PropertyGroup>
+    <FrameworkRegistryBase>SOFTWARE\Microsoft\XNA\AssemblyFolders</FrameworkRegistryBase>
+    <AssemblyFoldersSuffix>$(XnaPlatform)\AssemblyFoldersEx</AssemblyFoldersSuffix>
+  </PropertyGroup>
+
+  <!--
+    In MSBuild 3.5, the ResolveAssemblyReference takes a new, redundant input
+    parameter to define the TargetFrameworkDirectory. We want this path defined
+    only for Windows platforms, because it allows resolution against Windows-only
+    assemblies.
+  -->
+  <Target
+    Name="GetFrameworkPaths"
+    DependsOnTargets="$(GetFrameworkPathsDependsOn)"
+    >
+
+    <PropertyGroup>
+      <TargetFrameworkDirectory Condition=" '$(XnaPlatform)' == 'Xbox 360' ">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\XNA\Game Studio\v4.0@InstallPath)References\Xbox360\</TargetFrameworkDirectory>
+    </PropertyGroup>
+  </Target>
+
+  <Import Project="Microsoft.Xna.GameStudio.Common.targets" />
+  <Import Project="Microsoft.Xna.GameStudio.Content.targets" />
+
+</Project>
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNAExporter.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNAExporter.cs
new file mode 100644
index 0000000..aa6e8cf
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Exporters/ThroughXNA/XNAExporter.cs	
@@ -0,0 +1,296 @@
+﻿using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Runtime.Serialization.Json;
+using System.Windows.Forms;
+using BabylonExport.Core.Exporters.FBX;
+using Microsoft.Xna.Framework.Content;
+using Microsoft.Xna.Framework.Graphics;
+using SkinnedModel;
+using Vertice.Nova.Animations;
+
+namespace BabylonExport.Core.Exporters.XNA
+{
+    public abstract class XNAExporter : IExporter
+    {
+        public abstract string SupportedExtensions { get; }
+        public abstract string Importer { get; }
+
+        public virtual IEnumerable<string> ExtraPipelineAssemblies { get { return null; } }
+        
+        public event Action<int> OnImportProgressChanged;
+
+        readonly Dictionary<string, string> exportedTexturesFilename = new Dictionary<string, string>();
+        readonly List<StandardMaterial> exportedMaterials = new List<StandardMaterial>();
+
+        private int texturesCount = 0;
+
+        public void GenerateBabylonFile(string file, string outputFile, bool skinned)
+        {
+            if (OnImportProgressChanged != null)
+                OnImportProgressChanged(0);
+
+
+            var scene = new BabylonScene(Path.GetDirectoryName(outputFile));
+
+            var services = new ServiceContainer();
+
+            // Create a graphics device
+            var form = new Form();
+            
+            services.AddService<IGraphicsDeviceService>(GraphicsDeviceService.AddRef(form.Handle, 1, 1));
+
+            var contentBuilder = new ContentBuilder(ExtraPipelineAssemblies);
+            var contentManager = new ContentManager(services, contentBuilder.OutputDirectory);
+
+            // Tell the ContentBuilder what to build.
+            contentBuilder.Clear();
+            contentBuilder.Add(Path.GetFullPath(file), "Model", Importer, skinned ? "SkinnedModelProcessor" : "ModelProcessor");
+
+            // Build this new model data.
+            string buildError = contentBuilder.Build();
+
+            if (string.IsNullOrEmpty(buildError))
+            {
+                var model = contentManager.Load<Model>("Model");
+                ParseModel(model, scene);
+            }
+            else
+            {
+                throw new Exception(buildError);
+            }
+
+            // Output
+            scene.Prepare();
+            using (var outputStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
+            {
+                var ser = new DataContractJsonSerializer(typeof(BabylonScene));
+                ser.WriteObject(outputStream, scene);
+            }
+
+            // Cleaning
+            foreach (var path in exportedTexturesFilename.Values)
+            {
+                File.Delete(path);
+            }
+
+            if (OnImportProgressChanged != null)
+                OnImportProgressChanged(100);
+        }
+
+        void ParseModel(Model model, BabylonScene scene)
+        {
+            var effects = model.Meshes.SelectMany(m => m.Effects).ToList();
+            var meshes = model.Meshes.ToList();
+            var total = effects.Count + meshes.Count;
+            var progress = 0;
+            SkinningData skinningData = null;
+            BabylonSkeleton currentSkeleton = null;
+
+            if (model.Tag != null)
+            {
+                skinningData = model.Tag as SkinningData;
+            }
+
+            if (skinningData != null)
+            {
+                var skeleton = new BabylonSkeleton();
+                skeleton.id = scene.SkeletonsList.Count;
+                skeleton.name = "Skeleton" + scene.SkeletonsList.Count;
+                ParseBones(skinningData, skeleton);
+
+                // Animations
+                ParseAnimationClip(skinningData, skeleton);
+
+                scene.SkeletonsList.Add(skeleton);
+                currentSkeleton = skeleton;
+            }
+
+            foreach (Effect effect in effects)
+            {
+                ParseEffect(effect, scene);
+                if (OnImportProgressChanged != null)
+                    OnImportProgressChanged(((progress++) * 100) / total);
+            }
+
+            foreach (var mesh in meshes)
+            {
+                ParseMesh(mesh, scene, currentSkeleton);
+                if (OnImportProgressChanged != null)
+                    OnImportProgressChanged(((progress++) * 100) / total);
+            }
+        }
+
+        private void ParseAnimationClip(SkinningData skinningData, BabylonSkeleton skeleton)
+        {
+            foreach (var clipKey in skinningData.AnimationClips.Keys)
+            {
+                var clip = skinningData.AnimationClips[clipKey];
+                var duration = clip.Duration.TotalMilliseconds;
+                var dic = new Dictionary<int, List<BabylonAnimationKey>>();
+
+                foreach (var keyframe in clip.Keyframes)
+                {
+                    if (!dic.ContainsKey(keyframe.Bone))
+                    {
+                        dic.Add(keyframe.Bone, new List<BabylonAnimationKey>());
+                    }
+
+                    var currentTime = (float)(keyframe.Time.TotalMilliseconds * 100.0 / duration);
+
+                    dic[keyframe.Bone].Add(new BabylonAnimationKey
+                    {
+                        frame = currentTime,
+                        values = keyframe.Transform.ToMatrix().ToArray()
+                    });
+                }
+
+                foreach (var index in dic.Keys)
+                {
+                    var bone = skeleton.bones[index];
+                    var babylonAnimation = new BabylonAnimation { name = bone.name + "Animation", property = "_matrix", dataType = BabylonAnimation.DataType.Matrix, loopBehavior = InterpolationLoop.Cycle, framePerSecond = 60 };
+                    babylonAnimation.keys = dic[index].ToArray();
+                    bone.animation = babylonAnimation;
+                }
+
+                return; // Only one animation track
+            }
+        }
+
+        private void ParseBones(SkinningData skinningData, BabylonSkeleton skeleton)
+        {
+            // Bones
+            var bones = new List<BabylonBone>();
+            for (int boneIndex = 0; boneIndex < skinningData.BindPose.Count; boneIndex++)
+            {
+                var newBone = new BabylonBone();
+                bones.Add(newBone);
+
+                newBone.name = "bone" + boneIndex;
+                newBone.index = boneIndex;
+                newBone.matrix = skinningData.BindPose[boneIndex].ToMatrix().ToArray();
+                newBone.parentBoneIndex = skinningData.SkeletonHierarchy[boneIndex];
+            }
+
+            skeleton.bones = bones.ToArray();
+        }
+
+        void ParseMesh(ModelMesh modelMesh, BabylonScene scene, BabylonSkeleton skeleton)
+        {
+            var proxyID = ProxyMesh.CreateBabylonMesh(modelMesh.Name, scene);
+            int indexName = 0;
+
+            foreach (var part in modelMesh.MeshParts)
+            {
+                var material = exportedMaterials.First(m => m.Name == part.Effect.GetHashCode().ToString());
+
+                var indices = new ushort[part.PrimitiveCount * 3];
+                part.IndexBuffer.GetData(part.StartIndex * 2, indices, 0, indices.Length);
+
+                if (part.VertexBuffer.VertexDeclaration.VertexStride >= PositionNormalTexturedWeights.Stride)
+                {
+                    var mesh = new Mesh<PositionNormalTexturedWeights>(material);
+                    var vertices = new PositionNormalTexturedWeights[part.NumVertices];
+
+                    part.VertexBuffer.GetData(part.VertexOffset * part.VertexBuffer.VertexDeclaration.VertexStride, vertices, 0, vertices.Length, part.VertexBuffer.VertexDeclaration.VertexStride);
+
+                    for (int index = 0; index < vertices.Length; index++)
+                    {
+                        vertices[index].TextureCoordinates.Y = 1.0f - vertices[index].TextureCoordinates.Y;
+                    }
+
+                    mesh.AddPart(indexName.ToString(), vertices.ToList(), indices.Select(i => (int)i).ToList());
+                    mesh.CreateBabylonMesh(scene, proxyID, skeleton);
+                }
+                else
+                {
+                    var mesh = new Mesh<PositionNormalTextured>(material);
+                    var vertices = new PositionNormalTextured[part.NumVertices];
+                    part.VertexBuffer.GetData(part.VertexOffset * part.VertexBuffer.VertexDeclaration.VertexStride, vertices, 0, vertices.Length, part.VertexBuffer.VertexDeclaration.VertexStride);
+
+                    for (int index = 0; index < vertices.Length; index++)
+                    {
+                        vertices[index].TextureCoordinates.Y = 1.0f - vertices[index].TextureCoordinates.Y;
+                    }
+
+                    mesh.AddPart(indexName.ToString(), vertices.ToList(), indices.Select(i => (int)i).ToList());
+                    mesh.CreateBabylonMesh(scene, proxyID, skeleton);
+                }
+
+                indexName++;
+            }
+        }
+
+        void ParseEffect(Effect effect, BabylonScene scene)
+        {
+            var material = new StandardMaterial(effect.GetHashCode().ToString());
+
+            exportedMaterials.Add(material);
+
+            var basicEffect = effect as BasicEffect;
+            var skinnedEffect = effect as SkinnedEffect;
+
+            if (basicEffect != null)
+            {
+                material.Alpha = basicEffect.Alpha;
+                material.Diffuse = basicEffect.DiffuseColor.ToColor3();
+                material.Emissive = basicEffect.EmissiveColor.ToColor3();
+                material.Specular = basicEffect.SpecularColor.ToColor3();
+                material.SpecularPower = basicEffect.SpecularPower;
+            }
+            else
+            {
+                material.Alpha = skinnedEffect.Alpha;
+                material.Diffuse = skinnedEffect.DiffuseColor.ToColor3();
+                material.Emissive = skinnedEffect.EmissiveColor.ToColor3();
+                material.Specular = skinnedEffect.SpecularColor.ToColor3();
+                material.SpecularPower = skinnedEffect.SpecularPower;
+            }
+
+            var texture = basicEffect != null ? basicEffect.Texture : skinnedEffect.Texture;
+
+            if (texture != null)
+            {
+                var id = texture.GetHashCode().ToString();
+
+                if (!exportedTexturesFilename.ContainsKey(id))
+                {
+                    var tempPath = Path.GetTempPath();
+                    var width = texture.Width;
+                    var height = texture.Height;
+                    string filename;
+
+                    if (texture.Format != SurfaceFormat.Dxt1)
+                    {
+                        filename = Path.Combine(tempPath, texturesCount + ".png");
+                    }
+                    else
+                    {
+                        filename = Path.Combine(tempPath, texturesCount + ".jpg");
+                    }
+
+                    texturesCount++;
+
+                    using (var file = new FileStream(filename, FileMode.Create, FileAccess.Write))
+                    {
+                        if (texture.Format != SurfaceFormat.Dxt1)
+                        {
+                            texture.SaveAsPng(file, width, height);
+                        }
+                        else
+                        {
+                            texture.SaveAsJpeg(file, width, height);
+                        }
+                    }
+
+                    exportedTexturesFilename.Add(id, filename);
+                }
+
+                material.DiffuseTexture = exportedTexturesFilename[id];
+            }
+
+            material.CreateBabylonMaterial(scene);
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Properties/AssemblyInfo.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..7a26a9f
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Properties/AssemblyInfo.cs	
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("BabylonExport.Core")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("BabylonExport.Core")]
+[assembly: AssemblyCopyright("Copyright ©  2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("c960f8e7-d038-4054-b593-3449d420c1e8")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.AudioImporters.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.AudioImporters.dll
new file mode 100644
index 0000000..7f3876f
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.AudioImporters.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.EffectImporter.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.EffectImporter.dll
new file mode 100644
index 0000000..61f52fa
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.EffectImporter.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.FBXImporter.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.FBXImporter.dll
new file mode 100644
index 0000000..fcb59fc
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.FBXImporter.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.dll
new file mode 100644
index 0000000..aeefccf
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.VideoImporters.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.VideoImporters.dll
new file mode 100644
index 0000000..1e4ff00
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.VideoImporters.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.XImporter.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.XImporter.dll
new file mode 100644
index 0000000..69c9223
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.XImporter.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.dll
new file mode 100644
index 0000000..7e03d56
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Content.Pipeline.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll
new file mode 100644
index 0000000..ac8b20f
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/SharpDX.DXGI.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/SharpDX.DXGI.dll
new file mode 100644
index 0000000..d7aaf7c
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/SharpDX.DXGI.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/SharpDX.Direct3D9.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/SharpDX.Direct3D9.dll
new file mode 100644
index 0000000..ec1831f
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/SharpDX.Direct3D9.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/SharpDX.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/SharpDX.dll
new file mode 100644
index 0000000..2bde40a
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/SharpDX.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/SkinnedModel.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/SkinnedModel.dll
new file mode 100644
index 0000000..faf4c33
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/SkinnedModel.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/SkinnedModelPipeline.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/SkinnedModelPipeline.dll
new file mode 100644
index 0000000..64a8148
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/SkinnedModelPipeline.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Core.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Core.dll
new file mode 100644
index 0000000..adc9d97
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Core.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Core.DirectX10.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Core.DirectX10.dll
new file mode 100644
index 0000000..0c1603e
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Core.DirectX10.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Core.DirectX9.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Core.DirectX9.dll
new file mode 100644
index 0000000..22a0a03
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Core.DirectX9.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Interop.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Interop.dll
new file mode 100644
index 0000000..3fb5971
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Nova.Interop.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Nova.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Nova.dll
new file mode 100644
index 0000000..a3bae61
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Nova.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Wrappers.DirectX.dll b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Wrappers.DirectX.dll
new file mode 100644
index 0000000..e8b6d11
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/Vertice.Wrappers.DirectX.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Refs/xnafx40_redist.msi b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/xnafx40_redist.msi
new file mode 100644
index 0000000..42bbb26
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.Core/Refs/xnafx40_redist.msi differ
diff --git a/Exporters/XNA - OBJ/BabylonExport.Core/Tools.cs b/Exporters/XNA - OBJ/BabylonExport.Core/Tools.cs
new file mode 100644
index 0000000..ac228c2
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Core/Tools.cs	
@@ -0,0 +1,54 @@
+﻿using SharpDX;
+using Vertice.Core;
+
+namespace BabylonExport.Core
+{
+    public static class Tools
+    {      
+        public static Color3 ToColor3(this Microsoft.Xna.Framework.Vector3 value)
+        {
+            return new Color3(value.X, value.Y, value.Z);
+        }
+
+        public static float[] ToArray(this RGBAColor color)
+        {
+            return new []{color.Red, color.Green, color.Blue, color.Alpha};
+        }
+
+        public static float[] ToArray(this Vertice.Core.Vector3 vector3)
+        {
+            return new[] { vector3.X, vector3.Y, vector3.Z };
+        }
+
+        public static float[] ToArray(this Vertice.Core.Matrix matrix)
+        {
+            return new[]
+            {
+                matrix.M11, matrix.M12, matrix.M13, matrix.M14,
+                matrix.M21, matrix.M22, matrix.M23, matrix.M24,
+                matrix.M31, matrix.M32, matrix.M33, matrix.M34,
+                matrix.M41, matrix.M42, matrix.M43, matrix.M44,
+            };
+        }
+
+        public static float[] ToArray(this Vertice.Core.Vector4 vector4)
+        {
+            return new[] { vector4.X, vector4.Y, vector4.Z, vector4.W };
+        }
+
+        public static float[] ToArray(this Vertice.Core.Quaternion quaternion)
+        {
+            return new[] { quaternion.X, quaternion.Y, quaternion.Z, quaternion.W };
+        }
+
+        public static SharpDX.Matrix ToMatrix(this Microsoft.Xna.Framework.Matrix value)
+        {
+            return new SharpDX.Matrix(
+                value.M11, value.M12, value.M13, value.M14,
+                value.M21, value.M22, value.M23, value.M24,
+                value.M31, value.M32, value.M33, value.M34,
+                value.M41, value.M42, value.M43, value.M44
+                );
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Interface/BabylonExport.Interface.csproj b/Exporters/XNA - OBJ/BabylonExport.Interface/BabylonExport.Interface.csproj
new file mode 100644
index 0000000..5ff1217
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Interface/BabylonExport.Interface.csproj	
@@ -0,0 +1,58 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{DEC52846-FFCB-4A66-9F13-64F65B61EDBA}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>BabylonExport.Interface</RootNamespace>
+    <AssemblyName>BabylonExport.Interface</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SccProjectName>SAK</SccProjectName>
+    <SccLocalPath>SAK</SccLocalPath>
+    <SccAuxPath>SAK</SccAuxPath>
+    <SccProvider>SAK</SccProvider>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="IService.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file
diff --git a/Exporters/XNA - OBJ/BabylonExport.Interface/IService.cs b/Exporters/XNA - OBJ/BabylonExport.Interface/IService.cs
new file mode 100644
index 0000000..a7658c1
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Interface/IService.cs	
@@ -0,0 +1,17 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.ServiceModel;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BabylonExport.Interface
+{
+
+    [ServiceContract]
+    public interface IService
+    {
+        [OperationContract]
+        bool Convert(string file, string outputName);
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport.Interface/Properties/AssemblyInfo.cs b/Exporters/XNA - OBJ/BabylonExport.Interface/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..ba7a22b
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport.Interface/Properties/AssemblyInfo.cs	
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("BabylonExport.Interface")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("BabylonExport.Interface")]
+[assembly: AssemblyCopyright("Copyright ©  2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("99970c29-2668-4b9f-858a-f32c260bcc12")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Exporters/XNA - OBJ/BabylonExport.zip b/Exporters/XNA - OBJ/BabylonExport.zip
new file mode 100644
index 0000000..e98de35
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport.zip differ
diff --git a/Exporters/XNA - OBJ/BabylonExport/App.config b/Exporters/XNA - OBJ/BabylonExport/App.config
new file mode 100644
index 0000000..b21ce51
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport/App.config	
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<configuration>
+  <startup useLegacyV2RuntimeActivationPolicy="true"> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
+    </startup>
+</configuration>
diff --git a/Exporters/XNA - OBJ/BabylonExport/BabylonExport.csproj b/Exporters/XNA - OBJ/BabylonExport/BabylonExport.csproj
new file mode 100644
index 0000000..c6bf094
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport/BabylonExport.csproj	
@@ -0,0 +1,941 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{1E0A8EB2-7022-42E2-8970-F0374188A09D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>BabylonExport</RootNamespace>
+    <AssemblyName>BabylonExport</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SccProjectName>SAK</SccProjectName>
+    <SccLocalPath>SAK</SccLocalPath>
+    <SccAuxPath>SAK</SccAuxPath>
+    <SccProvider>SAK</SccProvider>
+    <TargetFrameworkProfile />
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup>
+    <StartupObject />
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline">
+      <HintPath>..\BabylonExport.Core\Refs\Microsoft.Xna.Framework.Content.Pipeline.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.AudioImporters">
+      <HintPath>..\BabylonExport.Core\Refs\Microsoft.Xna.Framework.Content.Pipeline.AudioImporters.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.EffectImporter">
+      <HintPath>..\BabylonExport.Core\Refs\Microsoft.Xna.Framework.Content.Pipeline.EffectImporter.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.FBXImporter">
+      <HintPath>..\BabylonExport.Core\Refs\Microsoft.Xna.Framework.Content.Pipeline.FBXImporter.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.TextureImporter">
+      <HintPath>..\BabylonExport.Core\Refs\Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.VideoImporters">
+      <HintPath>..\BabylonExport.Core\Refs\Microsoft.Xna.Framework.Content.Pipeline.VideoImporters.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Xna.Framework.Content.Pipeline.XImporter">
+      <HintPath>..\BabylonExport.Core\Refs\Microsoft.Xna.Framework.Content.Pipeline.XImporter.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="Microsoft.Xna.Framework.Tools.Packaging.Tasks">
+      <HintPath>..\BabylonExport.Core\Refs\Microsoft.Xna.Framework.Tools.Packaging.Tasks.dll</HintPath>
+    </Reference>
+    <Reference Include="SkinnedModel, Version=1.0.0.0, Culture=neutral, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\BabylonExport.Core\Refs\SkinnedModel.dll</HintPath>
+    </Reference>
+    <Reference Include="SkinnedModelPipeline">
+      <HintPath>..\BabylonExport.Core\Refs\SkinnedModelPipeline.dll</HintPath>
+    </Reference>
+    <Reference Include="System">
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Core">
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Drawing">
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization">
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Windows.Forms">
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="Microsoft.CSharp">
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Data">
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Xml">
+      <Private>True</Private>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Program.cs" />
+    <Compile Include="Service.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="generateAll.bat">
+      <!--<CopyToOutputDirectory>Always</CopyToOutputDirectory>-->
+    </Content>
+    <None Include="Test scenes\Chimie\BalanceDM.dds" />
+    <None Include="Test scenes\Chimie\BalanceLightingMap.dds" />
+    <None Include="Test scenes\Chimie\BoisLightingMap.dds" />
+    <None Include="Test scenes\Chimie\Book.dds" />
+    <None Include="Test scenes\Chimie\Box029CompleteMap.dds" />
+    <None Include="Test scenes\Chimie\Box079LightingMap.dds" />
+    <None Include="Test scenes\Chimie\Briquesblanches.dds" />
+    <None Include="Test scenes\Chimie\BullesB.dds" />
+    <None Include="Test scenes\Chimie\Bumpverre.dds" />
+    <None Include="Test scenes\Chimie\ChalkboardCompleteMap.dds" />
+    <None Include="Test scenes\Chimie\Chimie.dds" />
+    <None Include="Test scenes\Chimie\ChromeLightingMap.dds" />
+    <None Include="Test scenes\Chimie\Cylinder008LightingMap.dds" />
+    <None Include="Test scenes\Chimie\flamme-gaz.dds" />
+    <None Include="Test scenes\Chimie\Floor.dds" />
+    <None Include="Test scenes\Chimie\Graph.dds" />
+    <None Include="Test scenes\Chimie\Gris somreLightingMap.dds" />
+    <None Include="Test scenes\Chimie\Heart.mxb" />
+    <None Include="Test scenes\Chimie\Liquide002LightingMap.dds" />
+    <None Include="Test scenes\Chimie\Marble.dds" />
+    <None Include="Test scenes\Chimie\MursLightingMap.dds" />
+    <None Include="Test scenes\Chimie\Object1LightingMap.dds" />
+    <None Include="Test scenes\Chimie\Ordi001LightingMap.dds" />
+    <None Include="Test scenes\Chimie\OrdiDiffuseMap.dds" />
+    <None Include="Test scenes\Chimie\PaillasseLightingMap.dds" />
+    <None Include="Test scenes\Chimie\Plane003LightingMap.dds" />
+    <None Include="Test scenes\Chimie\Plaque.dds" />
+    <None Include="Test scenes\Chimie\ref1.dds" />
+    <None Include="Test scenes\Chimie\Sky.dds" />
+    <None Include="Test scenes\Chimie\VerreLightingMap.dds" />
+    <None Include="Test scenes\Chimie\Wood.dds" />
+    <None Include="Test scenes\Dude\dude.fbx" />
+    <None Include="Test scenes\Espilit\arbresmassif.dds" />
+    <None Include="Test scenes\Espilit\Blanc.dds" />
+    <None Include="Test scenes\Espilit\Booklet.dds" />
+    <None Include="Test scenes\Espilit\BouteilleBlanc.dds" />
+    <None Include="Test scenes\Espilit\BouteilleRouge.dds" />
+    <None Include="Test scenes\Espilit\ChaisesLightingMap.dds" />
+    <None Include="Test scenes\Espilit\ChaisesSpecMap.dds" />
+    <None Include="Test scenes\Espilit\Chassis table CorbuLightingMap.dds" />
+    <None Include="Test scenes\Espilit\Ciel.dds" />
+    <None Include="Test scenes\Espilit\concrete3.dds" />
+    <None Include="Test scenes\Espilit\concrete5.dds" />
+    <None Include="Test scenes\Espilit\Cuir.dds" />
+    <None Include="Test scenes\Espilit\Depliant.dds" />
+    <None Include="Test scenes\Espilit\DepliantLightingMap.dds" />
+    <None Include="Test scenes\Espilit\Espilit.mxb" />
+    <None Include="Test scenes\Espilit\Espilit.mxb.delta" />
+    <None Include="Test scenes\Espilit\Espilit.nss" />
+    <None Include="Test scenes\Espilit\Expo1.dds" />
+    <None Include="Test scenes\Espilit\Expo2.dds" />
+    <None Include="Test scenes\Espilit\Fond tableau02LightingMap.dds" />
+    <None Include="Test scenes\Espilit\Fondtableaunew02LightingMap.dds" />
+    <None Include="Test scenes\Espilit\GravierDiff.dds" />
+    <None Include="Test scenes\Espilit\herbe2.dds" />
+    <None Include="Test scenes\Espilit\Line01CompMap.dds" />
+    <None Include="Test scenes\Espilit\Line01LightingMap.dds" />
+    <None Include="Test scenes\Espilit\Metal NoirLightingMap.dds" />
+    <None Include="Test scenes\Espilit\Murs pansLightingMap.dds" />
+    <None Include="Test scenes\Espilit\MursLightingMap.dds" />
+    <None Include="Test scenes\Espilit\Noir.dds" />
+    <None Include="Test scenes\Espilit\PanneauAide.dds" />
+    <None Include="Test scenes\Espilit\Plaques Faux PlafondsLightingMap.dds" />
+    <None Include="Test scenes\Espilit\PlaquesPlafond.dds" />
+    <None Include="Test scenes\Espilit\Refcube.dds" />
+    <None Include="Test scenes\Espilit\Refcubenoire.dds" />
+    <None Include="Test scenes\Espilit\Refsol.dds" />
+    <None Include="Test scenes\Espilit\Rochers.dds" />
+    <None Include="Test scenes\Espilit\Rouge.dds" />
+    <None Include="Test scenes\Espilit\Sol.dds" />
+    <None Include="Test scenes\Espilit\SolsLightingMap.dds" />
+    <None Include="Test scenes\Espilit\Spec.dds" />
+    <None Include="Test scenes\Espilit\T33LightingMap.dds" />
+    <None Include="Test scenes\Espilit\TableauxDiffuseMap.dds" />
+    <None Include="Test scenes\Espilit\Tables bonettoLightingMap.dds" />
+    <None Include="Test scenes\Espilit\Tapis.dds" />
+    <None Include="Test scenes\Espilit\Titre1.dds" />
+    <None Include="Test scenes\Espilit\TitreAide.dds" />
+    <None Include="Test scenes\Espilit\TitreCam.dds" />
+    <None Include="Test scenes\Espilit\Toile.dds" />
+    <None Include="Test scenes\Espilit\Tree.dds" />
+    <None Include="Test scenes\Espilit\VerreBump.dds" />
+    <None Include="Test scenes\Flat2009\1.dds" />
+    <None Include="Test scenes\Flat2009\2.dds" />
+    <None Include="Test scenes\Flat2009\3.dds" />
+    <None Include="Test scenes\Flat2009\3602.dds" />
+    <None Include="Test scenes\Flat2009\3602low.dds" />
+    <None Include="Test scenes\Flat2009\4.dds" />
+    <None Include="Test scenes\Flat2009\Affiches.dds" />
+    <None Include="Test scenes\Flat2009\Affiches2.dds" />
+    <None Include="Test scenes\Flat2009\AquariumLM.dds" />
+    <None Include="Test scenes\Flat2009\BathTapis.dds" />
+    <None Include="Test scenes\Flat2009\beton.dds" />
+    <None Include="Test scenes\Flat2009\Betonmurs.dds" />
+    <None Include="Test scenes\Flat2009\Bibelots.dds" />
+    <None Include="Test scenes\Flat2009\bibelotslightingmap.dds" />
+    <None Include="Test scenes\Flat2009\boisclair.dds" />
+    <None Include="Test scenes\Flat2009\Boisplandetravail.dds" />
+    <None Include="Test scenes\Flat2009\Boisrouge.dds" />
+    <None Include="Test scenes\Flat2009\bOUQUINS.DDS" />
+    <None Include="Test scenes\Flat2009\Bruitverre.dds" />
+    <None Include="Test scenes\Flat2009\Btn.dds" />
+    <None Include="Test scenes\Flat2009\Btn2.dds" />
+    <None Include="Test scenes\Flat2009\Btn3.dds" />
+    <None Include="Test scenes\Flat2009\Bulles.dds" />
+    <None Include="Test scenes\Flat2009\Bumpcuir.dds" />
+    <None Include="Test scenes\Flat2009\canap1lightingmap.dds" />
+    <None Include="Test scenes\Flat2009\canap1lightingmap2.dds" />
+    <None Include="Test scenes\Flat2009\CarreauxVerreBump.dds" />
+    <None Include="Test scenes\Flat2009\CarreauxVerreDiff.dds" />
+    <None Include="Test scenes\Flat2009\CarreauxVerreNM.dds" />
+    <None Include="Test scenes\Flat2009\ChassisboisLightingMap.dds" />
+    <None Include="Test scenes\Flat2009\Clavier2.dds" />
+    <None Include="Test scenes\Flat2009\CouverturesA.dds" />
+    <None Include="Test scenes\Flat2009\Couvrante1.dds" />
+    <None Include="Test scenes\Flat2009\Couvrante2.dds" />
+    <None Include="Test scenes\Flat2009\cuir.dds" />
+    <None Include="Test scenes\Flat2009\cuirBleu.dds" />
+    <None Include="Test scenes\Flat2009\cuirNoir.dds" />
+    <None Include="Test scenes\Flat2009\Cuivre.dds" />
+    <None Include="Test scenes\Flat2009\drapsNM.dds" />
+    <None Include="Test scenes\Flat2009\Eau.dds" />
+    <None Include="Test scenes\Flat2009\EcranPC1.dds" />
+    <None Include="Test scenes\Flat2009\Facade.dds" />
+    <None Include="Test scenes\Flat2009\Faience.dds" />
+    <None Include="Test scenes\Flat2009\Flat2009.mxb" />
+    <None Include="Test scenes\Flat2009\four.dds" />
+    <None Include="Test scenes\Flat2009\Fresnel1.dds" />
+    <None Include="Test scenes\Flat2009\Fresnel2.dds" />
+    <None Include="Test scenes\Flat2009\GresNM.dds" />
+    <None Include="Test scenes\Flat2009\Grille.dds" />
+    <None Include="Test scenes\Flat2009\Grès.dds" />
+    <None Include="Test scenes\Flat2009\GuitareExplo.dds" />
+    <None Include="Test scenes\Flat2009\GuitareFV.dds" />
+    <None Include="Test scenes\Flat2009\GuitarSG.dds" />
+    <None Include="Test scenes\Flat2009\Halo.dds" />
+    <None Include="Test scenes\Flat2009\Halogene.dds" />
+    <None Include="Test scenes\Flat2009\Here.dds" />
+    <None Include="Test scenes\Flat2009\induction.dds" />
+    <None Include="Test scenes\Flat2009\Inter.dds" />
+    <None Include="Test scenes\Flat2009\LakeRef.dds" />
+    <None Include="Test scenes\Flat2009\LampeSalonDiff.dds" />
+    <None Include="Test scenes\Flat2009\Layout.dds" />
+    <None Include="Test scenes\Flat2009\Machines.dds" />
+    <None Include="Test scenes\Flat2009\Marbre1.dds" />
+    <None Include="Test scenes\Flat2009\MarkLitCHParents.dds" />
+    <None Include="Test scenes\Flat2009\MarkMarshall.dds" />
+    <None Include="Test scenes\Flat2009\MarkMobilier.dds" />
+    <None Include="Test scenes\Flat2009\MarkRideauCatz.dds" />
+    <None Include="Test scenes\Flat2009\MarkSolCHparents.dds" />
+    <None Include="Test scenes\Flat2009\Marshall.dds" />
+    <None Include="Test scenes\Flat2009\MCanape.dds" />
+    <None Include="Test scenes\Flat2009\Mcanape3.dds" />
+    <None Include="Test scenes\Flat2009\Metal1.dds" />
+    <None Include="Test scenes\Flat2009\meubleslightingmap.dds" />
+    <None Include="Test scenes\Flat2009\MExplor.dds" />
+    <None Include="Test scenes\Flat2009\Mfauteuil.dds" />
+    <None Include="Test scenes\Flat2009\MFLying.dds" />
+    <None Include="Test scenes\Flat2009\Mfour.dds" />
+    <None Include="Test scenes\Flat2009\MoquetteRouge.dds" />
+    <None Include="Test scenes\Flat2009\MoquetteSAM.dds" />
+    <None Include="Test scenes\Flat2009\MoquetteVerte.dds" />
+    <None Include="Test scenes\Flat2009\MoquetteVioline.dds" />
+    <None Include="Test scenes\Flat2009\MSG.dds" />
+    <None Include="Test scenes\Flat2009\MTableauSalon.dds" />
+    <None Include="Test scenes\Flat2009\Mtele.dds" />
+    <None Include="Test scenes\Flat2009\MurCh1.dds" />
+    <None Include="Test scenes\Flat2009\MurCH2.dds" />
+    <None Include="Test scenes\Flat2009\MurCh3.dds" />
+    <None Include="Test scenes\Flat2009\MurEditBrique.dds" />
+    <None Include="Test scenes\Flat2009\MurEditBriqueNM.dds" />
+    <None Include="Test scenes\Flat2009\MurEditStickers.dds" />
+    <None Include="Test scenes\Flat2009\MurEditStickers2.dds" />
+    <None Include="Test scenes\Flat2009\MurEditStickersSpec.dds" />
+    <None Include="Test scenes\Flat2009\murschambreverteNM.dds" />
+    <None Include="Test scenes\Flat2009\Murscuisine.dds" />
+    <None Include="Test scenes\Flat2009\MurSDB.dds" />
+    <None Include="Test scenes\Flat2009\MurSDBBump.dds" />
+    <None Include="Test scenes\Flat2009\MursToilettes.dds" />
+    <None Include="Test scenes\Flat2009\MursToilettes2.dds" />
+    <None Include="Test scenes\Flat2009\MursToilettes2Spec.dds" />
+    <None Include="Test scenes\Flat2009\paillasse.dds" />
+    <None Include="Test scenes\Flat2009\paintsalon.dds" />
+    <None Include="Test scenes\Flat2009\PaintSalon2.dds" />
+    <None Include="Test scenes\Flat2009\PaintSalon3.dds" />
+    <None Include="Test scenes\Flat2009\Part1.dds" />
+    <None Include="Test scenes\Flat2009\PlanteA2Alt.dds" />
+    <None Include="Test scenes\Flat2009\PlanteAAlt.dds" />
+    <None Include="Test scenes\Flat2009\PlanteaLT.dds" />
+    <None Include="Test scenes\Flat2009\poigneefenetreslightingmap.dds" />
+    <None Include="Test scenes\Flat2009\Poisson1Alt.dds" />
+    <None Include="Test scenes\Flat2009\PPbois.dds" />
+    <None Include="Test scenes\Flat2009\PPboisNM.DDS" />
+    <None Include="Test scenes\Flat2009\PriseMurale.dds" />
+    <None Include="Test scenes\Flat2009\Ref1.dds" />
+    <None Include="Test scenes\Flat2009\RefChrome.dds" />
+    <None Include="Test scenes\Flat2009\RefChromeRouge.dds" />
+    <None Include="Test scenes\Flat2009\RefTableau.dds" />
+    <None Include="Test scenes\Flat2009\Ref_probe.dds" />
+    <None Include="Test scenes\Flat2009\SAMParquet.dds" />
+    <None Include="Test scenes\Flat2009\SANDAlt.dds" />
+    <None Include="Test scenes\Flat2009\Serviettes.dds" />
+    <None Include="Test scenes\Flat2009\Shanghai_1933.dds" />
+    <None Include="Test scenes\Flat2009\Solcarreaux.dds" />
+    <None Include="Test scenes\Flat2009\Solcarreauxbump.dds" />
+    <None Include="Test scenes\Flat2009\sollightingmap.dds" />
+    <None Include="Test scenes\Flat2009\Souris.dds" />
+    <None Include="Test scenes\Flat2009\tablauxlightingmap.dds" />
+    <None Include="Test scenes\Flat2009\TapisserieJaune.dds" />
+    <None Include="Test scenes\Flat2009\Tele.dds" />
+    <None Include="Test scenes\Flat2009\Telespec.dds" />
+    <None Include="Test scenes\Flat2009\tentures.dds" />
+    <None Include="Test scenes\Flat2009\tentures2.dds" />
+    <None Include="Test scenes\Flat2009\Test2.dds" />
+    <None Include="Test scenes\Flat2009\vitres01lightingmap.dds" />
+    <None Include="Test scenes\Flat2009\wallslightingmap2.dds" />
+    <None Include="Test scenes\Flat2009\wallslightingmap3.dds" />
+    <None Include="Test scenes\Rabbit\Rabbit.fbx" />
+    <None Include="Test scenes\Robot\Robot.mxb" />
+    <None Include="Test scenes\SpaceDeK\Bidule1.dds" />
+    <None Include="Test scenes\SpaceDeK\Bidule1SI.dds" />
+    <None Include="Test scenes\SpaceDeK\Bidulelaser.dds" />
+    <None Include="Test scenes\SpaceDeK\BidulelaserSI.dds" />
+    <None Include="Test scenes\SpaceDeK\BiduleOmega.dds" />
+    <None Include="Test scenes\SpaceDeK\Biduleshield.dds" />
+    <None Include="Test scenes\SpaceDeK\BiduleShieldSI.dds" />
+    <None Include="Test scenes\SpaceDeK\Boss1DiffuseMap.dds" />
+    <None Include="Test scenes\SpaceDeK\Boss1Spec.dds" />
+    <None Include="Test scenes\SpaceDeK\Ennemi1DiffuseMap.dds" />
+    <None Include="Test scenes\SpaceDeK\Ennemi1SpecularMap.dds" />
+    <None Include="Test scenes\SpaceDeK\Explo.dds" />
+    <None Include="Test scenes\SpaceDeK\Explo2.dds" />
+    <None Include="Test scenes\SpaceDeK\Laser1.dds" />
+    <None Include="Test scenes\SpaceDeK\Laser2.dds" />
+    <None Include="Test scenes\SpaceDeK\Missile.DDS" />
+    <None Include="Test scenes\SpaceDeK\Part.dds" />
+    <None Include="Test scenes\SpaceDeK\Premplan.dds" />
+    <None Include="Test scenes\SpaceDeK\Protec.dds" />
+    <None Include="Test scenes\SpaceDeK\ProtecSpec.dds" />
+    <None Include="Test scenes\SpaceDeK\refext2.dds" />
+    <None Include="Test scenes\SpaceDeK\SpaceDek.mxb" />
+    <None Include="Test scenes\Spaceship\SpaceShip.fbx" />
+    <None Include="Test scenes\TestAnim\testanim.mxb" />
+    <None Include="Test scenes\TheCar\BarresLightingMap.dds" />
+    <None Include="Test scenes\TheCar\beigeLightingMap.dds" />
+    <None Include="Test scenes\TheCar\Bequet.dds" />
+    <None Include="Test scenes\TheCar\BequetB.dds" />
+    <None Include="Test scenes\TheCar\Bequetnoir.dds" />
+    <None Include="Test scenes\TheCar\betonext.dds" />
+    <None Include="Test scenes\TheCar\bodyLightingMap.dds" />
+    <None Include="Test scenes\TheCar\Bois.dds" />
+    <None Include="Test scenes\TheCar\Boutons.dds" />
+    <None Include="Test scenes\TheCar\BOUTONS2.dds" />
+    <None Include="Test scenes\TheCar\C-Max_commande_retrosDiffuseMap.dds" />
+    <None Include="Test scenes\TheCar\CarrosserieLightingMap.dds" />
+    <None Include="Test scenes\TheCar\CarrosserieLightingMapB.dds" />
+    <None Include="Test scenes\TheCar\CarrosserieLightingMapNoire.dds" />
+    <None Include="Test scenes\TheCar\ChassisverreLightingMap.dds" />
+    <None Include="Test scenes\TheCar\cheminee.dds" />
+    <None Include="Test scenes\TheCar\ChemineeLightingMap.dds" />
+    <None Include="Test scenes\TheCar\Ciel15.dds" />
+    <None Include="Test scenes\TheCar\Ciment1.dds" />
+    <None Include="Test scenes\TheCar\Ciment1NM.dds" />
+    <None Include="Test scenes\TheCar\Cligno.dds" />
+    <None Include="Test scenes\TheCar\degradecine.dds" />
+    <None Include="Test scenes\TheCar\DSC_5082.dds" />
+    <None Include="Test scenes\TheCar\eaubump.dds" />
+    <None Include="Test scenes\TheCar\Feuarr.dds" />
+    <None Include="Test scenes\TheCar\FeuxarrNM.dds" />
+    <None Include="Test scenes\TheCar\flare0.dds" />
+    <None Include="Test scenes\TheCar\Ford_02.dds" />
+    <None Include="Test scenes\TheCar\foret.dds" />
+    <None Include="Test scenes\TheCar\Ghia.dds" />
+    <None Include="Test scenes\TheCar\goudron.dds" />
+    <None Include="Test scenes\TheCar\gps.dds" />
+    <None Include="Test scenes\TheCar\gRILLE.dds" />
+    <None Include="Test scenes\TheCar\gRILLEnm.dds" />
+    <None Include="Test scenes\TheCar\immeublesLightingMap.dds" />
+    <None Include="Test scenes\TheCar\interface.dds" />
+    <None Include="Test scenes\TheCar\layout.dds" />
+    <None Include="Test scenes\TheCar\LAYOUT3.dds" />
+    <None Include="Test scenes\TheCar\leather_bump.dds" />
+    <None Include="Test scenes\TheCar\Line03LightingMap.dds" />
+    <None Include="Test scenes\TheCar\lumLightingMap.dds" />
+    <None Include="Test scenes\TheCar\Madewith58.dds" />
+    <None Include="Test scenes\TheCar\Metal.dds" />
+    <None Include="Test scenes\TheCar\MetalLightingMap.dds" />
+    <None Include="Test scenes\TheCar\metalrouille.dds" />
+    <None Include="Test scenes\TheCar\metalrouilleNM.dds" />
+    <None Include="Test scenes\TheCar\metalrouilletubes.dds" />
+    <None Include="Test scenes\TheCar\metalrouilletubesNM.dds" />
+    <None Include="Test scenes\TheCar\Murs1.dds" />
+    <None Include="Test scenes\TheCar\Murs1NM.dds" />
+    <None Include="Test scenes\TheCar\Mursext.dds" />
+    <None Include="Test scenes\TheCar\MursLightingMap.dds" />
+    <None Include="Test scenes\TheCar\Phareav.dds" />
+    <None Include="Test scenes\TheCar\Plaque.dds" />
+    <None Include="Test scenes\TheCar\PlaqueLightingMap.dds" />
+    <None Include="Test scenes\TheCar\PlaqueNM.dds" />
+    <None Include="Test scenes\TheCar\Plaqueshautes.dds" />
+    <None Include="Test scenes\TheCar\PlaqueshautesNM.dds" />
+    <None Include="Test scenes\TheCar\portable.dds" />
+    <None Include="Test scenes\TheCar\Porte1LightingMap.dds" />
+    <None Include="Test scenes\TheCar\PortesMetal.dds" />
+    <None Include="Test scenes\TheCar\PortesMetalNM.dds" />
+    <None Include="Test scenes\TheCar\PoteauIPNLightingMap.dds" />
+    <None Include="Test scenes\TheCar\PoutreLightingMap.dds" />
+    <None Include="Test scenes\TheCar\refcube3.dds" />
+    <None Include="Test scenes\TheCar\refcubephare.dds" />
+    <None Include="Test scenes\TheCar\Refsalon2.dds" />
+    <None Include="Test scenes\TheCar\reftest.dds" />
+    <None Include="Test scenes\TheCar\SolEcxtLightingMap.dds" />
+    <None Include="Test scenes\TheCar\SoustoitLightingMap.dds" />
+    <None Include="Test scenes\TheCar\Spec.dds" />
+    <None Include="Test scenes\TheCar\SupportstubesLightingMap.dds" />
+    <None Include="Test scenes\TheCar\TheCar.mxb" />
+    <None Include="Test scenes\TheCar\TubesLightingMap.dds" />
+    <None Include="Test scenes\TheCar\tyre002b.dds" />
+    <None Include="Test scenes\TheCar\vitesses.dds" />
+    <None Include="Test scenes\TheCar\Vitres opac.dds" />
+    <None Include="Test scenes\TheCar\Vitres.dds" />
+    <None Include="Test scenes\TheCar\vitrescasees1.dds" />
+    <None Include="Test scenes\TheCar\vitrescasees2.dds" />
+    <None Include="Test scenes\TheCar\vitresloin.dds" />
+    <None Include="Test scenes\TheCar\volant.dds" />
+    <None Include="Test scenes\TheCar\wood.dds" />
+    <None Include="Test scenes\TheCar\WOODlm.dds" />
+    <None Include="Test scenes\Train\Train.babylon" />
+    <None Include="Test scenes\Train\train.mxb" />
+    <None Include="Test scenes\Viper\Viper.mtl" />
+    <None Include="Test scenes\Viper\Viper.obj" />
+    <None Include="App.config" />
+    <None Include="packages.config" />
+    <None Include="Test scenes\Wcafe\Affiches.dds" />
+    <None Include="Test scenes\Wcafe\Affiches2.dds" />
+    <None Include="Test scenes\Wcafe\Affiches3.dds" />
+    <None Include="Test scenes\Wcafe\AffichesLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\Bafle.dds" />
+    <None Include="Test scenes\Wcafe\BafleLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\Beton1.dds" />
+    <None Include="Test scenes\Wcafe\BlancUniLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\Bois2.dds" />
+    <None Include="Test scenes\Wcafe\Briques3.dds" />
+    <None Include="Test scenes\Wcafe\Canapé1LightingMap.dds" />
+    <None Include="Test scenes\Wcafe\Canette1.dds" />
+    <None Include="Test scenes\Wcafe\Canette2.dds" />
+    <None Include="Test scenes\Wcafe\ChaineHifi.dds" />
+    <None Include="Test scenes\Wcafe\ChaineHifi2.dds" />
+    <None Include="Test scenes\Wcafe\ChromeBrosséLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\ChromeLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\ColonnesLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\Coussins2LightingMap.dds" />
+    <None Include="Test scenes\Wcafe\CoussinsfauteuilLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\Cuir1Spec.dds" />
+    <None Include="Test scenes\Wcafe\Cuirbrun.dds" />
+    <None Include="Test scenes\Wcafe\CuirbrunSpec.dds" />
+    <None Include="Test scenes\Wcafe\CuiViolet.dds" />
+    <None Include="Test scenes\Wcafe\Degradebar.dds" />
+    <None Include="Test scenes\Wcafe\Degradé.dds" />
+    <None Include="Test scenes\Wcafe\Ecrantele1.dds" />
+    <None Include="Test scenes\Wcafe\EscalierLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\exit.dds" />
+    <None Include="Test scenes\Wcafe\FauteuilRond01LightingMap.dds" />
+    <None Include="Test scenes\Wcafe\Fauteuilsronds.dds" />
+    <None Include="Test scenes\Wcafe\Fndgris.dds" />
+    <None Include="Test scenes\Wcafe\Fndrouge2.dds" />
+    <None Include="Test scenes\Wcafe\Fondmeuble basLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\Fvert.dds" />
+    <None Include="Test scenes\Wcafe\Grille.dds" />
+    <None Include="Test scenes\Wcafe\liquiorange.dds" />
+    <None Include="Test scenes\Wcafe\Liquirouge.dds" />
+    <None Include="Test scenes\Wcafe\Liquivert.dds" />
+    <None Include="Test scenes\Wcafe\Logo.dds" />
+    <None Include="Test scenes\Wcafe\Masque1.dds" />
+    <None Include="Test scenes\Wcafe\Masque2.dds" />
+    <None Include="Test scenes\Wcafe\MurrdcLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\Mursdivers.dds" />
+    <None Include="Test scenes\Wcafe\NeonarcheAmbiant.dds" />
+    <None Include="Test scenes\Wcafe\NoirmatLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\Ordi.dds" />
+    <None Include="Test scenes\Wcafe\OrdiSI.dds" />
+    <None Include="Test scenes\Wcafe\OrdisLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\Pano2Alt.dds" />
+    <None Include="Test scenes\Wcafe\Pano5refNoirpurFloue.dds" />
+    <None Include="Test scenes\Wcafe\Parquet1.dds" />
+    <None Include="Test scenes\Wcafe\Parquet3.dds" />
+    <None Include="Test scenes\Wcafe\Peintureverte.dds" />
+    <None Include="Test scenes\Wcafe\PlafondsLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\Plancher2LightingMap.dds" />
+    <None Include="Test scenes\Wcafe\Plancherétage1LightingMap.dds" />
+    <None Include="Test scenes\Wcafe\PlotDiffuseMap.dds" />
+    <None Include="Test scenes\Wcafe\Produits.dds" />
+    <None Include="Test scenes\Wcafe\RedFlowers.dds" />
+    <None Include="Test scenes\Wcafe\Refcubenoire.dds" />
+    <None Include="Test scenes\Wcafe\Refcubenoireplate.dds" />
+    <None Include="Test scenes\Wcafe\Salade.dds" />
+    <None Include="Test scenes\Wcafe\SaladesLM.dds" />
+    <None Include="Test scenes\Wcafe\SolRDCLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\SpecMetalbrossé.dds" />
+    <None Include="Test scenes\Wcafe\Sponsor01DiffuseMap.dds" />
+    <None Include="Test scenes\Wcafe\Sticker haut.dds" />
+    <None Include="Test scenes\Wcafe\Surface.dds" />
+    <None Include="Test scenes\Wcafe\tableaux.dds" />
+    <None Include="Test scenes\Wcafe\TableSurfaceLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\tapis4.dds" />
+    <None Include="Test scenes\Wcafe\TapisLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\Tele.dds" />
+    <None Include="Test scenes\Wcafe\TeleSI.dds" />
+    <None Include="Test scenes\Wcafe\TéléLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\vENT.dds" />
+    <None Include="Test scenes\Wcafe\Verticola.dds" />
+    <None Include="Test scenes\Wcafe\Wcafe.mxb" />
+    <None Include="Test scenes\Wcafe\Wifi.dds" />
+    <None Include="Test scenes\Wcafe\Win7.dds" />
+    <None Include="Test scenes\Wcafe\Win7A.dds" />
+    <None Include="Test scenes\Wcafe\WinCafé1.dds" />
+    <None Include="Test scenes\Wcafe\WinCafé1IL.dds" />
+    <None Include="Test scenes\Wcafe\xBOXLightingMap.dds" />
+    <None Include="Test scenes\Wcafe\Xbrique.dds" />
+    <None Include="Test scenes\Wcafe\Zebu.dds" />
+    <None Include="Test scenes\Wcafe\ZincLightingMap.dds" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="DirectShow.Net.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Test scenes\Chimie\Coeur.jpg" />
+    <Content Include="Test scenes\Chimie\heartSpecjpg.jpg" />
+    <Content Include="Test scenes\Chimie\Labels.png" />
+    <Content Include="Test scenes\Dude\head.tga" />
+    <Content Include="Test scenes\Dude\jacket.tga" />
+    <Content Include="Test scenes\Dude\pants.tga" />
+    <Content Include="Test scenes\Dude\upBodyC.tga" />
+    <Content Include="Test scenes\Espilit\NovaScreenshot.jpg" />
+    <Content Include="Test scenes\Robot\DispenderDiffuseMap.dds" />
+    <Content Include="Test scenes\Robot\Dégrade.png" />
+    <Content Include="Test scenes\Robot\EnvAmbient Occlusion _MR.dds" />
+    <Content Include="Test scenes\Robot\Ref.dds" />
+    <Content Include="Test scenes\Robot\RobotCompmap.dds" />
+    <Content Include="Test scenes\Robot\RobotSpec.dds" />
+    <Content Include="Test scenes\Robot\Slide1.dds" />
+    <Content Include="Test scenes\SpaceDeK\FondSpace.jpg" />
+    <Content Include="Test scenes\SpaceDeK\Missile1SE.png" />
+    <Content Include="Test scenes\SpaceDeK\Missilespec.png" />
+    <Content Include="Test scenes\SpaceDeK\Part.jpg" />
+    <Content Include="Test scenes\SpaceDeK\react.jpg" />
+    <Content Include="Test scenes\SpaceDeK\React2.jpg" />
+    <Content Include="Test scenes\SpaceDeK\Vaisseau.bmp" />
+    <Content Include="Test scenes\SpaceDeK\Vaisseau000.bmp" />
+    <Content Include="Test scenes\SpaceDeK\VaisseauDiffuseMap.jpg" />
+    <Content Include="Test scenes\SpaceDeK\VaisseauSpecularMap.jpg" />
+    <Content Include="Test scenes\Spaceship\wedge_p2_diff_v1.tga" />
+    <Content Include="Test scenes\Train\barrieres_bois.dds" />
+    <Content Include="Test scenes\Train\barrieres_bois.jpg" />
+    <Content Include="Test scenes\Train\barrieres_bois_n.dds" />
+    <Content Include="Test scenes\Train\barrieres_bois_n.jpg" />
+    <Content Include="Test scenes\Train\bat_console_murs_ext_lm.dds" />
+    <Content Include="Test scenes\Train\bat_console_murs_ext_lm.jpg" />
+    <Content Include="Test scenes\Train\bat_console_murs_lm.dds" />
+    <Content Include="Test scenes\Train\bat_console_murs_lm.jpg" />
+    <Content Include="Test scenes\Train\bat_lm.dds" />
+    <Content Include="Test scenes\Train\bat_lm.jpg" />
+    <Content Include="Test scenes\Train\bg.dds" />
+    <Content Include="Test scenes\Train\bg_credits.dds" />
+    <Content Include="Test scenes\Train\bg_help.dds" />
+    <Content Include="Test scenes\Train\bosquet_grass.dds" />
+    <Content Include="Test scenes\Train\bosquet_grass.png" />
+    <Content Include="Test scenes\Train\bottes_paille.dds" />
+    <Content Include="Test scenes\Train\bottes_paille.jpg" />
+    <Content Include="Test scenes\Train\bottes_paille_face.dds" />
+    <Content Include="Test scenes\Train\bottes_paille_face.jpg" />
+    <Content Include="Test scenes\Train\champ_ble.dds" />
+    <Content Include="Test scenes\Train\champ_ble.png" />
+    <Content Include="Test scenes\Train\chariot_planche.dds" />
+    <Content Include="Test scenes\Train\chariot_planche.jpg" />
+    <Content Include="Test scenes\Train\chariot_planche_n.dds" />
+    <Content Include="Test scenes\Train\chariot_planche_n.jpg" />
+    <Content Include="Test scenes\Train\chariot_roue.dds" />
+    <Content Include="Test scenes\Train\chariot_roue.jpg" />
+    <Content Include="Test scenes\Train\chariot_roue_n.dds" />
+    <Content Include="Test scenes\Train\chariot_roue_n.jpg" />
+    <Content Include="Test scenes\Train\console.dds" />
+    <Content Include="Test scenes\Train\console.jpg" />
+    <Content Include="Test scenes\Train\console_n.dds" />
+    <Content Include="Test scenes\Train\console_n.jpg" />
+    <Content Include="Test scenes\Train\cubemap.dds" />
+    <Content Include="Test scenes\Train\cubemap5.dds" />
+    <Content Include="Test scenes\Train\cubemap5_nx.jpg" />
+    <Content Include="Test scenes\Train\cubemap5_ny.jpg" />
+    <Content Include="Test scenes\Train\cubemap5_nz.jpg" />
+    <Content Include="Test scenes\Train\cubemap5_px.jpg" />
+    <Content Include="Test scenes\Train\cubemap5_py.jpg" />
+    <Content Include="Test scenes\Train\cubemap5_pz.jpg" />
+    <Content Include="Test scenes\Train\cubemap_nx.jpg" />
+    <Content Include="Test scenes\Train\cubemap_ny.jpg" />
+    <Content Include="Test scenes\Train\cubemap_nz.jpg" />
+    <Content Include="Test scenes\Train\cubemap_px.jpg" />
+    <Content Include="Test scenes\Train\cubemap_py.jpg" />
+    <Content Include="Test scenes\Train\cubemap_pz.jpg" />
+    <Content Include="Test scenes\Train\cubemap_vitres.dds" />
+    <Content Include="Test scenes\Train\cubemap_vitres_nx.jpg" />
+    <Content Include="Test scenes\Train\cubemap_vitres_ny.jpg" />
+    <Content Include="Test scenes\Train\cubemap_vitres_nz.jpg" />
+    <Content Include="Test scenes\Train\cubemap_vitres_px.jpg" />
+    <Content Include="Test scenes\Train\cubemap_vitres_py.jpg" />
+    <Content Include="Test scenes\Train\cubemap_vitres_pz.jpg" />
+    <Content Include="Test scenes\Train\cuir.dds" />
+    <Content Include="Test scenes\Train\cuir.jpg" />
+    <Content Include="Test scenes\Train\cuir_n.dds" />
+    <Content Include="Test scenes\Train\cuir_n.jpg" />
+    <Content Include="Test scenes\Train\cur_default.cur" />
+    <Content Include="Test scenes\Train\cur_link.cur" />
+    <Content Include="Test scenes\Train\debug.txt" />
+    <Content Include="Test scenes\Train\disneyland_paris.dds" />
+    <Content Include="Test scenes\Train\disneyland_paris.jpg" />
+    <Content Include="Test scenes\Train\flechage.dds" />
+    <Content Include="Test scenes\Train\flechage.png" />
+    <Content Include="Test scenes\Train\flechage2.dds" />
+    <Content Include="Test scenes\Train\flechage2.png" />
+    <Content Include="Test scenes\Train\grass.dds" />
+    <Content Include="Test scenes\Train\grass.png" />
+    <Content Include="Test scenes\Train\grillage.dds" />
+    <Content Include="Test scenes\Train\grillage.png" />
+    <Content Include="Test scenes\Train\lens2.dds" />
+    <Content Include="Test scenes\Train\lens2.png" />
+    <Content Include="Test scenes\Train\lens3.dds" />
+    <Content Include="Test scenes\Train\lens3.png" />
+    <Content Include="Test scenes\Train\lens4.dds" />
+    <Content Include="Test scenes\Train\lens4.png" />
+    <Content Include="Test scenes\Train\lens5.dds" />
+    <Content Include="Test scenes\Train\lens5.png" />
+    <Content Include="Test scenes\Train\lens6.dds" />
+    <Content Include="Test scenes\Train\lens6.png" />
+    <Content Include="Test scenes\Train\lens_sun.dds" />
+    <Content Include="Test scenes\Train\light_blanche.dds" />
+    <Content Include="Test scenes\Train\light_jaune.dds" />
+    <Content Include="Test scenes\Train\light_rouge.dds" />
+    <Content Include="Test scenes\Train\light_verte.dds" />
+    <Content Include="Test scenes\Train\metal_rouille.dds" />
+    <Content Include="Test scenes\Train\metal_rouille.jpg" />
+    <Content Include="Test scenes\Train\metal_rouille_n.dds" />
+    <Content Include="Test scenes\Train\metal_rouille_n.jpg" />
+    <Content Include="Test scenes\Train\metal_tache.dds" />
+    <Content Include="Test scenes\Train\metal_tache.jpg" />
+    <Content Include="Test scenes\Train\metal_tache_n.dds" />
+    <Content Include="Test scenes\Train\metal_tache_n.jpg" />
+    <Content Include="Test scenes\Train\murs_wood.dds" />
+    <Content Include="Test scenes\Train\murs_wood.jpg" />
+    <Content Include="Test scenes\Train\murs_wood_n.dds" />
+    <Content Include="Test scenes\Train\murs_wood_n.jpg" />
+    <Content Include="Test scenes\Train\no_signal.dds" />
+    <Content Include="Test scenes\Train\no_signal.jpg" />
+    <Content Include="Test scenes\Train\OSVCenter.dds" />
+    <Content Include="Test scenes\Train\OSVCenterb.dds" />
+    <Content Include="Test scenes\Train\OSVFps.dds" />
+    <Content Include="Test scenes\Train\OSVFpsb.dds" />
+    <Content Include="Test scenes\Train\OSVFullScreen.dds" />
+    <Content Include="Test scenes\Train\OSVFullScreenb.dds" />
+    <Content Include="Test scenes\Train\OSVPan.dds" />
+    <Content Include="Test scenes\Train\OSVPanb.dds" />
+    <Content Include="Test scenes\Train\OSVRotation.dds" />
+    <Content Include="Test scenes\Train\OSVRotationb.dds" />
+    <Content Include="Test scenes\Train\OSVSound.dds" />
+    <Content Include="Test scenes\Train\OSVSoundb.dds" />
+    <Content Include="Test scenes\Train\OSVTemp.dds" />
+    <Content Include="Test scenes\Train\OSVTempb.dds" />
+    <Content Include="Test scenes\Train\OSVZoom.dds" />
+    <Content Include="Test scenes\Train\OSVZoomb.dds" />
+    <Content Include="Test scenes\Train\paille_alpha.dds" />
+    <Content Include="Test scenes\Train\paille_alpha.png" />
+    <Content Include="Test scenes\Train\pile_bois.dds" />
+    <Content Include="Test scenes\Train\pile_bois.jpg" />
+    <Content Include="Test scenes\Train\pile_bois_n.dds" />
+    <Content Include="Test scenes\Train\pile_bois_n.jpg" />
+    <Content Include="Test scenes\Train\planches.dds" />
+    <Content Include="Test scenes\Train\planches.jpg" />
+    <Content Include="Test scenes\Train\planches_n.dds" />
+    <Content Include="Test scenes\Train\planches_n.jpg" />
+    <Content Include="Test scenes\Train\poteaux.dds" />
+    <Content Include="Test scenes\Train\poteaux.jpg" />
+    <Content Include="Test scenes\Train\poteaux_n.dds" />
+    <Content Include="Test scenes\Train\poteaux_n.jpg" />
+    <Content Include="Test scenes\Train\poubelle.dds" />
+    <Content Include="Test scenes\Train\poubelle.jpg" />
+    <Content Include="Test scenes\Train\poubelle_n.dds" />
+    <Content Include="Test scenes\Train\poubelle_n.jpg" />
+    <Content Include="Test scenes\Train\rochers_big.dds" />
+    <Content Include="Test scenes\Train\rochers_big.jpg" />
+    <Content Include="Test scenes\Train\rochers_big_n.dds" />
+    <Content Include="Test scenes\Train\rochers_big_n.jpg" />
+    <Content Include="Test scenes\Train\rock_tunnel.dds" />
+    <Content Include="Test scenes\Train\rock_tunnel.jpg" />
+    <Content Include="Test scenes\Train\rock_tunnel_n.dds" />
+    <Content Include="Test scenes\Train\rock_tunnel_n.jpg" />
+    <Content Include="Test scenes\Train\sacs_sable.dds" />
+    <Content Include="Test scenes\Train\sacs_sable.jpg" />
+    <Content Include="Test scenes\Train\sacs_sable_n.dds" />
+    <Content Include="Test scenes\Train\sacs_sable_n.jpg" />
+    <Content Include="Test scenes\Train\sapin_leaves.dds" />
+    <Content Include="Test scenes\Train\sapin_leaves.png" />
+    <Content Include="Test scenes\Train\sapin_trunk_up.dds" />
+    <Content Include="Test scenes\Train\sapin_trunk_up.jpg" />
+    <Content Include="Test scenes\Train\sapin_trunk_up_n.dds" />
+    <Content Include="Test scenes\Train\sapin_trunk_up_n.jpg" />
+    <Content Include="Test scenes\Train\skydome.dds" />
+    <Content Include="Test scenes\Train\skydome.jpg" />
+    <Content Include="Test scenes\Train\smoke.dds" />
+    <Content Include="Test scenes\Train\smoke.png" />
+    <Content Include="Test scenes\Train\snd_bg.mp3" />
+    <Content Include="Test scenes\Train\snd_bt_clic.mp3" />
+    <Content Include="Test scenes\Train\snd_bt_clic_ui.wma" />
+    <Content Include="Test scenes\Train\snd_bt_roll.mp3" />
+    <Content Include="Test scenes\Train\snd_coaster_cry.mp3" />
+    <Content Include="Test scenes\Train\snd_roller_coaster.mp3" />
+    <Content Include="Test scenes\Train\snd_roller_coaster_loop.mp3" />
+    <Content Include="Test scenes\Train\snd_siren.mp3" />
+    <Content Include="Test scenes\Train\sol_metal.dds" />
+    <Content Include="Test scenes\Train\sol_metal.jpg" />
+    <Content Include="Test scenes\Train\sol_metal_n.dds" />
+    <Content Include="Test scenes\Train\sol_metal_n.jpg" />
+    <Content Include="Test scenes\Train\terrain1.dds" />
+    <Content Include="Test scenes\Train\terrain1.jpg" />
+    <Content Include="Test scenes\Train\terrain1_lm.dds" />
+    <Content Include="Test scenes\Train\terrain1_lm.jpg" />
+    <Content Include="Test scenes\Train\terrain1_n.dds" />
+    <Content Include="Test scenes\Train\terrain1_n.jpg" />
+    <Content Include="Test scenes\Train\terrain2.dds" />
+    <Content Include="Test scenes\Train\terrain2.jpg" />
+    <Content Include="Test scenes\Train\terrain2_lm.dds" />
+    <Content Include="Test scenes\Train\terrain2_lm.jpg" />
+    <Content Include="Test scenes\Train\terrain2_n.dds" />
+    <Content Include="Test scenes\Train\terrain2_n.jpg" />
+    <Content Include="Test scenes\Train\terrain3.dds" />
+    <Content Include="Test scenes\Train\terrain3.jpg" />
+    <Content Include="Test scenes\Train\terrain3_lm.dds" />
+    <Content Include="Test scenes\Train\terrain3_lm.jpg" />
+    <Content Include="Test scenes\Train\terrain3_n.dds" />
+    <Content Include="Test scenes\Train\terrain3_n.jpg" />
+    <Content Include="Test scenes\Train\terrain4.dds" />
+    <Content Include="Test scenes\Train\terrain4.jpg" />
+    <Content Include="Test scenes\Train\terrain4_lm.dds" />
+    <Content Include="Test scenes\Train\terrain4_lm.jpg" />
+    <Content Include="Test scenes\Train\terrain4_n.dds" />
+    <Content Include="Test scenes\Train\terrain4_n.jpg" />
+    <Content Include="Test scenes\Train\terrain_clotures_lm.dds" />
+    <Content Include="Test scenes\Train\terrain_clotures_lm.jpg" />
+    <Content Include="Test scenes\Train\terrain_escalier_lm.dds" />
+    <Content Include="Test scenes\Train\terrain_escalier_lm.jpg" />
+    <Content Include="Test scenes\Train\terrain_tunnel_lm.dds" />
+    <Content Include="Test scenes\Train\terrain_tunnel_lm.jpg" />
+    <Content Include="Test scenes\Train\toit_bois.dds" />
+    <Content Include="Test scenes\Train\toit_bois.jpg" />
+    <Content Include="Test scenes\Train\toit_bois_n.dds" />
+    <Content Include="Test scenes\Train\toit_bois_n.jpg" />
+    <Content Include="Test scenes\Train\tole.dds" />
+    <Content Include="Test scenes\Train\tole.jpg" />
+    <Content Include="Test scenes\Train\tole_n.dds" />
+    <Content Include="Test scenes\Train\tole_n.jpg" />
+    <Content Include="Test scenes\Train\tonneau.dds" />
+    <Content Include="Test scenes\Train\tonneau.jpg" />
+    <Content Include="Test scenes\Train\tonneau_n.dds" />
+    <Content Include="Test scenes\Train\tonneau_n.jpg" />
+    <Content Include="Test scenes\Train\tracteur.dds" />
+    <Content Include="Test scenes\Train\tracteur.jpg" />
+    <Content Include="Test scenes\Train\tracteur_n.dds" />
+    <Content Include="Test scenes\Train\tracteur_n.jpg" />
+    <Content Include="Test scenes\Train\train_4.dds" />
+    <Content Include="Test scenes\Train\train_4.jpg" />
+    <Content Include="Test scenes\Train\train_4_n.dds" />
+    <Content Include="Test scenes\Train\train_4_n.jpg" />
+    <Content Include="Test scenes\Train\train_cote.dds" />
+    <Content Include="Test scenes\Train\train_cote.jpg" />
+    <Content Include="Test scenes\Train\train_cote_n.dds" />
+    <Content Include="Test scenes\Train\train_cote_n.jpg" />
+    <Content Include="Test scenes\Train\train_loco_lm.dds" />
+    <Content Include="Test scenes\Train\train_loco_lm.jpg" />
+    <Content Include="Test scenes\Train\train_wagon_lm.dds" />
+    <Content Include="Test scenes\Train\train_wagon_lm.jpg" />
+    <Content Include="Test scenes\Train\tronc.dds" />
+    <Content Include="Test scenes\Train\tronc.jpg" />
+    <Content Include="Test scenes\Train\tronc_face.dds" />
+    <Content Include="Test scenes\Train\tronc_face.jpg" />
+    <Content Include="Test scenes\Train\tronc_face_n.dds" />
+    <Content Include="Test scenes\Train\tronc_face_n.jpg" />
+    <Content Include="Test scenes\Train\tronc_n.dds" />
+    <Content Include="Test scenes\Train\tronc_n.jpg" />
+    <Content Include="Test scenes\Train\verre_lampes.dds" />
+    <Content Include="Test scenes\Train\verre_lampes.jpg" />
+    <Content Include="Test scenes\Train\water_n.jpg" />
+    <Content Include="Test scenes\Viper\aripa-buna.jpg" />
+    <Content Include="Test scenes\Viper\carlinga-specular.jpg" />
+    <Content Include="Test scenes\Viper\carlinga.jpg" />
+    <Content Include="Test scenes\Viper\carma-creasta.jpg" />
+    <Content Include="Test scenes\Viper\carmaaripi.jpg" />
+    <Content Include="Test scenes\Viper\elicie.jpg" />
+    <Content Include="Test scenes\Viper\engine-cover-bump.jpg" />
+    <Content Include="Test scenes\Viper\engine-cover.jpg" />
+    <Content Include="Test scenes\Viper\engine-covers-specular.jpg" />
+    <Content Include="Test scenes\Viper\face-bump.jpg" />
+    <Content Include="Test scenes\Viper\face-specular.jpg" />
+    <Content Include="Test scenes\Viper\face.jpg" />
+    <Content Include="Test scenes\Viper\gun-romb.jpg" />
+    <Content Include="Test scenes\Viper\parbriz.jpg" />
+    <Content Include="Test scenes\Viper\Untitled-1.jpg" />
+    <Content Include="Test scenes\Viper\wing-bump.jpg" />
+    <Content Include="Test scenes\Viper\wing-specular.jpg" />
+    <Content Include="Test scenes\Viper\wing-up-bump.jpg" />
+    <Content Include="Test scenes\Viper\wing-up-specular.jpg" />
+    <Content Include="Test scenes\Viper\wing-up.jpg" />
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Properties\" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include=".NETFramework,Version=v4.0">
+      <Visible>False</Visible>
+      <ProductName>Microsoft .NET Framework 4 %28x86 and x64%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.4.5">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 4.5</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\BabylonExport.Core\BabylonExport.Core.csproj">
+      <Project>{ce70b051-fb63-420d-80c0-51cc03a214ba}</Project>
+      <Name>BabylonExport.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\BabylonExport.Core\Exporters\ThroughXNA\DAE\ColladaXna\ColladaXnaBase\ColladaXnaBase.csproj">
+      <Project>{65FE2973-B4E6-49DE-8F57-55490D4B4FD4}</Project>
+      <Name>ColladaXnaBase</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\BabylonExport.Core\Exporters\ThroughXNA\DAE\ColladaXna\ColladaXnaImporter\ColladaXnaImporter.csproj">
+      <Project>{625E5D7F-86F6-4961-89D0-3835BF261ACC}</Project>
+      <Name>ColladaXnaImporter</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\BabylonExport.Interface\BabylonExport.Interface.csproj">
+      <Project>{dec52846-ffcb-4a66-9f13-64f65b61edba}</Project>
+      <Name>BabylonExport.Interface</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file
diff --git a/Exporters/XNA - OBJ/BabylonExport/DirectShow.Net.dll b/Exporters/XNA - OBJ/BabylonExport/DirectShow.Net.dll
new file mode 100644
index 0000000..30d6579
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport/DirectShow.Net.dll differ
diff --git a/Exporters/XNA - OBJ/BabylonExport/Exporters/Blender/io_export_babylon.zip b/Exporters/XNA - OBJ/BabylonExport/Exporters/Blender/io_export_babylon.zip
new file mode 100644
index 0000000..e225a56
Binary files /dev/null and b/Exporters/XNA - OBJ/BabylonExport/Exporters/Blender/io_export_babylon.zip differ
diff --git a/Exporters/XNA - OBJ/BabylonExport/Program.cs b/Exporters/XNA - OBJ/BabylonExport/Program.cs
new file mode 100644
index 0000000..7efa70a
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport/Program.cs	
@@ -0,0 +1,169 @@
+﻿using System;
+using System.IO;
+using System.Reflection;
+using BabylonExport.Core.Exporters;
+using BabylonExport.Core.Exporters.FBX;
+using System.Windows.Forms;
+using System.ServiceModel;
+using BabylonExport.Interface;
+using BabylonExport.Core;
+using System.Linq;
+
+namespace BabylonExport
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            string output = "";
+            try
+            {
+                if ((args.Length == 1) && (args[0] == "/service"))
+                {
+                    
+                    var serviceHost = new ServiceHost(typeof(Service), new Uri[] { new Uri("net.pipe://localhost/") });
+                    serviceHost.AddServiceEndpoint(typeof(IService), new NetNamedPipeBinding(), "exportservice");
+                    serviceHost.Open();
+
+                    Console.WriteLine("Service started. Available in following endpoints");
+                    foreach (var serviceEndpoint in serviceHost.Description.Endpoints)
+                    {
+                        Console.WriteLine(serviceEndpoint.ListenUri.AbsoluteUri);
+                    }
+                    Console.ReadLine();
+                }
+                else
+                {
+                    if (args.Length < 2)
+                    {
+                        DisplayUsage();
+                        return;
+                    }
+
+                    // Parsing arguments
+                    string input = "";
+                    bool skinned = false;
+                    foreach (var arg in args)
+                    {
+                        var order = arg.Substring(0, 3);
+
+                        switch (order)
+                        {
+                            case "/i:":
+                                input = arg.Substring(3);
+                                break;
+                            case "/o:":
+                                output = arg.Substring(3);
+                                break;
+                            case "/sk":
+                                skinned = true;
+                                break;
+                            default:
+                                DisplayUsage();
+                                return;
+                        }
+                    }
+
+                    if (string.IsNullOrEmpty(input) || string.IsNullOrEmpty(output))
+                    {
+                        DisplayUsage();
+                        return;
+                    }
+                    var extension = Path.GetExtension(input).ToLower();
+                    var outputName = Path.Combine(output, Path.GetFileNameWithoutExtension(input) + ".babylon");
+                    if (!Directory.Exists(output))
+                    {
+                        Directory.CreateDirectory(output);
+                    }
+
+                    // Browsing exporters
+                    foreach (var type in Assembly.GetAssembly(typeof(NovaExporter)).GetTypes().Where(t => !t.IsAbstract))
+                    {
+                        var interf = type.GetInterface("BabylonExport.Core.IExporter");
+                        if (interf != null)
+                        {
+                            var importer = (IExporter)Activator.CreateInstance(type);
+
+                            if (!importer.SupportedExtensions.Contains(extension))
+                            {
+                                continue;
+                            }
+
+                            Console.WriteLine("Using " + type);
+
+                            // Importation
+                            try
+                            {
+                                importer.OnImportProgressChanged += progress =>
+                                    {
+                                        Console.CursorLeft = 0;
+                                        Console.Write("Generation....{0} %", progress);
+                                    };
+
+                                Console.ForegroundColor = ConsoleColor.Green;
+                                Console.WriteLine("Generation of " + outputName + " started");
+                                Console.WriteLine();
+                                Console.ResetColor();
+                                importer.GenerateBabylonFile(input, outputName, skinned);
+                                Console.ForegroundColor = ConsoleColor.Green;
+                                Console.WriteLine();
+                                Console.WriteLine();
+                                Console.WriteLine("Generation of " + outputName + " successfull");
+                                Console.ResetColor();
+                                using (var debugFile = new StreamWriter(output + @"\debug.txt", true))
+                                {
+                                    debugFile.Write("Generation of " + outputName + " successfull");
+                                }
+                 
+                            }
+                            catch (Exception ex)
+                            {
+                                Console.ForegroundColor = ConsoleColor.Red;
+                                Console.WriteLine();
+                                Console.WriteLine(ex.Message);
+                                Console.ResetColor();
+                                using (var debugFile = new StreamWriter(output + @"\debug.txt", true))
+                                {
+                                    debugFile.Write(ex.Message);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            catch (ReflectionTypeLoadException ex)
+            {
+                Console.ForegroundColor = ConsoleColor.Red;
+                Console.WriteLine("Fatal error encountered:");
+                Console.WriteLine(ex.LoaderExceptions[0].Message);
+                Console.ResetColor();
+                if (output != "")
+                {
+                    using (var debugFile = new StreamWriter(output + @"\debug.txt", true))
+                    {
+                        debugFile.Write(ex.Message);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                Console.ForegroundColor = ConsoleColor.Red;
+                Console.WriteLine("Fatal error encountered:");
+                Console.WriteLine(ex.Message);
+                Console.ResetColor();
+                if (output != "")
+                {
+                    using (var debugFile = new StreamWriter(output + @"\debug.txt", true))
+                    {
+                        debugFile.Write(ex.Message);
+                    }
+                }
+            } 
+        }
+
+        static void DisplayUsage()
+        {
+            Console.WriteLine("Babylon Import usage: BabylonImport.exe /i:\"source file\" /o:\"output folder\" [/sk]");
+        }
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport/Service.cs b/Exporters/XNA - OBJ/BabylonExport/Service.cs
new file mode 100644
index 0000000..022cf13
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport/Service.cs	
@@ -0,0 +1,50 @@
+﻿using BabylonExport.Core;
+using BabylonExport.Core.Exporters;
+using BabylonExport.Interface;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace BabylonExport
+{
+    public class Service : IService
+    {
+        public bool Convert(string input, string outputName)
+        {
+            try
+            {
+                Console.WriteLine("input:" + input);
+                Console.WriteLine("outputName:" + outputName);
+                System.Diagnostics.Process p = new System.Diagnostics.Process();
+                p.StartInfo.FileName = "BabylonExport.exe";
+                p.StartInfo.Arguments = "/i:" + input + " /o:" + outputName;
+                p.Start();
+                if (p.WaitForExit(1000 * 60 * 3))
+                {
+                    p.Close();
+                    return true;
+                }
+                else
+                {
+                    p.Close();
+                    return false;
+                }
+                
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex.Message);
+                return false;
+            }
+            
+        }
+
+
+    }
+}
diff --git a/Exporters/XNA - OBJ/BabylonExport/packages.config b/Exporters/XNA - OBJ/BabylonExport/packages.config
new file mode 100644
index 0000000..9caa189
--- /dev/null
+++ b/Exporters/XNA - OBJ/BabylonExport/packages.config	
@@ -0,0 +1,4 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="Newtonsoft.Json" version="5.0.4" targetFramework="net45" />
+</packages>
\ No newline at end of file
diff --git a/Exporters/XNA - OBJ/readme.md b/Exporters/XNA - OBJ/readme.md
new file mode 100644
index 0000000..3f65327
--- /dev/null
+++ b/Exporters/XNA - OBJ/readme.md	
@@ -0,0 +1,35 @@
+﻿BabylonExporter
+========
+
+BabylonExporter can create a .babylon scene from the following formats:
+ - FBX
+ - OBJ
+
+Command line usage:
+BabylonExporter.exe /i:"source.fbx" /o:"outputDir" [/sk]
+
+/sk option is used to export bones.
+
+
+* OBJ engine can export:
+ * Geometries
+ * Meshes hierarchies
+ * Material:
+   * Diffuse color
+   * Diffuse texture
+   * Alpha
+   * Emissive color
+   * Specular color
+   * Specular power
+
+* FBX engine can export:
+ * Geometries
+ * Meshes hierarchies
+ * Bones and bones' animations
+ * Material:
+  * Diffuse color
+  * Diffuse texture
+  * Alpha
+  * Emissive color
+  * Specular color
+  * Specular power
\ No newline at end of file
