diff --git a/MaxNifPlugins_Readme.txt b/MaxNifPlugins_Readme.txt
index 9f102b5ab51f2845966eaafedf0c22e3048ab85b..d5a1389b851296788a46acaa6d48d23838e39c5c 100644
--- a/MaxNifPlugins_Readme.txt
+++ b/MaxNifPlugins_Readme.txt
@@ -1,4 +1,4 @@
-                        MaxPlugins 0.2.9
+                        MaxPlugins 0.2.10
                         ================
 
  
@@ -32,6 +32,13 @@
 
     Change log
     ----------
+      0.2.10
+      ----- 
+    o All
+      - Compile with Max9
+    o Exporter
+      - Fix naming bug when spliting multi-material meshes
+      
       0.2.9
       -----   
     o Exporter
diff --git a/NifCommon/NifVersion.h b/NifCommon/NifVersion.h
index 2248b4e99f84e175c0333b8fb5e4304c1693c6e4..4f05d36b510dac5a36e09071910439115822dc65 100644
--- a/NifCommon/NifVersion.h
+++ b/NifCommon/NifVersion.h
@@ -18,10 +18,10 @@ HISTORY:
 */
 #define VERSION_MAJOR_INT  0
 #define VERSION_MINOR_INT  2
-#define VERSION_BUILD_INT  8
+#define VERSION_BUILD_INT  10
 #define VERSION_PATCH_INT  0
 
-#define VERSION_STRING "0, 2, 8, 0"
+#define VERSION_STRING "0, 2, 10, 0"
 
 //#define DEF_VERSION_STRING(a,b,c,d) #a ", " #b ", " #c ", " #d
 //#define VERSION_STRING DEF_VERSION_STRING(a,b,c,d)
diff --git a/NifCommon/niutils.cpp b/NifCommon/niutils.cpp
index 650cfae773d15867c36c71c0a27ed4e6b3865d0c..d50499b73df7821d157a426c002237497de30fb6 100644
--- a/NifCommon/niutils.cpp
+++ b/NifCommon/niutils.cpp
@@ -20,6 +20,8 @@ HISTORY:
 #include <modstack.h>
 #include <iparamb2.h>
 #include <iskin.h>
+#include "../NifProps/bhkRigidBodyInterface.h"
+
 #ifdef USE_BIPED
 #  include <cs/BipedApi.h>
 #  include <cs/OurExp.h> 
@@ -1071,3 +1073,25 @@ void CallMaxscript(const TCHAR *s)
    pop_alloc_frame();
 }
 
+Modifier *GetbhkCollisionModifier(INode *node)
+{
+   const Class_ID BHKRIGIDBODYMODIFIER_CLASS_ID(0x398fd801, 0x303e44e5);
+   Object* pObj = node->GetObjectRef();
+   if (!pObj) return NULL;
+   while (pObj->SuperClassID() == GEN_DERIVOB_CLASS_ID)
+   {
+      IDerivedObject* pDerObj = (IDerivedObject *)(pObj);
+      int Idx = 0;
+      while (Idx < pDerObj->NumModifiers())
+      {
+         // Get the modifier. 
+         Modifier* mod = pDerObj->GetModifier(Idx);
+         if (mod->ClassID() == BHKRIGIDBODYMODIFIER_CLASS_ID) {
+            return mod;
+         }
+         Idx++;
+      }
+      pObj = pDerObj->GetObjRef();
+   }
+   return NULL;
+}
diff --git a/NifCommon/niutils.h b/NifCommon/niutils.h
index 032a822764012c1a676391dc190bd86ce15f7050..81c2153eec99b9864f30bdfb47f19974ad40a49f 100644
--- a/NifCommon/niutils.h
+++ b/NifCommon/niutils.h
@@ -400,4 +400,6 @@ void CollapseGeomTransform(Niflib::NiTriBasedGeomRef shape);
 void CollapseGeomTransforms(std::vector<Niflib::NiTriBasedGeomRef>& shapes);
 void FixNormals(std::vector<Niflib::Triangle>& tris, std::vector<Niflib::Vector3>& verts, std::vector<Niflib::Vector3>& norms);
 
+Modifier *GetbhkCollisionModifier(INode *node);
+
 #endif // _NIUTILS_H_
