diff --git a/Makefile b/Makefile
index 1543314cb80caa88f9369afb0148c83754f1df5c..d85cd2ed5191a4da03cf6ce33fe9d42b83463d48 100644
--- a/Makefile
+++ b/Makefile
@@ -6,6 +6,9 @@
 #
 CC     		= gcc
 CXX 		= g++
+RM         = rm
+LINK       = ln
+
 # -g<1-3> (ex: -g3) for debugging extra's may or may not be compatible with the broad spectrum of gcc features included with the various 
 # -O series of options 
 #
@@ -24,7 +27,7 @@ DEBUGGING	=
 # Example: -march=k8 would generate enhancements for the k8 family (opterons and some athlons).or -march=pentium4 for a pentium4
 # For more info read this: http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options
 #
-CFLAGS 		= -O2 -Wall -fPIC $(DEBUGGING) -Iinclude
+CFLAGS 		= -O2 -Wall -fPIC $(DEBUGGING) -fpermissive -Iinclude -D BUILDING_NIFLIB_DLL
 CXXFLAGS	= $(CFLAGS)
 #IT should find the libs used, but if it doesn't specify here. Ex: -lm for libm.so.<whatever>
 LIBS		=
@@ -40,351 +43,374 @@ TARGET1       = libniflib.so.0
 TARGET2       = libniflib.so.0.$(VERSION_MIN)
 
 
