diff --git a/gen/ByteArray.cpp b/gen/ByteArray.cpp
index 4c40b47725aa6f107ec3eddb5d073e92af0229f8..8b1dc522344099877bcf50f07420d014f7824c17 100644
--- a/gen/ByteArray.cpp
+++ b/gen/ByteArray.cpp
@@ -4,7 +4,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #include "ByteArray.h"
 
 //Constructor
-ByteArray::ByteArray() : dataSize((uint)0), unknownInt((uint)0) {};
+ByteArray::ByteArray() : dataSize((uint)0) {};
 
 //Destructor
 ByteArray::~ByteArray() {};
diff --git a/gen/ByteArray.h b/gen/ByteArray.h
index 535151c21bb52ef632fa1f32e1594c49e2101ef7..173ec6925a9302fc6e6b49fa9f596c74f2735dca 100644
--- a/gen/ByteArray.h
+++ b/gen/ByteArray.h
@@ -19,10 +19,6 @@ struct NIFLIB_API ByteArray {
 	 * The number of bytes in this array
 	 */
 	uint dataSize;
-	/*!
-	 * Unknown.
-	 */
-	uint unknownInt;
 	/*!
 	 * The bytes which make up the array
 	 */
diff --git a/gen/obj_defines.h b/gen/obj_defines.h
index 6340516b00ebc310ce2cf759fe75ef26fcc5d161..7572b1f36a3ba8e6fbd5467f8d4ba31eb6d70185 100644
--- a/gen/obj_defines.h
+++ b/gen/obj_defines.h
@@ -5475,6 +5475,9 @@ if ( version <= 0x0A010000 ) { \
 		link_stack.push_back( block_num ); \
 		NifStream( textKeys.unknownShort0, in, version ); \
 	}; \
+	if ( ( version >= 0x0A01006A ) && ( user_version == 10 ) ) { \
+		NifStream( textKeys.priority_, in, version ); \
+	}; \
 	if ( ( version >= 0x0A01006A ) && ( user_version == 11 ) ) { \
 		NifStream( textKeys.priority_, in, version ); \
 	}; \
@@ -5533,6 +5536,9 @@ for (uint i0 = 0; i0 < controlledBlocks.size(); i0++) { \
 		link_stack.push_back( block_num ); \
 		NifStream( controlledBlocks[i0].unknownShort0, in, version ); \
 	}; \
+	if ( ( version >= 0x0A01006A ) && ( user_version == 10 ) ) { \
+		NifStream( controlledBlocks[i0].priority_, in, version ); \
+	}; \
 	if ( ( version >= 0x0A01006A ) && ( user_version == 11 ) ) { \
 		NifStream( controlledBlocks[i0].priority_, in, version ); \
 	}; \
@@ -5625,6 +5631,9 @@ if ( version <= 0x0A010000 ) { \
 			NifStream( 0xffffffff, out, version ); \
 		NifStream( textKeys.unknownShort0, out, version ); \
 	}; \
+	if ( ( version >= 0x0A01006A ) && ( user_version == 10 ) ) { \
+		NifStream( textKeys.priority_, out, version ); \
+	}; \
 	if ( ( version >= 0x0A01006A ) && ( user_version == 11 ) ) { \
 		NifStream( textKeys.priority_, out, version ); \
 	}; \
@@ -5690,6 +5699,9 @@ for (uint i0 = 0; i0 < controlledBlocks.size(); i0++) { \
 			NifStream( 0xffffffff, out, version ); \
 		NifStream( controlledBlocks[i0].unknownShort0, out, version ); \
 	}; \
+	if ( ( version >= 0x0A01006A ) && ( user_version == 10 ) ) { \
+		NifStream( controlledBlocks[i0].priority_, out, version ); \
+	}; \
 	if ( ( version >= 0x0A01006A ) && ( user_version == 11 ) ) { \
 		NifStream( controlledBlocks[i0].priority_, out, version ); \
 	}; \
diff --git a/nif_math.cpp b/nif_math.cpp
index a348a7fd2acbf8a83b5436d8e03f6d21dda60ddc..877a9c82618b4e2491a91d381e0bdb35ed0f35af 100644
--- a/nif_math.cpp
+++ b/nif_math.cpp
@@ -291,6 +291,18 @@ Matrix44 & Matrix44::operator*=( float rh ) {
 	return *this;
 }
 
+Vector3 Matrix44::operator*( const Vector3 & rh ) const {
+	const Matrix44 & t = *this;
+	Vector3 v;
+	//Multiply, ignoring w
+	v.x = rh.x * t[0][0] + rh.y * t[1][0] + rh.z * t[2][0] + t[3][0];
+	v.y = rh.x * t[0][1] + rh.y * t[1][1] + rh.z * t[2][1] + t[3][1];
+	v.z = rh.x * t[0][2] + rh.y * t[1][2] + rh.z * t[2][2] + t[3][2];
+	//answer[3] = rh[0] * t(0,3) + rh[1] * t(1,3) + rh[2] * t(2,3) + t(3,3);
+
+	return v;
+}
+
 Matrix44 Matrix44::operator+( const Matrix44 & rh ) const {
 	return Matrix44(*this) += rh;
 } 
diff --git a/nif_math.h b/nif_math.h
index e60efeddb81481bfb41a64fd85475673c3c0b586..890ffced714b802fbe02049b283c2b0e5720e842 100644
--- a/nif_math.h
+++ b/nif_math.h
@@ -337,8 +337,6 @@ struct Matrix22 {
 		rows[1][0] = m21; rows[1][1] = m22;
 	}
 
-	NIFLIB_API Quaternion AsQuaternion();
-
 	//Python Operator Overloads
 	NIFLIB_API Float2 & __getitem__(int n) {
 		if (n > 1 || n < 0)
diff --git a/niflib.sln b/niflib.sln
index b44f9201876a1a2474bc5c0022496c2fc0f23163..903cdf85fdaff7faced3163c43226c4c76c9e0ea 100644
--- a/niflib.sln
+++ b/niflib.sln
@@ -26,6 +26,7 @@ Global
 		{7517F24D-B1A1-427C-B952-F5DD5DDAD7A7}.PyNiflib|Win32.Build.0 = PyNiflib|Win32
 		{7517F24D-B1A1-427C-B952-F5DD5DDAD7A7}.Release - DLL|Win32.ActiveCfg = Release - DLL|Win32
 		{7517F24D-B1A1-427C-B952-F5DD5DDAD7A7}.Release|Win32.ActiveCfg = Release|Win32
+		{7517F24D-B1A1-427C-B952-F5DD5DDAD7A7}.Release|Win32.Build.0 = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/pyniflib.i b/pyniflib.i
index abafeb4b8f84cc9d6a434180da15a4759ab41862..e6d77727340a08bc2e3c70403c3360ee67b5099e 100644
--- a/pyniflib.i
+++ b/pyniflib.i
@@ -71,221 +71,10 @@ POSSIBILITY OF SUCH DAMAGE. */
 %ignore DynamicCast( const NiObject * object );
 %ignore StaticCast (const NiObject * object);
 
-//Do not wrap base classes as their methods are accessed through Ref smart pointers
-%ignore NiObject;
-%ignore AKeyedData;
-%ignore AParticleModifier;
-%ignore bhkRefObject;
-%ignore bhkSerializable;
-%ignore AbhkConstraint;
-%ignore AbhkRagdollConstraint;
-%ignore bhkShape;
-%ignore AbhkShapeCollection;
-%ignore bhkSphereRepShape;
-%ignore bhkConvexShape;
-%ignore bhkWorldObject;
-%ignore bhkEntity;
-%ignore NiCollisionObject;
-%ignore NiExtraData;
-%ignore NiInterpolator;
-%ignore NiBlendInterpolator;
-%ignore NiBSplineInterpolator;
-%ignore NiObjectNET;
-%ignore NiAVObject;
-%ignore NiDynamicEffect;
-%ignore NiLight;
-%ignore NiProperty;
-%ignore NiPSysModifier;
-%ignore NiPSysEmitter;
-%ignore NiPSysVolumeEmitter;
-%ignore NiTimeController;
-%ignore ABoneLODController;
-%ignore NiSingleInterpolatorController;
-%ignore APSysCtlr;
-%ignore NiTriBasedGeom;
-%ignore NiTriBasedGeomData;
-%ignore APSysData;
-%ignore bhkBlendCollisionObject;
-%ignore bhkBlendController;
-%ignore bhkBoxShape;
-%ignore bhkCapsuleShape;
-%ignore bhkCollisionObject;
-%ignore bhkConvexVerticesShape;
-%ignore bhkHingeConstraint;
-%ignore bhkLimitedHingeConstraint;
-%ignore bhkListShape;
-%ignore bhkMalleableConstraint;
-%ignore bhkMoppBvTreeShape;
-%ignore bhkMultiSphereShape;
-%ignore bhkNiTriStripsShape;
-%ignore bhkPackedNiTriStripsShape;
-%ignore bhkPrismaticConstraint;
-%ignore bhkRagdollConstraint;
-%ignore bhkRigidBody;
-%ignore bhkRigidBodyT;
-%ignore bhkSimpleShapePhantom;
-%ignore bhkSPCollisionObject;
-%ignore bhkSphereShape;
-%ignore bhkStiffSpringConstraint;
-%ignore bhkTransformShape;
-%ignore bhkConvexTransformShape;
-%ignore BSBound;
-%ignore BSFurnitureMarker;
-%ignore BSParentVelocityModifier;
-%ignore BSPSysArrayEmitter;
-%ignore BSXFlags;
-%ignore hkPackedNiTriStripsData;
-%ignore NiAlphaController;
-%ignore NiAlphaProperty;
-%ignore NiAmbientLight;
-%ignore NiAutoNormalParticlesData;
-%ignore NiBinaryExtraData;
-%ignore NiBlendBoolInterpolator;
-%ignore NiBlendFloatInterpolator;
-%ignore NiBlendPoint3Interpolator;
-%ignore NiBlendTransformInterpolator;
-%ignore NiBoneLODController;
-%ignore NiBoolData;
-%ignore NiBooleanExtraData;
-%ignore NiBoolInterpolator;
-%ignore NiBoolTimelineInterpolator;
-%ignore NiBSBoneLODController;
-%ignore NiBSplineBasisData;
-%ignore NiBSplineCompFloatInterpolator;
-%ignore NiBSplineCompPoint3Interpolator;
-%ignore NiBSplineCompTransformInterpolator;
-%ignore NiBSplineData;
-%ignore NiCamera;
-%ignore NiCollisionData;
-%ignore NiColorData;
-%ignore NiColorExtraData;
-%ignore NiControllerManager;
-%ignore NiControllerSequence;
-%ignore NiDefaultAVObjectPalette;
-%ignore NiDirectionalLight;
-%ignore NiDitherProperty;
-%ignore NiFlipController;
-%ignore NiFloatData;
-%ignore NiFloatExtraData;
-%ignore NiFloatExtraDataController;
-%ignore NiFloatInterpolator;
-%ignore NiFloatsExtraData;
-%ignore NiFogProperty;
-%ignore NiGeomMorpherController;
-%ignore NiGravity;
-%ignore NiIntegerExtraData;
-%ignore NiIntegersExtraData;
-%ignore NiKeyframeController;
-%ignore BSKeyframeController;
-%ignore NiKeyframeData;
-%ignore NiLightColorController;
-%ignore NiLightDimmerController;
-%ignore NiLookAtController;
-%ignore NiLookAtInterpolator;
-%ignore NiMaterialColorController;
-%ignore NiMaterialProperty;
-%ignore NiMeshPSysData;
-%ignore NiMorphData;
-%ignore NiMultiTargetTransformController;
-%ignore NiNode;
-%ignore AvoidNode;
-%ignore FxWidget;
-%ignore FxButton;
-%ignore FxRadioButton;
-%ignore NiBillboardNode;
-%ignore NiBSAnimationNode;
-%ignore NiBSParticleNode;
-%ignore NiLODNode;
-%ignore NiPalette;
-%ignore NiParticleBomb;
-%ignore NiParticleColorModifier;
-%ignore NiParticleGrowFade;
-%ignore NiParticleMeshModifier;
-%ignore NiParticleRotation;
-%ignore NiParticles;
-%ignore NiAutoNormalParticles;
-%ignore NiParticleMeshes;
-%ignore NiParticlesData;
-%ignore NiParticleMeshesData;
-%ignore NiParticleSystem;
-%ignore NiMeshParticleSystem;
-%ignore NiParticleSystemController;
-%ignore NiBSPArrayController;
-%ignore NiPathController;
-%ignore NiPathInterpolator;
-%ignore NiPixelData;
-%ignore NiPlanarCollider;
-%ignore NiPoint3Interpolator;
-%ignore NiPointLight;
-%ignore NiPosData;
-%ignore NiPSysAgeDeathModifier;
-%ignore NiPSysBombModifier;
-%ignore NiPSysBoundUpdateModifier;
-%ignore NiPSysBoxEmitter;
-%ignore NiPSysColliderManager;
-%ignore NiPSysColorModifier;
-%ignore NiPSysCylinderEmitter;
-%ignore NiPSysData;
-%ignore NiPSysDragModifier;
-%ignore NiPSysEmitterCtlr;
-%ignore NiPSysEmitterCtlrData;
-%ignore NiPSysEmitterDeclinationCtlr;
-%ignore NiPSysEmitterDeclinationVarCtlr;
-%ignore NiPSysEmitterInitialRadiusCtlr;
-%ignore NiPSysEmitterLifeSpanCtlr;
-%ignore NiPSysEmitterSpeedCtlr;
-%ignore NiPSysGravityModifier;
-%ignore NiPSysGravityStrengthCtlr;
-%ignore NiPSysGrowFadeModifier;
-%ignore NiPSysMeshEmitter;
-%ignore NiPSysMeshUpdateModifier;
-%ignore NiPSysModifierActiveCtlr;
-%ignore NiPSysPlanarCollider;
-%ignore NiPSysPositionModifier;
-%ignore NiPSysResetOnLoopCtlr;
-%ignore NiPSysRotationModifier;
-%ignore NiPSysSpawnModifier;
-%ignore NiPSysSphereEmitter;
-%ignore NiPSysUpdateCtlr;
-%ignore NiRangeLODData;
-%ignore NiRotatingParticles;
-%ignore NiRotatingParticlesData;
-%ignore NiScreenLODData;
-%ignore NiSequenceStreamHelper;
-%ignore NiShadeProperty;
-%ignore NiSkinData;
-%ignore NiSkinInstance;
-%ignore NiSkinPartition;
-%ignore NiSourceTexture;
-%ignore NiSpecularProperty;
-%ignore NiSphericalCollider;
-%ignore NiSpotLight;
-%ignore NiStencilProperty;
-%ignore NiStringExtraData;
-%ignore NiStringPalette;
-%ignore NiStringsExtraData;
-%ignore NiTextKeyExtraData;
-%ignore NiTextureEffect;
-%ignore NiTextureTransformController;
-%ignore NiTexturingProperty;
-%ignore NiTransformController;
-%ignore NiTransformData;
-%ignore NiTransformInterpolator;
-%ignore NiTriShape;
-%ignore NiTriShapeData;
-%ignore NiTriStrips;
-%ignore NiTriStripsData;
-%ignore NiUVController;
-%ignore NiUVData;
-%ignore NiVectorExtraData;
-%ignore NiVertexColorProperty;
-%ignore NiVertWeightsExtraData;
-%ignore NiVisController;
-%ignore NiVisData;
-%ignore NiWireframeProperty;
-%ignore NiZBufferProperty;
-%ignore RootCollisionNode;
-
+//Do not use smart pointer support as it doubles the size of the library
+//and makes it take twice as long to be imported
+%ignore Ref::operator->;
+%ignore Ref::operator=;
 
 // we need this to get all the defines in there
 %include "gen/obj_defines.h"
@@ -507,6 +296,36 @@ POSSIBILITY OF SUCH DAMAGE. */
 		#include "obj/NiWireframeProperty.h"
 		#include "obj/NiZBufferProperty.h"
 		#include "obj/RootCollisionNode.h"
+		#include "gen/ByteArray.h"
+		#include "gen/Footer.h"
+		#include "gen/LODRange.h"
+		#include "gen/MatchGroup.h"
+		#include "gen/MipMap.h"
+		#include "gen/NodeGroup.h"
+		#include "gen/QuaternionXYZW.h"
+		#include "gen/ShortString.h"
+		#include "gen/SkinShape.h"
+		#include "gen/SkinShapeGroup.h"
+		#include "gen/SkinWeight.h"
+		#include "gen/AVObject.h"
+		#include "gen/ControllerLink.h"
+		#include "gen/Header.h"
+		#include "gen/StringPalette.h"
+		#include "gen/TBC.h"
+		#include "gen/KeyGroup.h"
+		#include "gen/RotationKeyArray.h"
+		#include "gen/TexDesc.h"
+		#include "gen/ShaderTexDesc.h"
+		#include "gen/TexSource.h"
+		#include "gen/SkinPartition.h"
+		#include "gen/BoundingBox.h"
+		#include "gen/FurniturePosition.h"
+		#include "gen/hkTriangle.h"
+		#include "gen/Morph.h"
+		#include "gen/Particle.h"
+		#include "gen/SkinData.h"
+		#include "gen/RagDollDescriptor.h"
+		#include "gen/LimitedHingeDescriptor.h"
 %}
 
 
@@ -548,8 +367,10 @@ struct Key {
 %template(pair_int_float) std::pair<int, float>;
 %template(map_int_float) std::map<int, float>;
 
-%include "Ref.h"
 %include "niflib.h"
+%include "Ref.h"
+%include "Type.h"
+%include "nif_math.h"
 %include "obj/NiObject.h"
 %template(NiObjectRef) Ref<NiObject>;
 %template(DynamicCastToNiObject) DynamicCast<NiObject>;
@@ -1402,5 +1223,35 @@ struct Key {
 %template(RootCollisionNodeRef) Ref<RootCollisionNode>;
 %template(DynamicCastToRootCollisionNode) DynamicCast<RootCollisionNode>;
 %template(StaticCastToRootCollisionNode) StaticCast<RootCollisionNode>;
+%include "gen/ByteArray.h"
+%include "gen/Footer.h"
+%include "gen/LODRange.h"
+%include "gen/MatchGroup.h"
+%include "gen/MipMap.h"
+%include "gen/NodeGroup.h"
+%include "gen/QuaternionXYZW.h"
+%include "gen/ShortString.h"
+%include "gen/SkinShape.h"
+%include "gen/SkinShapeGroup.h"
+%include "gen/SkinWeight.h"
+%include "gen/AVObject.h"
+%include "gen/ControllerLink.h"
+%include "gen/Header.h"
+%include "gen/StringPalette.h"
+%include "gen/TBC.h"
+%include "gen/KeyGroup.h"
+%include "gen/RotationKeyArray.h"
+%include "gen/TexDesc.h"
+%include "gen/ShaderTexDesc.h"
+%include "gen/TexSource.h"
+%include "gen/SkinPartition.h"
+%include "gen/BoundingBox.h"
+%include "gen/FurniturePosition.h"
+%include "gen/hkTriangle.h"
+%include "gen/Morph.h"
+%include "gen/Particle.h"
+%include "gen/SkinData.h"
+%include "gen/RagDollDescriptor.h"
+%include "gen/LimitedHingeDescriptor.h"
 
 %template(vector_NiAVObjectRef) std::vector<NiAVObjectRef>;