\ No newline at end of file
diff --git a/NifExport/Mesh.cpp b/NifExport/Mesh.cpp
index 2539ea63c446ac1e622163da80854a3bc69140ab..9fcc315bf596a7af40d1f9173a869768056e3de9 100755
--- a/NifExport/Mesh.cpp
+++ b/NifExport/Mesh.cpp
@@ -132,7 +132,7 @@ Exporter::Result Exporter::exportMesh(NiNodeRef &ninode, INode *node, TimeValue
 		FaceGroups::iterator grp;
 		for (grp=grps.begin(); grp!=grps.end(); ++grp, ++i)
 		{
-         string name = FormatString(basename, basename.data(), i);
+         string name = FormatString(format, basename.data(), i);
          NiTriBasedGeomRef shape = makeMesh(ninode, getMaterial(node, grp->first), grp->second, exportStrips);
          if (shape == NULL)
 			{
diff --git a/NifExport/Util.cpp b/NifExport/Util.cpp
index 1baf03a2e3fde60f2b0f88831b15569f87bb4650..d45b427e793b31dd65748570893de54c8203d724 100755
--- a/NifExport/Util.cpp
+++ b/NifExport/Util.cpp
@@ -345,7 +345,7 @@ void Exporter::CalcBoundingBox(INode *node, Box3& box, int all)
 
    Matrix3 tm = node->GetObjTMAfterWSM(0);
    if (node->IsBoneShowing()) {
-      box.IncludePoints(&tm.GetTrans(), 1, NULL);
+      box.IncludePoints(const_cast<Point3*>(&tm.GetTrans()), 1, NULL);
    } else {
       if (Object *o = node->GetObjectRef()) {
          if (o->SuperClassID()==GEOMOBJECT_CLASS_ID) {
@@ -354,7 +354,7 @@ void Exporter::CalcBoundingBox(INode *node, Box3& box, int all)
                || o->ClassID() == Class_ID(0x00009125,0) /* Biped Twist Helpers */
                )
             {
-               box.IncludePoints(&tm.GetTrans(), 1, NULL);
+               box.IncludePoints(const_cast<Point3*>(&tm.GetTrans()), 1, NULL);
             }
             else
             {
@@ -366,7 +366,7 @@ void Exporter::CalcBoundingBox(INode *node, Box3& box, int all)
          }
          else if (mExportCameras && o->SuperClassID()==CAMERA_CLASS_ID)
          {
-            box.IncludePoints(&tm.GetTrans(), 1, NULL);
+            box.IncludePoints(const_cast<Point3*>(&tm.GetTrans()), 1, NULL);
          }
       }
    }
diff --git a/NifImport/BaseImporter.h b/NifImport/BaseImporter.h
index 7b8180af1782d1598019a86866395116854559e3..e4c7ded3ce3b2e0814bf92c99c8d7d5b3a194c20 100644
--- a/NifImport/BaseImporter.h
+++ b/NifImport/BaseImporter.h
@@ -46,6 +46,11 @@ public:
       
       char buffer[MAX_PATH] = {0}, *p = NULL;
       GetFullPathName(Name, _countof(buffer), buffer, &p);
+
+      if (-1 == _access(buffer, 0)) {
+         throw RuntimeError(FormatText("File does not exist: %s", buffer));
+      }
+
       if (p) *p = 0;
       path = buffer;
       iniFileValid = false;
diff --git a/NifImport/ImportMeshAndSkin.cpp b/NifImport/ImportMeshAndSkin.cpp
index 66b7c600252cb528fc568dc9789c2828a8d97b77..5a9094512a4d2415b24926101d75febc99e7707a 100644
--- a/NifImport/ImportMeshAndSkin.cpp
+++ b/NifImport/ImportMeshAndSkin.cpp
@@ -31,6 +31,7 @@ bool NifImporter::ImportMeshes(NiNodeRef node)
    bool ok = true;
    try 
    {
+#if 1
       vector<NiTriShapeRef> trinodes = DynamicCast<NiTriShape>(node->GetChildren());
       for (vector<NiTriShapeRef>::iterator itr = trinodes.begin(), end = trinodes.end(); itr != end; ++itr){
          ok |= ImportMesh(*itr);
@@ -39,6 +40,11 @@ bool NifImporter::ImportMeshes(NiNodeRef node)
       for (vector<NiTriStripsRef>::iterator itr = tristrips.begin(), end = tristrips.end(); itr != end; ++itr){
          ok |= ImportMesh(*itr);
       }
+#else
+      // Only do multiples on object that have same name and use XXX:# notation
+      vector<NiTriBasedGeomRef> trigeom = DynamicCast<NiTriBasedGeom>(node->GetChildren());
+      ok |= ImportMultipleGeometry(node, trigeom);
+#endif
       vector<NiNodeRef> nodes = DynamicCast<NiNode>(node->GetChildren());
       for (vector<NiNodeRef>::iterator itr = nodes.begin(), end = nodes.end(); itr != end; ++itr){
          ok |= ImportMeshes(*itr);
@@ -59,6 +65,7 @@ bool NifImporter::ImportMeshes(NiNodeRef node)
 bool NifImporter::ImportMesh(ImpNode *node, TriObject *o, NiTriBasedGeomRef triGeom, NiTriBasedGeomDataRef triGeomData, vector<Triangle>& tris)
 {
    Mesh& mesh = o->GetMesh();
+   INode *tnode = node->GetINode();
 
    Matrix44 baseTM = (importBones) ? triGeom->GetLocalTransform() : triGeom->GetWorldTransform();
    node->SetTransform(0,TOMATRIX3(baseTM));  
@@ -137,9 +144,15 @@ bool NifImporter::ImportMesh(ImpNode *node, TriObject *o, NiTriBasedGeomRef triG
       }
    }
 
-   ImportVertexColor(node, o, triGeom, triGeomData, tris);
 
-   ImportMaterialAndTextures(node, triGeom);
+   vector<Color4> cv = triGeomData->GetColors();
+   ImportVertexColor(tnode, o, tris, cv, 0);
+
+   if (Mtl* m = ImportMaterialAndTextures(node, triGeom))
+   {
+      gi->GetMaterialLibrary().Add(m);
+      node->GetINode()->SetMtl(m);
+   }
 
    if (removeDegenerateFaces)
       mesh.RemoveDegenerateFaces();
@@ -232,21 +245,193 @@ bool NifImporter::ImportMesh(NiTriStripsRef triStrips)
    return ok;
 }
 
+bool NifImporter::ImportMultipleGeometry(NiNodeRef parent, vector<NiTriBasedGeomRef>& glist)
+{
+   bool ok = true;
+   if (glist.empty()) return false;
+
+   ImpNode *node = i->CreateNode();
+   if(!node) return false;
+
+   INode *inode = node->GetINode();
+   TriObject *triObject = CreateNewTriObject();
+   node->Reference(triObject);
+
+   string name = parent->GetName();
+   node->SetName(name.c_str());
+
+   // Texture
+   Mesh& mesh = triObject->GetMesh();
+
+   vector< pair<int, int> > vert_range, tri_range;
+   vector<Triangle> tris;
+   vector<Vector3> verts;
+   int submats = glist.size();
+
+   // Build list of vertices and triangles.  Optional components like normals will be handled later.
+   for (vector<NiTriBasedGeomRef>::iterator itr = glist.begin(), end = glist.end(); itr != end; ++itr) {
+      NiTriBasedGeomDataRef triGeomData = StaticCast<NiTriBasedGeomData>((*itr)->GetData());
+
+      // Get verts and collapse local transform into them
+      int nVertices = triGeomData->GetVertexCount();
+      vector<Vector3> subverts = triGeomData->GetVertices();
+      Matrix44 transform = (*itr)->GetLocalTransform();
+      //Apply the transformations
+      if (transform != Matrix44::IDENTITY) {
+         for ( uint i = 0; i < subverts.size(); ++i )
+            subverts[i] = transform * subverts[i];
+      }
+      vert_range.push_back( pair<int,int>( verts.size(), verts.size() + subverts.size()) );
+      verts.insert(verts.end(), subverts.begin(), subverts.end());
+
+      vector<Triangle> subtris = triGeomData->GetTriangles();
+      for (vector<Triangle>::iterator itr = subtris.begin(), end = subtris.end(); itr != end; ++itr) {
+         (*itr).v1 += nVertices, (*itr).v2 += nVertices, (*itr).v3 += nVertices;
+      }
+      tri_range.push_back( pair<int,int>( tris.size(), tris.size() + subtris.size()) );
+      tris.insert(tris.end(), subtris.begin(), subtris.end());
+   }
+
+   // Transform up-to-parent
+   Matrix44 baseTM = (importBones) ? Matrix44::IDENTITY : parent->GetWorldTransform();
+   node->SetTransform(0,TOMATRIX3(baseTM));  
+
+   // Set vertices and triangles
+   mesh.setNumVerts(verts.size());
+   mesh.setNumTVerts(verts.size(), TRUE);
+   for (int i=0, n=verts.size(); i < n; ++i){
+      Vector3 &v = verts[i];
+      mesh.verts[i].Set(v.x, v.y, v.z);
+   }
+   mesh.setNumFaces(tris.size());
+   mesh.setNumTVFaces(tris.size());
+   for (int submat=0; submat<submats; ++submat) {
+      int t_start = tri_range[submat].first, t_end = tri_range[submat].second;
+      for (int i=t_start; i<t_end; ++i) {
+         Triangle& t = tris[i];
+         Face& f = mesh.faces[i];
+         f.setVerts(t.v1, t.v2, t.v3);
+         f.Show();
+         f.setEdgeVisFlags(EDGE_VIS, EDGE_VIS, EDGE_VIS);
+         f.setMatID(-1);
+         TVFace& tf = mesh.tvFace[i];
+         tf.setTVerts(t.v1, t.v2, t.v3);
+      }
+   }
+   mesh.buildNormals();
+   bool bSpecNorms = false;
+
+   MultiMtl *mtl = NULL;
+   int igeom = 0;
+   for (vector<NiTriBasedGeomRef>::iterator itr = glist.begin(), end = glist.end(); itr != end; ++itr, ++igeom) 
+   {
+      NiTriBasedGeomDataRef triGeomData = StaticCast<NiTriBasedGeomData>((*itr)->GetData());
+
+      int v_start = vert_range[igeom].first, v_end = vert_range[igeom].second;
+      int t_start = tri_range[igeom].first, t_end = tri_range[igeom].second;
+
+      // Normals
+      vector<Vector3> subnorms = triGeomData->GetNormals();
+      Matrix44 rotation = (*itr)->GetLocalTransform().GetRotation();
+      if (rotation != Matrix44::IDENTITY) {
+         for ( uint i = 0; i < subnorms.size(); ++i )
+            subnorms[i] = rotation * subnorms[i];
+      }
+      if (!subnorms.empty())
+      {
+#if VERSION_3DSMAX > ((5000<<16)+(15<<8)+0) // Version 5
+         // Initialize normals if necessary
+         if (!bSpecNorms) {
+            bSpecNorms = true;
+            mesh.SpecifyNormals();
+            MeshNormalSpec *specNorms = mesh.GetSpecifiedNormals();
+            if (NULL != specNorms) {
+               specNorms->BuildNormals();
+               //specNorms->ClearAndFree();
+               //specNorms->SetNumFaces(tris.size());
+               //specNorms->SetNumNormals(n.size());
+            }
+         }
+         MeshNormalSpec *specNorms = mesh.GetSpecifiedNormals();
+         if (NULL != specNorms)
+         {
+            Point3* norms = specNorms->GetNormalArray();
+            for (int i=0, n=subnorms.size(); i<n; i++){
+               Vector3& v = subnorms[i];
+               norms[i+v_start] = Point3(v.x, v.y, v.z);
+            }
+            //MeshNormalFace* pFaces = specNorms->GetFaceArray();
+            //for (int i=0; i<tris.size(); i++){
+            //   Triangle& tri = tris[i];
+            //   MeshNormalFace& face = pFaces[i+t_start];
+            //   face.SpecifyNormalID(0, tri.v1);
+            //   face.SpecifyNormalID(1, tri.v2);
+            //   face.SpecifyNormalID(2, tri.v3);
+            //}
+            specNorms->SetAllExplicit(true);
+            specNorms->CheckNormals();
+         }
+#endif
+      }
+      // uv texture info
+      if (triGeomData->GetUVSetCount() > 0) {
+         vector<TexCoord> texCoords = triGeomData->GetUVSet(0);
+         for (int i=0, n = texCoords.size(); i<n; ++i) {
+            TexCoord& texCoord = texCoords[i];
+            mesh.tVerts[i+v_start].Set(texCoord.u, (flipUVTextures) ? 1.0f-texCoord.v : texCoord.v, 0);
+         }
+      }
+      vector<Color4> cv = triGeomData->GetColors();
+      ImportVertexColor(inode, triObject, tris, cv, v_start);
+
+      if ( StdMat2* submtl = ImportMaterialAndTextures(node, (*itr)) )
+      {
+         if (mtl == NULL) {
+            mtl = NewDefaultMultiMtl();
+            gi->GetMaterialLibrary().Add(mtl);
+            inode->SetMtl(mtl);
+         }
+         // SubMatIDs do not have to be contiguous so we just use the offset
+         mtl->SetSubMtlAndName(igeom, submtl, submtl->GetName());
+         for (int i=t_start; i<t_end; ++i)
+            mesh.faces[i].setMatID(igeom);
+      }
+      if (enableSkinSupport)
+         ImportSkin(node, (*itr));
+   }
+
+   this->i->AddNodeToScene(node);   
+
+   inode = node->GetINode();
+   inode->EvalWorldState(0);
+
+   for (vector<NiTriBasedGeomRef>::iterator itr = glist.begin(), end = glist.end(); itr != end; ++itr) 
+   {
+      // attach child
+      if (INode *parent = GetNode((*itr)->GetParent()))
+         parent->AttachChild(inode, 1);
+      inode->Hide((*itr)->GetHidden() ? TRUE : FALSE);
+   }
+   if (removeDegenerateFaces)
+      mesh.RemoveDegenerateFaces();
+   if (removeIllegalFaces)
+      mesh.RemoveIllegalFaces();
+   if (enableAutoSmooth)
+      mesh.AutoSmooth(TORAD(autoSmoothAngle), FALSE, FALSE);
+   return ok;
+}
+
 // vertex coloring
-bool NifImporter::ImportVertexColor(ImpNode *node, TriObject *o, Niflib::NiTriBasedGeomRef triGeom, Niflib::NiTriBasedGeomDataRef triGeomData, vector<Triangle>& tris)
+bool NifImporter::ImportVertexColor(INode *tnode, TriObject *o, vector<Triangle>& tris, vector<Color4> cv, int cv_offset/*=0*/)
 {
    bool hasAlpha = false;
    bool hasColor = false;
    Mesh& mesh = o->GetMesh();
-
    if (vertexColorMode == 1) // Bake into mesh (no Modifier)
    {
-      vector<Color4> cv = triGeomData->GetColors();
       int n = cv.size();
       if (n > 0)
       {
-         INode *tnode = node->GetINode();
-
          vector<TVFace> vcFace;
          int nt = tris.size();
          vcFace.resize(nt);
@@ -301,13 +486,9 @@ bool NifImporter::ImportVertexColor(ImpNode *node, TriObject *o, Niflib::NiTriBa
    else if (vertexColorMode == 2)
    {
 #if VERSION_3DSMAX > ((5000<<16)+(15<<8)+0) // Version 5
-      vector<Color4> cv = triGeomData->GetColors();
       int n = cv.size();
       if (n > 0)
       {
-
-         INode *tnode = node->GetINode();
-
          vector<Color> colorMap, alphaMap;
          IVertexPaint::VertColorTab vertColors, vertAlpha;
          vertColors.SetCount(n, TRUE);
@@ -392,7 +573,7 @@ struct VertexHolder
    Tab<float> weights;
 };
 
-bool NifImporter::ImportSkin(ImpNode *node, NiTriBasedGeomRef triGeom)
+bool NifImporter::ImportSkin(ImpNode *node, NiTriBasedGeomRef triGeom, int v_start/*=0*/)
 {
    bool ok = true;
    NiSkinInstanceRef nifSkin = triGeom->GetSkinInstance();
diff --git a/NifImport/ImportMtlAndTex.cpp b/NifImport/ImportMtlAndTex.cpp
index d99faf6936efe4d0f56ba01d830f333bc45f030f..2a7e698181f7ca136aa10608c90e9084f61fed61 100644
--- a/NifImport/ImportMtlAndTex.cpp
+++ b/NifImport/ImportMtlAndTex.cpp
@@ -80,19 +80,17 @@ Texmap* NifImporter::CreateTexture(TexDesc& desc)
    return NULL;
 }
 
-bool NifImporter::ImportMaterialAndTextures(ImpNode *node, NiAVObjectRef avObject)
+StdMat2 *NifImporter::ImportMaterialAndTextures(ImpNode *node, NiAVObjectRef avObject)
 {
    // Texture
-   vector<NiPropertyRef> props = avObject->GetProperties();
-   NiTexturingPropertyRef texRef = SelectFirstObjectOfType<NiTexturingProperty>(props);
-   NiMaterialPropertyRef matRef = SelectFirstObjectOfType<NiMaterialProperty>(props);
-   NiWireframePropertyRef wireRef = SelectFirstObjectOfType<NiWireframeProperty>(props);
-   NiAlphaPropertyRef alphaRef = SelectFirstObjectOfType<NiAlphaProperty>(props);
-   NiStencilPropertyRef stencilRef = SelectFirstObjectOfType<NiStencilProperty>(props);
-   NiShadePropertyRef shadeRef = SelectFirstObjectOfType<NiShadeProperty>(props);
-
-   bool hasTexture = (texRef && matRef);
+   NiMaterialPropertyRef matRef = avObject->GetPropertyByType(NiMaterialProperty::TypeConst());
    if (matRef != NULL){
+      NiTexturingPropertyRef texRef = avObject->GetPropertyByType(NiTexturingProperty::TypeConst());
+      NiWireframePropertyRef wireRef = avObject->GetPropertyByType(NiWireframeProperty::TypeConst());
+      NiAlphaPropertyRef alphaRef = avObject->GetPropertyByType(NiAlphaProperty::TypeConst());
+      NiStencilPropertyRef stencilRef = avObject->GetPropertyByType(NiStencilProperty::TypeConst());
+      NiShadePropertyRef shadeRef = avObject->GetPropertyByType(NiShadeProperty::TypeConst());
+
       StdMat2 *m = NewDefaultStdMat();
       m->SetName(matRef->GetName().c_str());
       if (showTextures)
@@ -100,9 +98,7 @@ bool NifImporter::ImportMaterialAndTextures(ImpNode *node, NiAVObjectRef avObjec
 
       // try the civ4 shader first then default back to normal shaders
       if (ImportCiv4Shader(node, avObject, m)) {
-         gi->GetMaterialLibrary().Add(m);
-         node->GetINode()->SetMtl(m);
-         return true;
+         return m;
 		}
       m->SetAmbient(TOCOLOR(matRef->GetAmbientColor()),0);
       m->SetDiffuse(TOCOLOR(matRef->GetDiffuseColor()),0);
@@ -166,10 +162,33 @@ bool NifImporter::ImportMaterialAndTextures(ImpNode *node, NiAVObjectRef avObjec
                m->SetSubTexmap(ID_SI, tex);
          }
       }
-      gi->GetMaterialLibrary().Add(m);
-      node->GetINode()->SetMtl(m);
+      return m;
+   }
+   return NULL;
+}
+
+
+bool NifImporter::ImportMaterialAndTextures(ImpNode *node, vector<NiTriBasedGeomRef>& glist)
+{
+   MultiMtl *mtl = NULL;
+   int isubmtl = 0;
+   for (vector<NiTriBasedGeomRef>::iterator itr = glist.begin(), end = glist.end(); itr != end; ++itr, ++isubmtl) {
+      NiTriBasedGeomDataRef triGeomData = StaticCast<NiTriBasedGeomData>((*itr)->GetData());
+      if ( StdMat2* submtl = ImportMaterialAndTextures(node, (*itr)) )
+      {
+         if (mtl == NULL) 
+            mtl = NewDefaultMultiMtl();
+         // SubMatIDs do not have to be contigious so we just use the offset
+         mtl->SetSubMtlAndName(isubmtl, submtl, submtl->GetName());
+      }
+   }
+   if (mtl != NULL)
+   {
+      gi->GetMaterialLibrary().Add(mtl);
+      node->GetINode()->SetMtl(mtl);
+      return true;
    }
-   return hasTexture;
+   return false;
 }
 
 bool NifImporter::ImportCiv4Shader(ImpNode *node, NiAVObjectRef avObject, StdMat2 *mtl)
diff --git a/NifImport/MaxNifImport.cpp b/NifImport/MaxNifImport.cpp
index 0b77b180240728c1634468db2b7e128b047d70ab..b1903c756fbd535f75290e4a368008dcae95275f 100644
--- a/NifImport/MaxNifImport.cpp
+++ b/NifImport/MaxNifImport.cpp
@@ -213,6 +213,13 @@ int MaxNifImport::DoImport(const TCHAR *filename,ImpInterface *i, Interface *gi,
       MessageBox(NULL, e.what(), "Import Error", MB_OK);
       return TRUE;
    }
+   catch (RuntimeError &e)
+   {
+#if VERSION_3DSMAX > ((5000<<16)+(15<<8)+0) // Version 6+
+      MessageBox(NULL, e.desc1, "Import Error", MB_OK);
+#endif
+      return TRUE;
+   }
    catch (...)
    {
       MessageBox(NULL, "Unknown error.", "Import Error", MB_OK);
diff --git a/NifImport/NIFImporter.h b/NifImport/NIFImporter.h
index 97718109b35b872dc9a439b0b397b15864f07711..5fcd6a1cf150ae676f3de0631b9735c43b5f32dc 100644
--- a/NifImport/NIFImporter.h
+++ b/NifImport/NIFImporter.h
@@ -112,13 +112,14 @@ public:
    void SetTrangles(Mesh& mesh, vector<Niflib::Triangle>& v);
    bool ImportMesh(Niflib::NiTriShapeRef triShape);
    bool ImportMesh(Niflib::NiTriStripsRef triStrips);
-   bool ImportMaterialAndTextures(ImpNode *node, Niflib::NiAVObjectRef avObject);
+   bool ImportMultipleGeometry(Niflib::NiNodeRef parent, vector<Niflib::NiTriBasedGeomRef>& glist);
+   StdMat2 *ImportMaterialAndTextures(ImpNode *node, Niflib::NiAVObjectRef avObject);
+   bool ImportMaterialAndTextures(ImpNode *node, vector<Niflib::NiTriBasedGeomRef>& glist);
    bool ImportCiv4Shader(ImpNode *node, Niflib::NiAVObjectRef avObject, StdMat2 *m);
    bool ImportTransform(ImpNode *node, Niflib::NiAVObjectRef avObject);
    bool ImportMesh(ImpNode *node, TriObject *o, Niflib::NiTriBasedGeomRef triGeom, Niflib::NiTriBasedGeomDataRef triGeomData, vector<Niflib::Triangle>& tris);
-   bool ImportVertexColor(ImpNode *node, TriObject *o, Niflib::NiTriBasedGeomRef triGeom, Niflib::NiTriBasedGeomDataRef triGeomData, vector<Niflib::Triangle>& tris);
-
-   bool ImportSkin(ImpNode *node, Niflib::NiTriBasedGeomRef triGeom);
+   bool ImportVertexColor(INode *tnode, TriObject *o, vector<Niflib::Triangle>& tris, vector<Niflib::Color4> cv, int cv_offset=0);
+   bool ImportSkin(ImpNode *node, Niflib::NiTriBasedGeomRef triGeom, int v_start=0);
    Texmap* CreateTexture(Niflib::TexDesc& desc);
    INode *CreateBone(const string& name, Point3 startPos, Point3 endPos, Point3 zAxis);
    INode *CreateHelper(const string& name, Point3 startPos);
diff --git a/NifPlugins/DllEntry.cpp b/NifPlugins/DllEntry.cpp
index 4df1a75977bb1fbbde5de1b1887ba22cc69f81f1..5cabc3ae46821542c5016ed0bc8d6ae5a75a6728 100644
--- a/NifPlugins/DllEntry.cpp
+++ b/NifPlugins/DllEntry.cpp
@@ -18,6 +18,8 @@ extern ClassDesc2* GetNifFurnitureDesc();
 extern ClassDesc2* GetKfExportDesc();
 extern ClassDesc2* GetbhkSphereDesc();
 extern ClassDesc2* GetbhkCapsuleDesc();
+//extern ClassDesc2* GetbhkRigidBodyModifierDesc();
+//extern ClassDesc2* GetbhkBoxDesc();
 
 enum ClassDescType
 {
@@ -94,8 +96,10 @@ void InitializeLibSettings()
       classDescEnabled[CD_Props] = true;
       classDescriptions[nClasses++] = GetNifPropsDesc();
 #ifdef USE_UNSUPPORTED_CODE
+      classDescriptions[nClasses++] = GetbhkRigidBodyModifierDesc();
       classDescriptions[nClasses++] = GetbhkSphereDesc();
       classDescriptions[nClasses++] = GetbhkCapsuleDesc();
+      classDescriptions[nClasses++] = GetbhkBoxDesc();
 #endif
    }
    if ( GetIniValue<bool>("NifFurniture", "Enable", true, iniName) ) {
diff --git a/NifPlugins_VC80.sln b/NifPlugins_VC80.sln
index c33e8bdf2badf6446783c6bf059caf96a2940c1d..edd13349535598cd4864b47e04fce8c518c16618 100644
--- a/NifPlugins_VC80.sln
+++ b/NifPlugins_VC80.sln
@@ -18,47 +18,87 @@ EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug - Max 5|Win32 = Debug - Max 5|Win32
+		Debug - Max 5|x64 = Debug - Max 5|x64
 		Debug - Max 6|Win32 = Debug - Max 6|Win32
+		Debug - Max 6|x64 = Debug - Max 6|x64
 		Debug - Max 7|Win32 = Debug - Max 7|Win32
+		Debug - Max 7|x64 = Debug - Max 7|x64
 		Debug - Max 8|Win32 = Debug - Max 8|Win32
+		Debug - Max 8|x64 = Debug - Max 8|x64
+		Debug - Max 9|Win32 = Debug - Max 9|Win32
+		Debug - Max 9|x64 = Debug - Max 9|x64
 		Release - Max 5|Win32 = Release - Max 5|Win32
+		Release - Max 5|x64 = Release - Max 5|x64
 		Release - Max 6|Win32 = Release - Max 6|Win32
+		Release - Max 6|x64 = Release - Max 6|x64
 		Release - Max 7|Win32 = Release - Max 7|Win32
+		Release - Max 7|x64 = Release - Max 7|x64
 		Release - Max 8|Win32 = Release - Max 8|Win32
+		Release - Max 8|x64 = Release - Max 8|x64
+		Release - Max 9|Win32 = Release - Max 9|Win32
+		Release - Max 9|x64 = Release - Max 9|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 5|Win32.ActiveCfg = Debug - PCH|Win32
 		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 5|Win32.Build.0 = Debug - PCH|Win32
+		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 5|x64.ActiveCfg = Debug - PCH|Win32
 		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 6|Win32.ActiveCfg = Debug - PCH|Win32
 		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 6|Win32.Build.0 = Debug - PCH|Win32
+		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 6|x64.ActiveCfg = Debug - PCH|Win32
 		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 7|Win32.ActiveCfg = Debug - PCH|Win32
 		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 7|Win32.Build.0 = Debug - PCH|Win32
+		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 7|x64.ActiveCfg = Debug - PCH|Win32
 		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 8|Win32.ActiveCfg = Debug - PCH|Win32
 		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 8|Win32.Build.0 = Debug - PCH|Win32
+		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 8|x64.ActiveCfg = Debug - PCH|Win32
+		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 9|Win32.ActiveCfg = Debug - PCH|Win32
+		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 9|Win32.Build.0 = Debug - PCH|Win32
+		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 9|x64.ActiveCfg = Debug - PCH|Win32
 		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 5|Win32.ActiveCfg = Release - PCH|Win32
 		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 5|Win32.Build.0 = Release - PCH|Win32
+		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 5|x64.ActiveCfg = Release - PCH|Win32
 		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 6|Win32.ActiveCfg = Release - PCH|Win32
 		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 6|Win32.Build.0 = Release - PCH|Win32
+		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 6|x64.ActiveCfg = Release - PCH|Win32
 		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 7|Win32.ActiveCfg = Release - PCH|Win32
 		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 7|Win32.Build.0 = Release - PCH|Win32
+		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 7|x64.ActiveCfg = Release - PCH|Win32
 		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 8|Win32.ActiveCfg = Release - PCH|Win32
 		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 8|Win32.Build.0 = Release - PCH|Win32
+		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 8|x64.ActiveCfg = Release - PCH|Win32
+		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 9|Win32.ActiveCfg = Release - PCH|Win32
+		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 9|Win32.Build.0 = Release - PCH|Win32
+		{19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 9|x64.ActiveCfg = Release - PCH|Win32
 		{466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 5|Win32.ActiveCfg = Debug - Max 5|Win32
 		{466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 5|Win32.Build.0 = Debug - Max 5|Win32
+		{466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 5|x64.ActiveCfg = Debug - Max 5|Win32
 		{466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 6|Win32.ActiveCfg = Debug - Max 6|Win32
 		{466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 6|Win32.Build.0 = Debug - Max 6|Win32
+		{466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 6|x64.ActiveCfg = Debug - Max 6|Win32
 		{466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 7|Win32.ActiveCfg = Debug - Max 7|Win32
 		{466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 7|Win32.Build.0 = Debug - Max 7|Win32
+		{466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 7|x64.ActiveCfg = Debug - Max 7|Win32
 		{466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 8|Win32.ActiveCfg = Debug - Max 8|Win32
 		{466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 8|Win32.Build.0 = Debug - Max 8|Win32
+		{466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 8|x64.ActiveCfg = Debug - Max 8|Win32
+		{466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 9|Win32.ActiveCfg = Debug - Max 9|Win32
+		{466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 9|Win32.Build.0 = Debug - Max 9|Win32
+		{466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 9|x64.ActiveCfg = Debug - Max 9|Win32
 		{466F2D3E-2663-4583-A05C-128683677617}.Release - Max 5|Win32.ActiveCfg = Release - Max 5|Win32
 		{466F2D3E-2663-4583-A05C-128683677617}.Release - Max 5|Win32.Build.0 = Release - Max 5|Win32
+		{466F2D3E-2663-4583-A05C-128683677617}.Release - Max 5|x64.ActiveCfg = Release - Max 5|Win32
 		{466F2D3E-2663-4583-A05C-128683677617}.Release - Max 6|Win32.ActiveCfg = Release - Max 6|Win32
 		{466F2D3E-2663-4583-A05C-128683677617}.Release - Max 6|Win32.Build.0 = Release - Max 6|Win32
+		{466F2D3E-2663-4583-A05C-128683677617}.Release - Max 6|x64.ActiveCfg = Release - Max 6|Win32
 		{466F2D3E-2663-4583-A05C-128683677617}.Release - Max 7|Win32.ActiveCfg = Release - Max 7|Win32
 		{466F2D3E-2663-4583-A05C-128683677617}.Release - Max 7|Win32.Build.0 = Release - Max 7|Win32
+		{466F2D3E-2663-4583-A05C-128683677617}.Release - Max 7|x64.ActiveCfg = Release - Max 7|Win32
 		{466F2D3E-2663-4583-A05C-128683677617}.Release - Max 8|Win32.ActiveCfg = Release - Max 8|Win32
 		{466F2D3E-2663-4583-A05C-128683677617}.Release - Max 8|Win32.Build.0 = Release - Max 8|Win32
+		{466F2D3E-2663-4583-A05C-128683677617}.Release - Max 8|x64.ActiveCfg = Release - Max 8|Win32
+		{466F2D3E-2663-4583-A05C-128683677617}.Release - Max 9|Win32.ActiveCfg = Release - Max 9|Win32
+		{466F2D3E-2663-4583-A05C-128683677617}.Release - Max 9|Win32.Build.0 = Release - Max 9|Win32
+		{466F2D3E-2663-4583-A05C-128683677617}.Release - Max 9|x64.ActiveCfg = Release - Max 9|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/NifPlugins_VC80.vcproj b/NifPlugins_VC80.vcproj
index 53784ff5164ef990e4a5c56781501a3452742e7d..90fa3b6871adbb3bbb9f94470ba0ad003fac2d4c 100644
--- a/NifPlugins_VC80.vcproj
+++ b/NifPlugins_VC80.vcproj
@@ -17,7 +17,7 @@
 		<Configuration
 			Name="Release - Max 6|Win32"
 			OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\"
-			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)"
+			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\"
 			ConfigurationType="2"
 			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 			UseOfMFC="0"
@@ -120,8 +120,8 @@
 		</Configuration>
 		<Configuration
 			Name="Debug - Max 6|Win32"
-			OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)"
-			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)"
+			OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\"
+			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\"
 			ConfigurationType="2"
 			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 			UseOfMFC="0"
@@ -223,7 +223,7 @@
 		<Configuration
 			Name="Release - Max 7|Win32"
 			OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\"
-			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)"
+			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\"
 			ConfigurationType="2"
 			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 			UseOfMFC="0"
@@ -326,8 +326,8 @@
 		</Configuration>
 		<Configuration
 			Name="Debug - Max 7|Win32"
-			OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)"
-			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)"
+			OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\"
+			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\"
 			ConfigurationType="2"
 			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 			UseOfMFC="0"
@@ -361,7 +361,9 @@
 				AdditionalIncludeDirectories="C:\3dsmax7\maxsdk\include;..\niflib\include;..\niflib;.\NifCommon"
 				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;USE_NIFLIB_TEMPLATE_HELPERS;_USE_MATH_DEFINES;USE_UNSUPPORTED_CODE;USE_BIPED"
 				GeneratePreprocessedFile="0"
+				MinimalRebuild="true"
 				ExceptionHandling="2"
+				BasicRuntimeChecks="3"
 				RuntimeLibrary="1"
 				ForceConformanceInForLoopScope="false"
 				UsePrecompiledHeader="2"
@@ -386,7 +388,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalOptions="/MACHINE:I386"
-				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib shlwapi.lib core.lib geom.lib gfx.lib mesh.lib maxutil.lib maxscrpt.lib paramblk2.lib bmm.lib niflibd.lib"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib shlwapi.lib core.lib geom.lib gfx.lib mesh.lib maxutil.lib maxscrpt.lib paramblk2.lib bmm.lib"
 				OutputFile="C:\3dsmax7\plugins\NifPlugins.dlu"
 				LinkIncremental="2"
 				SuppressStartupBanner="true"
@@ -427,7 +429,7 @@
 		<Configuration
 			Name="Release - Max 8|Win32"
 			OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\"
-			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)"
+			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\"
 			ConfigurationType="2"
 			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 			UseOfMFC="0"
@@ -530,8 +532,8 @@
 		</Configuration>
 		<Configuration
 			Name="Debug - Max 8|Win32"
-			OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)"
-			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)"
+			OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\"
+			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\"
 			ConfigurationType="2"
 			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 			UseOfMFC="0"
@@ -592,7 +594,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalOptions="/MACHINE:I386"
-				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib shlwapi.lib core.lib geom.lib gfx.lib mesh.lib maxutil.lib maxscrpt.lib paramblk2.lib bmm.lib niflib_debug.lib"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib shlwapi.lib core.lib geom.lib gfx.lib mesh.lib maxutil.lib maxscrpt.lib paramblk2.lib bmm.lib"
 				OutputFile="C:\3dsmax8\plugins\NifPlugins.dlu"
 				LinkIncremental="2"
 				SuppressStartupBanner="true"
@@ -632,8 +634,8 @@
 		</Configuration>
 		<Configuration
 			Name="Debug - Max 5|Win32"
-			OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)"
-			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)"
+			OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\"
+			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\"
 			ConfigurationType="2"
 			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 			UseOfMFC="0"
@@ -736,7 +738,7 @@
 		<Configuration
 			Name="Release - Max 5|Win32"
 			OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\"
-			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)"
+			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\"
 			ConfigurationType="2"
 			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 			UseOfMFC="0"
@@ -837,6 +839,212 @@
 				CommandLine="set MaxRootDir=$(TargetDir)\..&#x0D;&#x0A;if exist &quot;%MaxRootDir%\plugcfg&quot; (&#x0D;&#x0A;if not exist &quot;%MaxRootDir%\plugcfg\MaxNifTools.ini&quot; (&#x0D;&#x0A;copy &quot;$(ProjectDir)MaxNifTools.ini&quot; &quot;%MaxRootDir%\plugcfg\MaxNifTools.ini&quot;&#x0D;&#x0A;)&#x0D;&#x0A;)&#x0D;&#x0A;xcopy /D /Y /I &quot;$(ProjectDir)MaxNifPlugins_Readme.txt&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;xcopy /D /Y /I &quot;$(ProjectDir)MaxNifTools.ini&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;xcopy /D /Y /I &quot;$(TargetPath)&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
 			/>
 		</Configuration>
+		<Configuration
+			Name="Debug - Max 9|Win32"
+			OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\"
+			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName="$(OutDir)NifPlugins.tlb"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/LD /Zm200 /FI&quot;$(ProjectDir)NifPlugins\pch.h&quot;"
+				Optimization="0"
+				InlineFunctionExpansion="2"
+				AdditionalIncludeDirectories="C:\3dsmax9\maxsdk\include;..\niflib\include;..\niflib;.\NifCommon"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;USE_NIFLIB_TEMPLATE_HELPERS;_USE_MATH_DEFINES;USE_UNSUPPORTED_CODE;USE_BIPED"
+				GeneratePreprocessedFile="0"
+				MinimalRebuild="true"
+				ExceptionHandling="2"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				ForceConformanceInForLoopScope="false"
+				UsePrecompiledHeader="2"
+				PrecompiledHeaderThrough="$(ProjectDir)NifPlugins\pch.h"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="3"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG;NIFPLUGINS"
+				Culture="1033"
+				AdditionalIncludeDirectories=".\NifCommon"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/MACHINE:I386"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib shlwapi.lib core.lib geom.lib gfx.lib mesh.lib maxutil.lib maxscrpt.lib paramblk2.lib bmm.lib niflib_debug.lib"
+				OutputFile="C:\3dsmax9\plugins\NifPlugins.dlu"
+				LinkIncremental="2"
+				SuppressStartupBanner="true"
+				AdditionalLibraryDirectories="C:\3dsmax9\maxsdk\lib;..\niflib\lib"
+				IgnoreDefaultLibraryNames="msvcrtd.lib"
+				ModuleDefinitionFile=".\NifPlugins\NifPlugins.def"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
+				SubSystem="2"
+				BaseAddress="0x16860000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release - Max 9|Win32"
+			OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\"
+			IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			WholeProgramOptimization="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName="$(OutDir)NifPlugins.tlb"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/LD /Zm200 /FI&quot;$(ProjectDir)NifPlugins\pch.h&quot;"
+				InlineFunctionExpansion="2"
+				AdditionalIncludeDirectories="C:\3dsmax9\maxsdk\include;..\niflib\include;..\niflib;.\NifCommon"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;USE_NIFLIB_TEMPLATE_HELPERS;_USE_MATH_DEFINES;USE_BIPED"
+				StringPooling="true"
+				ExceptionHandling="2"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				ForceConformanceInForLoopScope="false"
+				UsePrecompiledHeader="2"
+				PrecompiledHeaderThrough="$(ProjectDir)NifPlugins\pch.h"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="3"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG;NIFPLUGINS"
+				Culture="1033"
+				AdditionalIncludeDirectories=".\NifCommon"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/MACHINE:I386"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib shlwapi.lib core.lib geom.lib gfx.lib mesh.lib maxutil.lib maxscrpt.lib paramblk2.lib bmm.lib niflib.lib"
+				OutputFile="C:\3dsmax9\plugins\NifPlugins.dlu"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				AdditionalLibraryDirectories="C:\3dsmax9\maxsdk\lib;..\niflib\lib"
+				ModuleDefinitionFile=".\NifPlugins\NifPlugins.def"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				SetChecksum="true"
+				BaseAddress="0x16860000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="set MaxRootDir=$(TargetDir)\..&#x0D;&#x0A;if exist &quot;%MaxRootDir%\plugcfg&quot; (&#x0D;&#x0A;if not exist &quot;%MaxRootDir%\plugcfg\MaxNifTools.ini&quot; (&#x0D;&#x0A;copy &quot;$(ProjectDir)MaxNifTools.ini&quot; &quot;%MaxRootDir%\plugcfg\MaxNifTools.ini&quot;&#x0D;&#x0A;)&#x0D;&#x0A;)&#x0D;&#x0A;xcopy /D /Y /I &quot;$(ProjectDir)MaxNifPlugins_Readme.txt&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;xcopy /D /Y /I &quot;$(ProjectDir)MaxNifTools.ini&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;xcopy /D /Y /I &quot;$(TargetPath)&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+			/>
+		</Configuration>
 	</Configurations>
 	<References>
 	</References>
@@ -1171,6 +1379,24 @@
 						XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
 					/>
 				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug - Max 9|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						ObjectFile="$(IntDir)\$(InputName)1.obj"
+						XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release - Max 9|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						ObjectFile="$(IntDir)\$(InputName)1.obj"
+						XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
+					/>
+				</FileConfiguration>
 			</File>
 			<File
 				RelativePath=".\NifPlugins\NifPlugins.rc"
@@ -1243,6 +1469,22 @@
 						UsePrecompiledHeader="1"
 					/>
 				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug - Max 9|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						UsePrecompiledHeader="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release - Max 9|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						UsePrecompiledHeader="1"
+					/>
+				</FileConfiguration>
 			</File>
 			<File
 				RelativePath=".\NifPlugins\pch.h"
diff --git a/NifProps/bhkCapsuleObj.cpp b/NifProps/bhkCapsuleObj.cpp
index e237f2f0ed72998ffd14811579bf889fc60925d9..9474be2fe131d137341088c0625ebf78dc0b92f7 100644
--- a/NifProps/bhkCapsuleObj.cpp
+++ b/NifProps/bhkCapsuleObj.cpp
@@ -54,7 +54,7 @@ public:
    CreateMouseCallBack* GetCreateMouseCallBack();
    void BeginEditParams( IObjParam  *ip, ULONG flags,Animatable *prev);
    void EndEditParams( IObjParam *ip, ULONG flags,Animatable *next);
-   RefTargetHandle Clone(RemapDir& remap = NoRemap());
+   RefTargetHandle Clone(RemapDir& remap);
    TCHAR *GetObjectName() { return GetString(IDS_RB_Capsule); }
 
    // Animatable methods		
@@ -285,9 +285,9 @@ BOOL CapsuleParamDlgProc::DlgProc(TimeValue t,IParamMap *map,HWND hWnd,UINT msg,
 bhkCapsuleObject::bhkCapsuleObject(BOOL loading)
 {
    SetAFlag(A_PLUGIN1);
-   MakeRefByID(FOREVER, 0, CreateParameterBlock(curDescVer, PBLOCK_LENGTH, CURRENT_VERSION));
+   ReplaceReference(0, CreateParameterBlock(curDescVer, PBLOCK_LENGTH, CURRENT_VERSION));
    assert(pblock);
-   MakeRefByID(FOREVER, 1, GetRBBlock());
+   ReplaceReference(1, GetRBBlock());
 
    pblock->SetValue(PB_RADIUS1,0,crtRadius1);
    pblock->SetValue(PB_RADIUS2,0,crtRadius2);
diff --git a/NifProps/bhkSphereObj.cpp b/NifProps/bhkSphereObj.cpp
index 8b8984cfe7ea1c703f02ec00abb0d39ff2dca838..9971cb548b497ee0312980a6c6698e56d3c93428 100644
--- a/NifProps/bhkSphereObj.cpp
+++ b/NifProps/bhkSphereObj.cpp
@@ -49,7 +49,7 @@ public:
    CreateMouseCallBack* GetCreateMouseCallBack();
    void BeginEditParams( IObjParam  *ip, ULONG flags,Animatable *prev);
    void EndEditParams( IObjParam *ip, ULONG flags,Animatable *next);
-   RefTargetHandle Clone(RemapDir& remap = NoRemap());
+   RefTargetHandle Clone(RemapDir& remap);
    TCHAR *GetObjectName() { return GetString(IDS_RB_SPHERE); }
 
    // From GeomObject
@@ -254,9 +254,9 @@ BOOL SphereParamDlgProc::DlgProc(TimeValue t,IParamMap *map,HWND hWnd,UINT msg,W
 bhkSphereObject::bhkSphereObject(BOOL loading)
 {
    SetAFlag(A_PLUGIN1);
-   MakeRefByID(FOREVER, 0, CreateParameterBlock(curDescVer, PBLOCK_LENGTH, CURRENT_VERSION));
+   ReplaceReference(0, CreateParameterBlock(curDescVer, PBLOCK_LENGTH, CURRENT_VERSION));
    assert(pblock);
-   MakeRefByID(FOREVER, 1, GetRBBlock());
+   ReplaceReference(1, GetRBBlock());
 
    pblock->SetValue(PB_RADIUS,0,crtRadius);
    pblock->SetValue(PB_SMOOTH,0,dlgSmooth);