-
-
-
-OBJ_FILES = src/ComplexShape.o \
-           src/kfm.o \
-           src/MatTexCollection.o \
-           src/niflib.o \
-           src/NIF_IO.o \
-           src/nif_math.o \
-           src/ObjectRegistry.o \
-           src/pch.o \
-           src/Type.o \
-           src/obj/AvoidNode.o \
-           src/obj/bhkBlendCollisionObject.o \
-           src/obj/bhkBlendController.o \
-           src/obj/bhkBoxShape.o \
-           src/obj/bhkBvTreeShape.o \
-           src/obj/bhkCapsuleShape.o \
-           src/obj/bhkCollisionObject.o \
-           src/obj/bhkConstraint.o \
-           src/obj/bhkConvexShape.o \
-           src/obj/bhkConvexTransformShape.o \
-           src/obj/bhkConvexVerticesShape.o \
-           src/obj/bhkEntity.o \
-           src/obj/bhkHingeConstraint.o \
-           src/obj/bhkLimitedHingeConstraint.o \
-           src/obj/bhkListShape.o \
-           src/obj/bhkMalleableConstraint.o \
-           src/obj/bhkMoppBvTreeShape.o \
-           src/obj/bhkMultiSphereShape.o \
-           src/obj/bhkNiCollisionObject.o \
-           src/obj/bhkNiTriStripsShape.o \
-           src/obj/bhkPackedNiTriStripsShape.o \
-           src/obj/bhkPCollisionObject.o \
-           src/obj/bhkPhantom.o \
-           src/obj/bhkPrismaticConstraint.o \
-           src/obj/bhkRagdollConstraint.o \
-           src/obj/bhkRefObject.o \
-           src/obj/bhkRigidBody.o \
-           src/obj/bhkRigidBodyT.o \
-           src/obj/bhkSerializable.o \
-           src/obj/bhkShapeCollection.o \
-           src/obj/bhkShape.o \
-           src/obj/bhkShapePhantom.o \
-           src/obj/bhkSimpleShapePhantom.o \
-           src/obj/bhkSPCollisionObject.o \
-           src/obj/bhkSphereRepShape.o \
-           src/obj/bhkSphereShape.o \
-           src/obj/bhkStiffSpringConstraint.o \
-           src/obj/bhkTransformShape.o \
-           src/obj/bhkWorldObject.o \
-           src/obj/BSBound.o \
-           src/obj/BSFurnitureMarker.o \
-           src/obj/BSKeyframeController.o \
-           src/obj/BSParentVelocityModifier.o \
-           src/obj/BSPSysArrayEmitter.o \
-           src/obj/BSWindModifier.o \
-           src/obj/BSXFlags.o \
-           src/obj/FxButton.o \
-           src/obj/FxRadioButton.o \
-           src/obj/FxWidget.o \
-           src/obj/hkPackedNiTriStripsData.o \
-           src/obj/NiAlphaController.o \
-           src/obj/NiAlphaProperty.o \
-           src/obj/NiAmbientLight.o \
-           src/obj/NiArkAnimationExtraData.o \
-           src/obj/NiArkImporterExtraData.o \
-           src/obj/NiArkShaderExtraData.o \
-           src/obj/NiArkTextureExtraData.o \
-           src/obj/NiArkViewportInfoExtraData.o \
-           src/obj/NiAutoNormalParticles.o \
-           src/obj/NiAutoNormalParticlesData.o \
-           src/obj/NiAVObject.o \
-           src/obj/NiAVObjectPalette.o \
-           src/obj/NiBillboardNode.o \
-           src/obj/NiBinaryExtraData.o \
-           src/obj/NiBinaryVoxelData.o \
-           src/obj/NiBinaryVoxelExtraData.o \
-           src/obj/NiBlendBoolInterpolator.o \
-           src/obj/NiBlendFloatInterpolator.o \
-           src/obj/NiBlendInterpolator.o \
-           src/obj/NiBlendPoint3Interpolator.o \
-           src/obj/NiBlendTransformInterpolator.o \
-           src/obj/NiBone.o \
-           src/obj/NiBoneLODController.o \
-           src/obj/NiBoolData.o \
-           src/obj/NiBooleanExtraData.o \
-           src/obj/NiBoolInterpController.o \
-           src/obj/NiBoolInterpolator.o \
-           src/obj/NiBoolTimelineInterpolator.o \
-           src/obj/NiBSAnimationNode.o \
-           src/obj/NiBSBoneLODController.o \
-           src/obj/NiBSPArrayController.o \
-           src/obj/NiBSParticleNode.o \
-           src/obj/NiBSplineBasisData.o \
-           src/obj/NiBSplineCompFloatInterpolator.o \
-           src/obj/NiBSplineCompPoint3Interpolator.o \
-           src/obj/NiBSplineCompTransformInterpolator.o \
-           src/obj/NiBSplineData.o \
-           src/obj/NiBSplineFloatInterpolator.o \
-           src/obj/NiBSplineInterpolator.o \
-           src/obj/NiBSplinePoint3Interpolator.o \
-           src/obj/NiBSplineTransformInterpolator.o \
-           src/obj/NiCamera.o \
-           src/obj/NiClod.o \
-           src/obj/NiClodData.o \
-           src/obj/NiClodSkinInstance.o \
-           src/obj/NiCollisionData.o \
-           src/obj/NiCollisionObject.o \
-           src/obj/NiColorData.o \
-           src/obj/NiColorExtraData.o \
-           src/obj/NiControllerManager.o \
-           src/obj/NiControllerSequence.o \
-           src/obj/NiDefaultAVObjectPalette.o \
-           src/obj/NiDirectionalLight.o \
-           src/obj/NiDitherProperty.o \
-           src/obj/NiDynamicEffect.o \
-           src/obj/NiExtraDataController.o \
-           src/obj/NiExtraData.o \
-           src/obj/NiFlipController.o \
-           src/obj/NiFloatData.o \
-           src/obj/NiFloatExtraDataController.o \
-           src/obj/NiFloatExtraData.o \
-           src/obj/NiFloatInterpController.o \
-           src/obj/NiFloatInterpolator.o \
-           src/obj/NiFloatsExtraData.o \
-           src/obj/NiFogProperty.o \
-           src/obj/NiGeometry.o \
-           src/obj/NiGeometryData.o \
-           src/obj/NiGeomMorpherController.o \
-           src/obj/NiGravity.o \
-           src/obj/NiImage.o \
-           src/obj/NiIntegerExtraData.o \
-           src/obj/NiIntegersExtraData.o \
-           src/obj/NiInterpController.o \
-           src/obj/NiInterpolator.o \
-           src/obj/NiKeyBasedInterpolator.o \
-           src/obj/NiKeyframeController.o \
-           src/obj/NiKeyframeData.o \
-           src/obj/NiLightColorController.o \
-           src/obj/NiLight.o \
-           src/obj/NiLightDimmerController.o \
-           src/obj/NiLines.o \
-           src/obj/NiLinesData.o \
-           src/obj/NiLODData.o \
-           src/obj/NiLODNode.o \
-           src/obj/NiLookAtController.o \
-           src/obj/NiLookAtInterpolator.o \
-           src/obj/NiMaterialColorController.o \
-           src/obj/NiMaterialProperty.o \
-           src/obj/NiMeshParticleSystem.o \
-           src/obj/NiMeshPSysData.o \
-           src/obj/NiMorphData.o \
-           src/obj/NiMultiTargetTransformController.o \
-           src/obj/NiMultiTextureProperty.o \
-           src/obj/NiNode.o \
-           src/obj/NiObject.o \
-           src/obj/NiObjectNET.o \
-           src/obj/NiPalette.o \
-           src/obj/NiParticleBomb.o \
-           src/obj/NiParticleColorModifier.o \
-           src/obj/NiParticleGrowFade.o \
-           src/obj/NiParticleMeshes.o \
-           src/obj/NiParticleMeshesData.o \
-           src/obj/NiParticleMeshModifier.o \
-           src/obj/NiParticleModifier.o \
-           src/obj/NiParticleRotation.o \
-           src/obj/NiParticles.o \
-           src/obj/NiParticlesData.o \
-           src/obj/NiParticleSystemController.o \
-           src/obj/NiParticleSystem.o \
-           src/obj/NiPathController.o \
-           src/obj/NiPathInterpolator.o \
-           src/obj/NiPhysXActorDesc.o \
-           src/obj/NiPhysXBodyDesc.o \
-           src/obj/NiPhysXD6JointDesc.o \
-           src/obj/NiPhysXKinematicSrc.o \
-           src/obj/NiPhysXMaterialDesc.o \
-           src/obj/NiPhysXMeshDesc.o \
-           src/obj/NiPhysXProp.o \
-           src/obj/NiPhysXPropDesc.o \
-           src/obj/NiPhysXShapeDesc.o \
-           src/obj/NiPhysXTransformDest.o \
-           src/obj/NiPixelData.o \
-           src/obj/NiPlanarCollider.o \
-           src/obj/NiPoint3InterpController.o \
-           src/obj/NiPoint3Interpolator.o \
-           src/obj/NiPointLight.o \
-           src/obj/NiPosData.o \
-           src/obj/NiProperty.o \
-           src/obj/NiPSysAgeDeathModifier.o \
-           src/obj/NiPSysBombModifier.o \
-           src/obj/NiPSysBoundUpdateModifier.o \
-           src/obj/NiPSysBoxEmitter.o \
-           src/obj/NiPSysCollider.o \
-           src/obj/NiPSysColliderManager.o \
-           src/obj/NiPSysColorModifier.o \
-           src/obj/NiPSysCylinderEmitter.o \
-           src/obj/NiPSysData.o \
-           src/obj/NiPSysDragModifier.o \
-           src/obj/NiPSysEmitter.o \
-           src/obj/NiPSysEmitterCtlr.o \
-           src/obj/NiPSysEmitterCtlrData.o \
-           src/obj/NiPSysEmitterDeclinationCtlr.o \
-           src/obj/NiPSysEmitterDeclinationVarCtlr.o \
-           src/obj/NiPSysEmitterInitialRadiusCtlr.o \
-           src/obj/NiPSysEmitterLifeSpanCtlr.o \
-           src/obj/NiPSysEmitterSpeedCtlr.o \
-           src/obj/NiPSysGravityModifier.o \
-           src/obj/NiPSysGravityStrengthCtlr.o \
-           src/obj/NiPSysGrowFadeModifier.o \
-           src/obj/NiPSysMeshEmitter.o \
-           src/obj/NiPSysMeshUpdateModifier.o \
-           src/obj/NiPSysModifierActiveCtlr.o \
-           src/obj/NiPSysModifierBoolCtlr.o \
-           src/obj/NiPSysModifier.o \
-           src/obj/NiPSysModifierCtlr.o \
-           src/obj/NiPSysModifierFloatCtlr.o \
-           src/obj/NiPSysPlanarCollider.o \
-           src/obj/NiPSysPositionModifier.o \
-           src/obj/NiPSysResetOnLoopCtlr.o \
-           src/obj/NiPSysRotationModifier.o \
-           src/obj/NiPSysSpawnModifier.o \
-           src/obj/NiPSysSphereEmitter.o \
-           src/obj/NiPSysSphericalCollider.o \
-           src/obj/NiPSysUpdateCtlr.o \
-           src/obj/NiPSysVolumeEmitter.o \
-           src/obj/NiRangeLODData.o \
-           src/obj/NiRawImageData.o \
-           src/obj/NiRollController.o \
-           src/obj/NiRotatingParticles.o \
-           src/obj/NiRotatingParticlesData.o \
-           src/obj/NiScreenLODData.o \
-           src/obj/NiSequence.o \
-           src/obj/NiSequenceStreamHelper.o \
-           src/obj/NiShadeProperty.o \
-           src/obj/NiSingleInterpController.o \
-           src/obj/NiSkinData.o \
-           src/obj/NiSkinInstance.o \
-           src/obj/NiSkinPartition.o \
-           src/obj/NiSortAdjustNode.o \
-           src/obj/NiSourceCubeMap.o \
-           src/obj/NiSourceTexture.o \
-           src/obj/NiSpecularProperty.o \
-           src/obj/NiSphericalCollider.o \
-           src/obj/NiSpotLight.o \
-           src/obj/NiStencilProperty.o \
-           src/obj/NiStringExtraData.o \
-           src/obj/NiStringPalette.o \
-           src/obj/NiStringsExtraData.o \
-           src/obj/NiSwitchNode.o \
-           src/obj/NiTextKeyExtraData.o \
-           src/obj/NiTexture.o \
-           src/obj/NiTextureEffect.o \
-           src/obj/NiTextureModeProperty.o \
-           src/obj/NiTextureProperty.o \
-           src/obj/NiTextureTransformController.o \
-           src/obj/NiTexturingProperty.o \
-           src/obj/NiTimeController.o \
-           src/obj/NiTransformController.o \
-           src/obj/NiTransformData.o \
-           src/obj/NiTransformInterpolator.o \
-           src/obj/NiTriBasedGeom.o \
-           src/obj/NiTriBasedGeomData.o \
-           src/obj/NiTriShape.o \
-           src/obj/NiTriShapeData.o \
-           src/obj/NiTriShapeSkinController.o \
-           src/obj/NiTriStrips.o \
-           src/obj/NiTriStripsData.o \
-           src/obj/NiUVController.o \
-           src/obj/NiUVData.o \
-           src/obj/NiVectorExtraData.o \
-           src/obj/NiVertexColorProperty.o \
-           src/obj/NiVertWeightsExtraData.o \
-           src/obj/NiVisController.o \
-           src/obj/NiVisData.o \
-           src/obj/NiWireframeProperty.o \
-           src/obj/NiZBufferProperty.o \
-           src/obj/RootCollisionNode.o \
-           src/gen/ArkTexture.o \
-           src/gen/AVObject.o \
-           src/gen/BoundingBox.o \
-           src/gen/BoundingVolume.o \
-           src/gen/BoxBV.o \
-           src/gen/ByteArray.o \
-           src/gen/ByteColor3.o \
-           src/gen/ByteColor4.o \
-           src/gen/ByteMatrix.o \
-           src/gen/CapsuleBV.o \
-           src/gen/ChannelData.o \
-           src/gen/ControllerLink.o \
-           src/gen/enums.o \
-           src/gen/ExportInfo.o \
-           src/gen/Footer.o \
-           src/gen/FurniturePosition.o \
-           src/gen/HalfSpaceBV.o \
-           src/gen/Header.o \
-           src/gen/hkTriangle.o \
-           src/gen/InertiaMatrix.o \
-           src/gen/LimitedHingeDescriptor.o \
-           src/gen/LODRange.o \
-           src/gen/MatchGroup.o \
-           src/gen/MipMap.o \
-           src/gen/Morph.o \
-           src/gen/MorphWeight.o \
-           src/gen/MultiTextureElement.o \
-           src/gen/NodeGroup.o \
-           src/gen/OblivionColFilter.o \
-           src/gen/OblivionSubShape.o \
-           src/gen/OldSkinData.o \
-           src/gen/Particle.o \
-           src/gen/physXMaterialRef.o \
-           src/gen/QuaternionXYZW.o \
-           src/gen/RagdollDescriptor.o \
-           src/gen/register.o \
-           src/gen/ShaderTexDesc.o \
-           src/gen/SkinData.o \
-           src/gen/SkinPartition.o \
-           src/gen/SkinShape.o \
-           src/gen/SkinShapeGroup.o \
-           src/gen/SkinWeight.o \
-           src/gen/SphereBV.o \
-           src/gen/StringPalette.o \
-           src/gen/TBC.o \
-           src/gen/TexDesc.o \
-           src/gen/TexSource.o \
-           src/gen/UnionBV.o
+OBJ_FILES = \
+            NvTriStrip/NvTriStrip.o \
+            NvTriStrip/NvTriStripObjects.o \
+            NvTriStrip/VertexCache.o \
+            src/ComplexShape.o \
+            src/gen/ArkTexture.o \
+            src/gen/AVObject.o \
+            src/gen/BoundingBox.o \
+            src/gen/BoundingVolume.o \
+            src/gen/BoxBV.o \
+            src/gen/ByteArray.o \
+            src/gen/ByteColor3.o \
+            src/gen/ByteColor4.o \
+            src/gen/ByteMatrix.o \
+            src/gen/CapsuleBV.o \
+            src/gen/ChannelData.o \
+            src/gen/ControllerLink.o \
+            src/gen/enums.o \
+            src/gen/ExportInfo.o \
+            src/gen/Footer.o \
+            src/gen/FurniturePosition.o \
+            src/gen/HalfSpaceBV.o \
+            src/gen/Header.o \
+            src/gen/hkTriangle.o \
+            src/gen/LimitedHingeDescriptor.o \
+            src/gen/LODRange.o \
+            src/gen/MatchGroup.o \
+            src/gen/MipMap.o \
+            src/gen/Morph.o \
+            src/gen/MorphWeight.o \
+            src/gen/MultiTextureElement.o \
+            src/gen/NodeGroup.o \
+            src/gen/OblivionColFilter.o \
+            src/gen/OblivionSubShape.o \
+            src/gen/OldSkinData.o \
+            src/gen/Particle.o \
+            src/gen/physXMaterialRef.o \
+            src/gen/Polygon.o \
+            src/gen/QuaternionXYZW.o \
+            src/gen/RagDollDescriptor.o \
+            src/gen/register.o \
+            src/gen/ShaderTexDesc.o \
+            src/gen/SkinData.o \
+            src/gen/SkinPartition.o \
+            src/gen/SkinShape.o \
+            src/gen/SkinShapeGroup.o \
+            src/gen/SkinWeight.o \
+            src/gen/SphereBV.o \
+            src/gen/StringPalette.o \
+            src/gen/TBC.o \
+            src/gen/TexDesc.o \
+            src/gen/TexSource.o \
+            src/gen/UnionBV.o \
+            src/Inertia.o \
+            src/kfm.o \
+            src/MatTexCollection.o \
+            src/niflib.o \
+            src/nifqhull.o \
+            src/NIF_IO.o \
+            src/nif_math.o \
+            src/ObjectRegistry.o \
+            src/obj/ATextureRenderData.o \
+            src/obj/AvoidNode.o \
+            src/obj/bhkBlendCollisionObject.o \
+            src/obj/bhkBlendController.o \
+            src/obj/bhkBoxShape.o \
+            src/obj/bhkBvTreeShape.o \
+            src/obj/bhkCapsuleShape.o \
+            src/obj/bhkCollisionObject.o \
+            src/obj/bhkConstraint.o \
+            src/obj/bhkConvexShape.o \
+            src/obj/bhkConvexTransformShape.o \
+            src/obj/bhkConvexVerticesShape.o \
+            src/obj/bhkEntity.o \
+            src/obj/bhkHingeConstraint.o \
+            src/obj/bhkLimitedHingeConstraint.o \
+            src/obj/bhkListShape.o \
+            src/obj/bhkMalleableConstraint.o \
+            src/obj/bhkMoppBvTreeShape.o \
+            src/obj/bhkMultiSphereShape.o \
+            src/obj/bhkNiCollisionObject.o \
+            src/obj/bhkNiTriStripsShape.o \
+            src/obj/bhkPackedNiTriStripsShape.o \
+            src/obj/bhkPCollisionObject.o \
+            src/obj/bhkPhantom.o \
+            src/obj/bhkPrismaticConstraint.o \
+            src/obj/bhkRagdollConstraint.o \
+            src/obj/bhkRefObject.o \
+            src/obj/bhkRigidBody.o \
+            src/obj/bhkRigidBodyT.o \
+            src/obj/bhkSerializable.o \
+            src/obj/bhkShape.o \
+            src/obj/bhkShapeCollection.o \
+            src/obj/bhkShapePhantom.o \
+            src/obj/bhkSimpleShapePhantom.o \
+            src/obj/bhkSPCollisionObject.o \
+            src/obj/bhkSphereRepShape.o \
+            src/obj/bhkSphereShape.o \
+            src/obj/bhkStiffSpringConstraint.o \
+            src/obj/bhkTransformShape.o \
+            src/obj/bhkWorldObject.o \
+            src/obj/BSBound.o \
+            src/obj/BSFurnitureMarker.o \
+            src/obj/BSKeyframeController.o \
+            src/obj/BSParentVelocityModifier.o \
+            src/obj/BSPSysArrayEmitter.o \
+            src/obj/BSWindModifier.o \
+            src/obj/BSXFlags.o \
+            src/obj/FxButton.o \
+            src/obj/FxRadioButton.o \
+            src/obj/FxWidget.o \
+            src/obj/hkPackedNiTriStripsData.o \
+            src/obj/Ni3dsAlphaAnimator.o \
+            src/obj/Ni3dsAnimationNode.o \
+            src/obj/Ni3dsColorAnimator.o \
+            src/obj/Ni3dsMorphShape.o \
+            src/obj/Ni3dsParticleSystem.o \
+            src/obj/Ni3dsPathController.o \
+            src/obj/NiAlphaController.o \
+            src/obj/NiAlphaProperty.o \
+            src/obj/NiAmbientLight.o \
+            src/obj/NiArkAnimationExtraData.o \
+            src/obj/NiArkImporterExtraData.o \
+            src/obj/NiArkShaderExtraData.o \
+            src/obj/NiArkTextureExtraData.o \
+            src/obj/NiArkViewportInfoExtraData.o \
+            src/obj/NiAutoNormalParticles.o \
+            src/obj/NiAutoNormalParticlesData.o \
+            src/obj/NiAVObject.o \
+            src/obj/NiAVObjectPalette.o \
+            src/obj/NiBezierMesh.o \
+            src/obj/NiBezierTriangle4.o \
+            src/obj/NiBillboardNode.o \
+            src/obj/NiBinaryExtraData.o \
+            src/obj/NiBinaryVoxelData.o \
+            src/obj/NiBinaryVoxelExtraData.o \
+            src/obj/NiBlendBoolInterpolator.o \
+            src/obj/NiBlendFloatInterpolator.o \
+            src/obj/NiBlendInterpolator.o \
+            src/obj/NiBlendPoint3Interpolator.o \
+            src/obj/NiBlendTransformInterpolator.o \
+            src/obj/NiBone.o \
+            src/obj/NiBoneLODController.o \
+            src/obj/NiBoolData.o \
+            src/obj/NiBooleanExtraData.o \
+            src/obj/NiBoolInterpController.o \
+            src/obj/NiBoolInterpolator.o \
+            src/obj/NiBoolTimelineInterpolator.o \
+            src/obj/NiBSAnimationNode.o \
+            src/obj/NiBSBoneLODController.o \
+            src/obj/NiBSPArrayController.o \
+            src/obj/NiBSParticleNode.o \
+            src/obj/NiBSplineBasisData.o \
+            src/obj/NiBSplineCompFloatInterpolator.o \
+            src/obj/NiBSplineCompPoint3Interpolator.o \
+            src/obj/NiBSplineCompTransformInterpolator.o \
+            src/obj/NiBSplineData.o \
+            src/obj/NiBSplineFloatInterpolator.o \
+            src/obj/NiBSplineInterpolator.o \
+            src/obj/NiBSplinePoint3Interpolator.o \
+            src/obj/NiBSplineTransformInterpolator.o \
+            src/obj/NiCamera.o \
+            src/obj/NiClod.o \
+            src/obj/NiClodData.o \
+            src/obj/NiClodSkinInstance.o \
+            src/obj/NiCollisionData.o \
+            src/obj/NiCollisionObject.o \
+            src/obj/NiColorData.o \
+            src/obj/NiColorExtraData.o \
+            src/obj/NiControllerManager.o \
+            src/obj/NiControllerSequence.o \
+            src/obj/NiDefaultAVObjectPalette.o \
+            src/obj/NiDirectionalLight.o \
+            src/obj/NiDitherProperty.o \
+            src/obj/NiDynamicEffect.o \
+            src/obj/NiEnvMappedTriShape.o \
+            src/obj/NiEnvMappedTriShapeData.o \
+            src/obj/NiExtraData.o \
+            src/obj/NiExtraDataController.o \
+            src/obj/NiFlipController.o \
+            src/obj/NiFloatData.o \
+            src/obj/NiFloatExtraData.o \
+            src/obj/NiFloatExtraDataController.o \
+            src/obj/NiFloatInterpController.o \
+            src/obj/NiFloatInterpolator.o \
+            src/obj/NiFloatsExtraData.o \
+            src/obj/NiFogProperty.o \
+            src/obj/NiGeometry.o \
+            src/obj/NiGeometryData.o \
+            src/obj/NiGeomMorpherController.o \
+            src/obj/NiGravity.o \
+            src/obj/NiImage.o \
+            src/obj/NiIntegerExtraData.o \
+            src/obj/NiIntegersExtraData.o \
+            src/obj/NiInterpController.o \
+            src/obj/NiInterpolator.o \
+            src/obj/NiKeyBasedInterpolator.o \
+            src/obj/NiKeyframeController.o \
+            src/obj/NiKeyframeData.o \
+            src/obj/NiLight.o \
+            src/obj/NiLightColorController.o \
+            src/obj/NiLightDimmerController.o \
+            src/obj/NiLines.o \
+            src/obj/NiLinesData.o \
+            src/obj/NiLODData.o \
+            src/obj/NiLODNode.o \
+            src/obj/NiLookAtController.o \
+            src/obj/NiLookAtInterpolator.o \
+            src/obj/NiMaterialColorController.o \
+            src/obj/NiMaterialProperty.o \
+            src/obj/NiMeshParticleSystem.o \
+            src/obj/NiMeshPSysData.o \
+            src/obj/NiMorphController.o \
+            src/obj/NiMorphData.o \
+            src/obj/NiMorpherController.o \
+            src/obj/NiMultiTargetTransformController.o \
+            src/obj/NiMultiTextureProperty.o \
+            src/obj/NiNode.o \
+            src/obj/NiObject.o \
+            src/obj/NiObjectNET.o \
+            src/obj/NiPalette.o \
+            src/obj/NiParticleBomb.o \
+            src/obj/NiParticleColorModifier.o \
+            src/obj/NiParticleGrowFade.o \
+            src/obj/NiParticleMeshes.o \
+            src/obj/NiParticleMeshesData.o \
+            src/obj/NiParticleMeshModifier.o \
+            src/obj/NiParticleModifier.o \
+            src/obj/NiParticleRotation.o \
+            src/obj/NiParticles.o \
+            src/obj/NiParticlesData.o \
+            src/obj/NiParticleSystem.o \
+            src/obj/NiParticleSystemController.o \
+            src/obj/NiPathController.o \
+            src/obj/NiPathInterpolator.o \
+            src/obj/NiPersistentSrcTextureRendererData.o \
+            src/obj/NiPhysXActorDesc.o \
+            src/obj/NiPhysXBodyDesc.o \
+            src/obj/NiPhysXD6JointDesc.o \
+            src/obj/NiPhysXKinematicSrc.o \
+            src/obj/NiPhysXMaterialDesc.o \
+            src/obj/NiPhysXMeshDesc.o \
+            src/obj/NiPhysXProp.o \
+            src/obj/NiPhysXPropDesc.o \
+            src/obj/NiPhysXShapeDesc.o \
+            src/obj/NiPhysXTransformDest.o \
+            src/obj/NiPixelData.o \
+            src/obj/NiPlanarCollider.o \
+            src/obj/NiPoint3InterpController.o \
+            src/obj/NiPoint3Interpolator.o \
+            src/obj/NiPointLight.o \
+            src/obj/NiPosData.o \
+            src/obj/NiProperty.o \
+            src/obj/NiPSysAgeDeathModifier.o \
+            src/obj/NiPSysBombModifier.o \
+            src/obj/NiPSysBoundUpdateModifier.o \
+            src/obj/NiPSysBoxEmitter.o \
+            src/obj/NiPSysCollider.o \
+            src/obj/NiPSysColliderManager.o \
+            src/obj/NiPSysColorModifier.o \
+            src/obj/NiPSysCylinderEmitter.o \
+            src/obj/NiPSysData.o \
+            src/obj/NiPSysDragModifier.o \
+            src/obj/NiPSysEmitter.o \
+            src/obj/NiPSysEmitterCtlr.o \
+            src/obj/NiPSysEmitterCtlrData.o \
+            src/obj/NiPSysEmitterDeclinationCtlr.o \
+            src/obj/NiPSysEmitterDeclinationVarCtlr.o \
+            src/obj/NiPSysEmitterInitialRadiusCtlr.o \
+            src/obj/NiPSysEmitterLifeSpanCtlr.o \
+            src/obj/NiPSysEmitterSpeedCtlr.o \
+            src/obj/NiPSysGravityModifier.o \
+            src/obj/NiPSysGravityStrengthCtlr.o \
+            src/obj/NiPSysGrowFadeModifier.o \
+            src/obj/NiPSysMeshEmitter.o \
+            src/obj/NiPSysMeshUpdateModifier.o \
+            src/obj/NiPSysModifier.o \
+            src/obj/NiPSysModifierActiveCtlr.o \
+            src/obj/NiPSysModifierBoolCtlr.o \
+            src/obj/NiPSysModifierCtlr.o \
+            src/obj/NiPSysModifierFloatCtlr.o \
+            src/obj/NiPSysPlanarCollider.o \
+            src/obj/NiPSysPositionModifier.o \
+            src/obj/NiPSysResetOnLoopCtlr.o \
+            src/obj/NiPSysRotationModifier.o \
+            src/obj/NiPSysSpawnModifier.o \
+            src/obj/NiPSysSphereEmitter.o \
+            src/obj/NiPSysSphericalCollider.o \
+            src/obj/NiPSysUpdateCtlr.o \
+            src/obj/NiPSysVolumeEmitter.o \
+            src/obj/NiRangeLODData.o \
+            src/obj/NiRawImageData.o \
+            src/obj/NiRollController.o \
+            src/obj/NiRotatingParticles.o \
+            src/obj/NiRotatingParticlesData.o \
+            src/obj/NiScreenElements.o \
+            src/obj/NiScreenElementsData.o \
+            src/obj/NiScreenLODData.o \
+            src/obj/NiSequence.o \
+            src/obj/NiSequenceStreamHelper.o \
+            src/obj/NiShadeProperty.o \
+            src/obj/NiSingleInterpController.o \
+            src/obj/NiSkinData.o \
+            src/obj/NiSkinInstance.o \
+            src/obj/NiSkinPartition.o \
+            src/obj/NiSortAdjustNode.o \
+            src/obj/NiSourceCubeMap.o \
+            src/obj/NiSourceTexture.o \
+            src/obj/NiSpecularProperty.o \
+            src/obj/NiSphericalCollider.o \
+            src/obj/NiSpotLight.o \
+            src/obj/NiStencilProperty.o \
+            src/obj/NiStringExtraData.o \
+            src/obj/NiStringPalette.o \
+            src/obj/NiStringsExtraData.o \
+            src/obj/NiSwitchNode.o \
+            src/obj/NiTextKeyExtraData.o \
+            src/obj/NiTexture.o \
+            src/obj/NiTextureEffect.o \
+            src/obj/NiTextureModeProperty.o \
+            src/obj/NiTextureProperty.o \
+            src/obj/NiTextureTransformController.o \
+            src/obj/NiTexturingProperty.o \
+            src/obj/NiTimeController.o \
+            src/obj/NiTransformController.o \
+            src/obj/NiTransformData.o \
+            src/obj/NiTransformInterpolator.o \
+            src/obj/NiTransparentProperty.o \
+            src/obj/NiTriBasedGeom.o \
+            src/obj/NiTriBasedGeomData.o \
+            src/obj/NiTriShape.o \
+            src/obj/NiTriShapeData.o \
+            src/obj/NiTriShapeSkinController.o \
+            src/obj/NiTriStrips.o \
+            src/obj/NiTriStripsData.o \
+            src/obj/NiUVController.o \
+            src/obj/NiUVData.o \
+            src/obj/NiVectorExtraData.o \
+            src/obj/NiVertexColorProperty.o \
+            src/obj/NiVertWeightsExtraData.o \
+            src/obj/NiVisController.o \
+            src/obj/NiVisData.o \
+            src/obj/NiWireframeProperty.o \
+            src/obj/NiZBufferProperty.o \
+            src/obj/RootCollisionNode.o \
+            src/RefObject.o \
+            src/Type.o \
+            TriStripper/connectivity_graph.o \
+            TriStripper/policy.o \
+            TriStripper/tri_stripper.o \
 
 
 all: Makefile  $(TARGET)
 
 $(TARGET):  $(OBJ_FILES)
-	rm -f $(TARGET)
+	-$(RM) -f $(TARGET)
 	$(CXX) $(L_FLAGS) -o $(TARGET) $(OBJ_FILES) $(LIBS)
-	-ln -s $(TARGET) $(TARGET0)
-	-ln -s $(TARGET) $(TARGET1)
-	-ln -s $(TARGET) $(TARGET2)
+	-$(LINK) -s $(TARGET) $(TARGET0)
+	-$(LINK) -s $(TARGET) $(TARGET1)
+	-$(LINK) -s $(TARGET) $(TARGET2)
 
 clean: clean
-	rm -f $(TARGET)
-	rm -f src/*.o
-	rm -f src/gen/*.o
-	rm -f src/obj/*.o	
-	rm -f $(TARGETA)
-	rm -f $(TARGETD)
-	rm -f $(TARGET0)
-	rm -f $(TARGET1)
-	rm -f $(TARGET2)
+	-$(RM) -f $(TARGET)
+	-$(RM) -f src/*.o
+	-$(RM) -f src/gen/*.o
+	-$(RM) -f src/obj/*.o	
+	-$(RM) -f $(TARGETA)
+	-$(RM) -f $(TARGETD)
+	-$(RM) -f $(TARGET0)
+	-$(RM) -f $(TARGET1)
+	-$(RM) -f $(TARGET2)
diff --git a/include/Key.h b/include/Key.h
index a2614dfcce74b4a9837cd638995006a56bef4af1..81d30c34422a7d812bf969f6b446f2afd8bec2b4 100644
--- a/include/Key.h
+++ b/include/Key.h
@@ -7,6 +7,7 @@ All rights reserved.  Please see niflib.h for license. */
 #include <iostream>
 #include <iomanip>
 #include <vector>
+#include <math.h>
 #include "gen/enums.h"
 
 namespace Niflib {
diff --git a/include/NIF_IO.h b/include/NIF_IO.h
index f6093cece9ab61b89f7f3c493c6ee2f883584be7..7593de2ada5215c4954c5967c157f31e4b8111a9 100644
--- a/include/NIF_IO.h
+++ b/include/NIF_IO.h
@@ -51,7 +51,7 @@ bool UnpackFlag( storage src, size_t lshift ) {
 	//Generate mask
 	storage mask = 1 << lshift;
 
-	return (( src & mask) << lshift) != 0;
+	return (( src & mask) >> lshift) != 0;
 }
 
 template <class storage>
@@ -297,24 +297,14 @@ public:
 private:
 	NifInfo *info;
 	static const int infoIdx;
-	friend static ostream & operator<<( ostream & out, strInfo const & val );
-	friend static istream & operator>>( istream & out, strInfo & val );
+	friend ostream & operator<<( ostream & out, strInfo const & val );
+	friend istream & operator>>( istream & out, strInfo & val );
 public:
 	static NifInfo * getInfo(ios_base& str) {
 		return (NifInfo *)str.pword(infoIdx);
 	}
 };
 
-static ostream & operator<<( ostream & out, strInfo const & val ) {
-	out.pword(strInfo::infoIdx) = (void*)val.info;
-	return (out);
-}
-
-static istream & operator>>( istream & istr, strInfo & val ) {
-	istr.pword(strInfo::infoIdx) = (void*)val.info;
-	return (istr);
-}
-
 
 // hdrInfo
 struct Header;
@@ -325,24 +315,14 @@ public:
 private:
 	Header *info;
 	static const int infoIdx;
-	friend static ostream & operator<<( ostream & out, hdrInfo const & val );
-	friend static istream & operator>>( istream & out, hdrInfo & val );
+	friend ostream & operator<<( ostream & out, hdrInfo const & val );
+	friend istream & operator>>( istream & out, hdrInfo & val );
 public:
 	static Header * getInfo(ios_base& str) {
 		return (Header *)str.pword(infoIdx);
 	}
 };
 
-static ostream & operator<<( ostream & out, hdrInfo const & val ) {
-	out.pword(hdrInfo::infoIdx) = (void*)val.info;
-	return (out);
-}
-
-static istream & operator>>( istream & istr, hdrInfo & val ) {
-	istr.pword(hdrInfo::infoIdx) = (void*)val.info;
-	return (istr);
-}
-
 class NifStreamBuf : public std::streambuf {
 	streamsize size; 
 	pos_type pos;
diff --git a/include/RefObject.h b/include/RefObject.h
index 997264daf186fb2d8b6949ee0df8246863325600..8720805b7d53b200a3ab33a9bc4471edc8b87598 100644
--- a/include/RefObject.h
+++ b/include/RefObject.h
@@ -117,81 +117,5 @@ public:
 	NIFLIB_HIDDEN virtual list< Ref<NiObject> > GetRefs() const = 0;
 };
 
-/*
- * Casting Templates
- */
-
-template <class T> Ref<T> StaticCast( NiObject * object ) {
-	return (T*)object;
-}
-
-template <class T> Ref<const T> StaticCast (const NiObject * object) {
-	return (const T*)object;
-}
-
-template <class T> Ref<T> DynamicCast( NiObject * object ) {
-	if ( object && object->IsDerivedType(T::TYPE) ) {
-		return (T*)object;
-	} else {
-		return NULL;
-	}
-}
-
-template <class T> Ref<const T> DynamicCast( const NiObject * object ) {
-	if ( object && object->IsDerivedType(T::TYPE) ) {
-		return (const T*)object;
-	} else {
-		return NULL;
-	}
-}
-
-#ifdef USE_NIFLIB_TEMPLATE_HELPERS
-template <typename T, typename U> Ref<T> StaticCast( Ref<U>& object ) {
-   return object;
-}
-
-template <typename T, typename U> Ref<T> DynamicCast( Ref<U>& object ) {
-   return object;
-}
-
-template <typename T, typename U> Ref<T> StaticCast( const Ref<U>& object ) {
-   return Ref<T>(object);
-}
-
-template <typename T, typename U> Ref<T> DynamicCast( const Ref<U>& object ) {
-   return Ref<T>(object);
-}
-
-/*!
- * Dynamically cast from a collection of objects to another collection
- * \param objs A collection of object references to be dynamically casted to the specified type.
- * \return A collection of objects that support the requested type.
- */
-template <typename U, typename T>
-inline vector<Ref<U> > DynamicCast( vector<Ref<T> > const & objs ) {
-   vector<Ref<U> > retval;
-   for (vector<Ref<T> >::const_iterator itr = objs.begin(), end = objs.end(); itr != end; ++itr) {
-      Ref<U> obj = DynamicCast<U>(*itr);
-      if (obj) retval.insert(retval.end(), obj);
-   }
-   return retval;
-}
-
-/*!
-* Dynamically cast from a collection of objects to another collection
-* \param objs A collection of object references to be dynamically casted to the specified type.
-* \return A collection of objects that support the requested type.
-*/
-template <typename U, typename T>
-inline list<Ref<U> > DynamicCast( list<Ref<T> > const & objs ) {
-   list<Ref<U> > retval;
-   for (list<Ref<T> >::const_iterator itr = objs.begin(), end = objs.end(); itr != end; ++itr) {
-      Ref<U> obj = DynamicCast<U>(*itr);
-      if (obj) retval.insert(retval.end(), obj);
-   }
-   return retval;
-}
-#endif
-
 } //End Niflib namespace
 #endif
diff --git a/include/nif_math.h b/include/nif_math.h
index 2ad60a1b5d672d46f12d23f186a08b1b7efac94c..4a038f45f56d880f33746f378728b076f25b5ed7 100644
--- a/include/nif_math.h
+++ b/include/nif_math.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for license. */
 #define NIF_MATH_H
 
 #include <cmath>
+#include <cstring> // memcpy has been moved in GCC 4.3
 #include <iostream>
 #include <stdexcept>
 #include "dll_export.h"
diff --git a/include/obj/NiInterpolator.h b/include/obj/NiInterpolator.h
index 2b7af838c03fbf04f17555dfa31ae083ffa66b69..dbbbe8100fab08ffc2c4e6e33f844457fabf438a 100644
--- a/include/obj/NiInterpolator.h
+++ b/include/obj/NiInterpolator.h
@@ -11,6 +11,9 @@ All rights reserved.  Please see niflib.h for license. */
 #define _NIINTERPOLATOR_H_
 
 //--BEGIN FILE HEAD CUSTOM CODE--//
+#if (!defined USHRT_MAX)
+#define USHRT_MAX 0xffff
+#endif
 //--END CUSTOM CODE--//
 
 #include "NiObject.h"
diff --git a/include/obj/NiObject.h b/include/obj/NiObject.h
index 0b870f735c390b61877136a2de8dd3e57e74368c..09bccad5c4946b6f8e69afc73b3cb5032907d6e2 100644
--- a/include/obj/NiObject.h
+++ b/include/obj/NiObject.h
@@ -92,6 +92,83 @@ public:
 
 //--BEGIN FILE FOOT CUSTOM CODE--//
 
+/*
+* Casting Templates
+*/
+
+template <class T> Ref<T> StaticCast( NiObject * object ) {
+	return (T*)object;
+}
+
+template <class T> Ref<const T> StaticCast (const NiObject * object) {
+	return (const T*)object;
+}
+
+template <class T> Ref<T> DynamicCast( NiObject * object ) {
+	if ( object && object->IsDerivedType(T::TYPE) ) {
+		return (T*)object;
+	} else {
+		return NULL;
+	}
+}
+
+template <class T> Ref<const T> DynamicCast( const NiObject * object ) {
+	if ( object && object->IsDerivedType(T::TYPE) ) {
+		return (const T*)object;
+	} else {
+		return NULL;
+	}
+}
+
+#ifdef USE_NIFLIB_TEMPLATE_HELPERS
+template <typename T, typename U> Ref<T> StaticCast( Ref<U>& object ) {
+	return object;
+}
+
+template <typename T, typename U> Ref<T> DynamicCast( Ref<U>& object ) {
+	return object;
+}
+
+template <typename T, typename U> Ref<T> StaticCast( const Ref<U>& object ) {
+	return Ref<T>(object);
+}
+
+template <typename T, typename U> Ref<T> DynamicCast( const Ref<U>& object ) {
+	return Ref<T>(object);
+}
+
+/*!
+* Dynamically cast from a collection of objects to another collection
+* \param objs A collection of object references to be dynamically casted to the specified type.
+* \return A collection of objects that support the requested type.
+*/
+template <typename U, typename T>
+inline vector<Ref<U> > DynamicCast( vector<Ref<T> > const & objs ) {
+	vector<Ref<U> > retval;
+	for (vector<Ref<T> >::const_iterator itr = objs.begin(), end = objs.end(); itr != end; ++itr) {
+		Ref<U> obj = DynamicCast<U>(*itr);
+		if (obj) retval.insert(retval.end(), obj);
+	}
+	return retval;
+}
+
+/*!
+* Dynamically cast from a collection of objects to another collection
+* \param objs A collection of object references to be dynamically casted to the specified type.
+* \return A collection of objects that support the requested type.
+*/
+template <typename U, typename T>
+inline list<Ref<U> > DynamicCast( list<Ref<T> > const & objs ) {
+	list<Ref<U> > retval;
+	for (list<Ref<T> >::const_iterator itr = objs.begin(), end = objs.end(); itr != end; ++itr) {
+		Ref<U> obj = DynamicCast<U>(*itr);
+		if (obj) retval.insert(retval.end(), obj);
+	}
+	return retval;
+}
+#endif
+
+
 //--END CUSTOM CODE--//
 
 } //End Niflib namespace
diff --git a/include/obj/NiSkinPartition.h b/include/obj/NiSkinPartition.h
index 045dfcdd68886d8a6345f28c8f319b1b6ed4fda6..0eae885de633923d26f768e1325f035054568371 100644
--- a/include/obj/NiSkinPartition.h
+++ b/include/obj/NiSkinPartition.h
@@ -11,6 +11,9 @@ All rights reserved.  Please see niflib.h for license. */
 #define _NISKINPARTITION_H_
 
 //--BEGIN FILE HEAD CUSTOM CODE--//
+namespace Niflib {
+class NiTriBasedGeom;
+}
 //--END CUSTOM CODE--//
 
 #include "NiObject.h"
diff --git a/src/ComplexShape.cpp b/src/ComplexShape.cpp
index 06574c914436293ed395717a11c79f5022b1fdd3..72a2823fe8af830735b803f357f923f1fe6b04b6 100644
--- a/src/ComplexShape.cpp
+++ b/src/ComplexShape.cpp
@@ -712,7 +712,7 @@ Ref<NiAVObject> ComplexShape::Split( NiNode * parent, Matrix44 & transform, int
 				if (niTexProp->HasTexture(tex_num)) {
 					shapeTexCoordSets.push_back(tex_num);
 					TexDesc td = niTexProp->GetTexture(tex_num);
-					td.uvSet = shapeTexCoordSets.size() - 1;
+					td.uvSet = int(shapeTexCoordSets.size()) - 1;
 					niTexProp->SetTexture(tex_num, td);
 				}
 			}
diff --git a/src/Inertia.cpp b/src/Inertia.cpp
index ae8c8fd4186eb07de50ee8e5152e5394537ffe45..af073fe2d3518b2f515f94f8dc4e60a1a48a8da1 100644
--- a/src/Inertia.cpp
+++ b/src/Inertia.cpp
@@ -180,8 +180,8 @@ void Inertia::CalcMassPropertiesPolyhedron(const vector<Vector3>& vertices,
 {
 	if (extCalcMassPropertiesPolyhedronRoutine) {
 		extCalcMassPropertiesPolyhedronRoutine(
-			vertices.size(), &vertices[0],
-			triangles.size(), triangles.empty() ? NULL : &triangles[0],
+			int(vertices.size()), &vertices[0],
+			int(triangles.size()), triangles.empty() ? NULL : &triangles[0],
 			density, solid, mass, volume, center, inertia);
 		return;
 	}
@@ -332,7 +332,7 @@ void Inertia::CombineMassProperties(
 {
 	if (extCombineMassPropertiesRoutine) {
 		extCombineMassPropertiesRoutine(
-			masses.size(),
+			int(masses.size()),
 			&masses[0], &volumes[0], &centers[0], &inertias[0], &transforms[0],
 			mass, volume, center, inertia);
 		return;
diff --git a/src/NIF_IO.cpp b/src/NIF_IO.cpp
index c02e3961fab78d66c0922f696225c227c27bfbe5..31152e2e6ba8ac4fd3efb71ad4e176098e24fdfb 100644
--- a/src/NIF_IO.cpp
+++ b/src/NIF_IO.cpp
@@ -3,7 +3,7 @@ All rights reserved.  Please see niflib.h for license. */
 
 #include "../include/NIF_IO.h"
 #include "../include/niflib.h"
-#include "../include/gen/header.h"
+#include "../include/gen/Header.h"
 namespace Niflib {
 
 //--Endian Support Functions--//
@@ -854,5 +854,25 @@ void NifStream( InertiaMatrix const & val, ostream& out, const NifInfo & info )
 	}
 }
 
+ostream & operator<<( ostream & out, hdrInfo const & val ) {
+	out.pword(hdrInfo::infoIdx) = (void*)val.info;
+	return (out);
+}
+
+istream & operator>>( istream & istr, hdrInfo & val ) {
+	istr.pword(hdrInfo::infoIdx) = (void*)val.info;
+	return (istr);
+}
 
-}
\ No newline at end of file
+
+ostream & operator<<( ostream & out, strInfo const & val ) {
+	out.pword(strInfo::infoIdx) = (void*)val.info;
+	return (out);
+}
+
+istream & operator>>( istream & istr, strInfo & val ) {
+	istr.pword(strInfo::infoIdx) = (void*)val.info;
+	return (istr);
+}
+
+}
diff --git a/src/niflib.cpp b/src/niflib.cpp
index 179ea3839d77658f897394d43f7222f3437986c0..3e8a20929d967530ae5d1a166adcd2e61fc47804 100644
--- a/src/niflib.cpp
+++ b/src/niflib.cpp
@@ -127,9 +127,10 @@ vector<NiObjectRef> ReadNifList( istream & in, NifInfo * info ) {
 
 	//--Read Header--//
 	Header header;
+	hdrInfo hinfo(&header);
 
 	// set the header pointer in the stream
-	in >> hdrInfo(&header);
+	in >> hinfo;
 
 	//Create a new NifInfo if one isn't given.
 	bool delete_info = false;
@@ -391,7 +392,8 @@ vector<NiObjectRef> ReadNifList( istream & in, NifInfo * info ) {
 	}
 
 	// clear the header pointer in the stream.  Should be in try/catch block
-	in >> hdrInfo(NULL);
+	hdrInfo hinfo2(NULL);
+	in >> hinfo2;
 
 	//Return completed object list
 	return obj_list;
diff --git a/src/obj/NiBoneLODController.cpp b/src/obj/NiBoneLODController.cpp
index 8650bef17be0a1f06b1e4422eb3f9bb0d450d250..ec5f4bd61c9818d0d180971ea5ed74ca302aa44f 100644
--- a/src/obj/NiBoneLODController.cpp
+++ b/src/obj/NiBoneLODController.cpp
@@ -297,7 +297,7 @@ vector<Ref<NiNode> > NiBoneLODController::GetNodeGroup( int index ) const {
 void NiBoneLODController::AddNodeToGroup( int index, NiNode * node ) {
    while (index >= int(nodeGroups.size()))
       nodeGroups.insert(nodeGroups.end(), NodeGroup() );
-   numNodeGroups2 = nodeGroups.size();
+   numNodeGroups2 = int(nodeGroups.size());
 
    vector<NiNode*>& nodes = nodeGroups[index].nodes;
    vector<NiNode*>::iterator itr = std::find(nodes.begin(), nodes.end(), node);
@@ -319,7 +319,7 @@ void NiBoneLODController::RemoveNodeFromGroup( int index, NiNode * node ) {
 void NiBoneLODController::SetNodeGroup( int index, const vector<Ref<NiNode> >& group ) {
    while (index >= int(nodeGroups.size()))
       nodeGroups.insert(nodeGroups.end(), NodeGroup() );
-   numNodeGroups2 = nodeGroups.size();
+   numNodeGroups2 = int(nodeGroups.size());
    nodeGroups[index].nodes.assign(group.begin(), group.end());
 }
 
@@ -330,12 +330,12 @@ void NiBoneLODController::RemoveNodeGroup( int index ) {
    vector<NodeGroup>::iterator itr = nodeGroups.begin();
    std::advance(itr, index);
    nodeGroups.erase(itr);
-   numNodeGroups2 = nodeGroups.size();
+   numNodeGroups2 = int(nodeGroups.size());
 }
 
 void NiBoneLODController::ClearNodeGroups() {
    nodeGroups.clear();
-   numNodeGroups2 = nodeGroups.size();
+   numNodeGroups2 = int(nodeGroups.size());
 }
 
 
diff --git a/src/obj/NiSkinPartition.cpp b/src/obj/NiSkinPartition.cpp
index 44597b05b976141e1b82aca0606816fcd4bc347d..af1d7718783ac7382547545b39817db4cad52852 100644
--- a/src/obj/NiSkinPartition.cpp
+++ b/src/obj/NiSkinPartition.cpp
@@ -646,7 +646,7 @@ NiSkinPartition::NiSkinPartition(Ref<NiTriBasedGeom> shape) {
          boneIndex.push_back(i);
 
          // Adjust upper limit on number of weights per vertex if necessary.
-         int nWeights = vertexWeight.size();
+         int nWeights = int(vertexWeight.size());
          if (nWeights > nWeightsPerVertex)
             nWeightsPerVertex = nWeights;
       }
@@ -661,7 +661,7 @@ NiSkinPartition::NiSkinPartition(Ref<NiTriBasedGeom> shape) {
       BoneList& boneIndex = boneIndexList[i];
       vertexWeight.reserve(nWeightsPerVertex);
       boneIndex.reserve(nWeightsPerVertex);
-      for (int j = nWeightsPerVertex - vertexWeight.size(); j>0; --j) {
+      for (size_t j = nWeightsPerVertex - vertexWeight.size(); j>0; --j) {
          vertexWeight.push_back(0.0f);
          boneIndex.push_back(0);
       }
@@ -704,7 +704,7 @@ NiSkinPartition::NiSkinPartition(Ref<NiTriBasedGeom> shape) {
       SetCacheSize(CACHESIZE_GEFORCE3);
       // don't generate hundreds of strips
       SetStitchStrips(true);
-      GenerateStrips(data, triangles.size()*3, &groups, &numGroups);
+      GenerateStrips(data, int(triangles.size()*3), &groups, &numGroups);
 
       delete [] data;
 
@@ -795,9 +795,9 @@ NiSkinPartition::NiSkinPartition(Ref<NiTriBasedGeom> shape, int maxBonesPerParti
 
    // count min and max bones per vertex
    int minBones, maxBones;
-   minBones = maxBones = weights[0].size();
+   minBones = maxBones = int(weights[0].size());
    for(vector< BoneWeightList >::iterator itr = weights.begin(); itr != weights.end(); ++itr ){
-      int n = (*itr).size();
+      int n = int((*itr).size());
       minBones = min(n, minBones);
       maxBones = max(n, maxBones);
    }
@@ -898,9 +898,9 @@ NiSkinPartition::NiSkinPartition(Ref<NiTriBasedGeom> shape, int maxBonesPerParti
 
             // do a vertex match detect
             if ( doMatch ) {
-               for ( size_t a = 0; a < verts.size(); a++ ) {
+               for ( int a = 0; a < int(verts.size()); a++ ) {
                   match.insert(matchmap::value_type(a, a));
-                  for ( size_t b = a + 1; b < verts.size(); b++ ) {
+                  for ( int b = a + 1; b < int(verts.size()); b++ ) {
                      if ( verts[a] == verts[b] && weights[a] == weights[b] ) {
                         match.insert(matchmap::value_type(a, b));
                         match.insert(matchmap::value_type(b, a));
@@ -1038,14 +1038,14 @@ NiSkinPartition::NiSkinPartition(Ref<NiTriBasedGeom> shape, int maxBonesPerParti
          }
       }
       sort( vertices.begin(), vertices.end() );
-      part.numVertices = vertices.size();
+      part.numVertices = int(vertices.size());
       part.hasVertexMap = true;
 
       // map the vertices
 
       for ( int tri = 0; tri < int(triangles.size()); tri++ ) {
          for ( int t = 0; t < 3; t++ ) {
-            triangles[tri][t] = indexOf(vertices.begin(), vertices.end(), triangles[tri][t]);
+            triangles[tri][t] = (int)indexOf(vertices.begin(), vertices.end(), triangles[tri][t]);
          }
       }
 
@@ -1094,7 +1094,7 @@ NiSkinPartition::NiSkinPartition(Ref<NiTriBasedGeom> shape, int maxBonesPerParti
       for (size_t v = 0; v < vertices.size(); ++v) {
          BoneWeightList& bwl = weights[vertices[v]];
          for ( int b = 0; b < maxBones; b++ ) {
-            part.boneIndices[v][b] = (int(bwl.size()) > b) ? indexOf(bones.begin(), bones.end(), bwl[b].first) : 0 ;
+            part.boneIndices[v][b] = (int(bwl.size()) > b) ? (int)indexOf(bones.begin(), bones.end(), bwl[b].first) : 0 ;
             part.vertexWeights[v][b] = (int(bwl.size()) > b ? bwl[b].second : 0.0f);
          }
       }
diff --git a/src/obj/NiTriStripsData.cpp b/src/obj/NiTriStripsData.cpp
index 34d185fa08150f44ef93ba63f6468f4f87566228..5373186fcc4ac6d4acce5cdae9290e4bcaabdbeb 100644
--- a/src/obj/NiTriStripsData.cpp
+++ b/src/obj/NiTriStripsData.cpp
@@ -299,7 +299,7 @@ void NiTriStripsData::SetNvTriangles( const vector<Triangle> & in ) {
    SetCacheSize(CACHESIZE_GEFORCE3);
    // don't generate hundreds of strips
    SetStitchStrips(true);
-   GenerateStrips(data, in.size()*3, &groups, &numGroups);
+   GenerateStrips(data, int(in.size()*3), &groups, &numGroups);
 
    delete [] data;
 
@@ -351,14 +351,14 @@ void NiTriStripsData::SetTSTriangles( const vector<Triangle> & in ) {
    {
       if (groups[i].Type == TRIANGLE_STRIP)
       {			
-         strips.push_back(TriStrip(groups[i].Indices.size()));
+         strips.push_back( TriStrip( (unsigned short)(groups[i].Indices.size()) ) );
          TriStrip &strip = strips.back();
 
          for (j=0; j<groups[i].Indices.size(); j++)
             strip[j] = groups[i].Indices[j];
       } else
       {
-         int size = stris.size();
+         size_t size = stris.size();
          stris.resize(size + groups[i].Indices.size()/3);
          for (j=(size>0)?(size-1):0; j<stris.size(); j++)
          {
@@ -397,7 +397,7 @@ void NiTriStripsData::SetTSTriangles( const vector<Triangle> & in ) {
 
    if (strips.size() > 0)
    {
-      SetStripCount(strips.size());
+      SetStripCount( int(strips.size()) );
 
       int i = 0;
       TriStrips::const_iterator it;
diff --git a/src/obj/hkPackedNiTriStripsData.cpp b/src/obj/hkPackedNiTriStripsData.cpp
index bc9efb2cd3573b8f31f87afc489aff54e716111f..d7326d59766a052cd0561b0f637e25ba301d03ea 100644
--- a/src/obj/hkPackedNiTriStripsData.cpp
+++ b/src/obj/hkPackedNiTriStripsData.cpp
@@ -162,7 +162,7 @@ vector<Vector3> hkPackedNiTriStripsData::GetNormals() const {
 }
 
 int hkPackedNiTriStripsData::GetVertexCount() const {
-	return vertices.size();
+	return int(vertices.size());
 }
 
 vector<Vector3> hkPackedNiTriStripsData::GetVertices() const {