diff --git a/niflib.h b/niflib.h
index 142d69f92983312c6d89e9e1840d08cb9d31a26a..e5b25bbe3ecdac96938b2d0fb29837dfa629e9e3 100644
--- a/niflib.h
+++ b/niflib.h
@@ -50,6 +50,8 @@ POSSIBILITY OF SUCH DAMAGE. */
 #include "nif_math.h"
 #include "NIF_IO.h"
 #include "obj/NiObject.h"
+#include "obj/NiNode.h"
+#include "obj/NiAVObject.h"
 //#include "gen/obj_defines.h"
 #include "kfm.h"
 
@@ -192,7 +194,7 @@ NIFLIB_API void WriteFileGroup( string const & file_name, NiObjectRef const & ro
  * \param right The root block of the second Nif tree to merge.
  * \param version The version of the nif format to use during the clone operation on the right-hand tree.  The default is the highest version availiable.
  */
-NIFLIB_API void MergeNifTrees( NiObjectRef target, NiObjectRef right, unsigned int version = 0xFFFFFFFF );
+NIFLIB_API void MergeNifTrees( NiNodeRef target, NiAVObjectRef right, unsigned int version = 0xffffffff );
 
 
 //// Returns list of all blocks in the tree rooted by root block.
diff --git a/obj/NiObject.cpp b/obj/NiObject.cpp
index 5a0c4c0cddedef1bb4a1d841a0377e935ac548f9..521f22cadff307a5af01515d180df3e86e75eb16 100644
--- a/obj/NiObject.cpp
+++ b/obj/NiObject.cpp
@@ -62,3 +62,7 @@ string NiObject::GetIDString() {
 	out << this << "(" << this->GetType().GetTypeName() << ")";
 	return out.str();
 }
+
+NiObjectRef NiObject::Clone( unsigned int version ) {
+	throw runtime_error("Cloning not yet implemented.");
+};
diff --git a/pyniflib.i b/pyniflib.i
index 6e579aa3eda3e29f22ea4baff4e2a33f9e464993..7cc21b3b529e97728ed70e6af28f41232f38a6f3 100644
--- a/pyniflib.i
+++ b/pyniflib.i
@@ -67,12 +67,226 @@ POSSIBILITY OF SUCH DAMAGE. */
 #define NIFLIB_API
 #define NIFLIB_HIDDEN
 
+// we need this to get all the defines in there
 %include "gen/obj_defines.h"
-
 %{
-    #include "niflib.h"
+		#include "niflib.h"
+		#include "obj/NiObject.h"
+		#include "obj/AKeyedData.h"
+		#include "obj/AParticleModifier.h"
+		#include "obj/bhkRefObject.h"
+		#include "obj/bhkSerializable.h"
+		#include "obj/AbhkConstraint.h"
+		#include "obj/AbhkRagdollConstraint.h"
+		#include "obj/bhkShape.h"
+		#include "obj/AbhkShapeCollection.h"
+		#include "obj/bhkSphereRepShape.h"
+		#include "obj/bhkConvexShape.h"
+		#include "obj/bhkWorldObject.h"
+		#include "obj/bhkEntity.h"
+		#include "obj/NiCollisionObject.h"
+		#include "obj/NiExtraData.h"
+		#include "obj/NiInterpolator.h"
+		#include "obj/NiBlendInterpolator.h"
+		#include "obj/NiBSplineInterpolator.h"
+		#include "obj/NiObjectNET.h"
+		#include "obj/NiAVObject.h"
+		#include "obj/NiDynamicEffect.h"
+		#include "obj/NiLight.h"
+		#include "obj/NiProperty.h"
+		#include "obj/NiPSysModifier.h"
+		#include "obj/NiPSysEmitter.h"
+		#include "obj/NiPSysVolumeEmitter.h"
+		#include "obj/NiTimeController.h"
+		#include "obj/ABoneLODController.h"
+		#include "obj/NiSingleInterpolatorController.h"
+		#include "obj/APSysCtlr.h"
+		#include "obj/NiTriBasedGeom.h"
+		#include "obj/NiTriBasedGeomData.h"
+		#include "obj/APSysData.h"
+		#include "obj/bhkBlendCollisionObject.h"
+		#include "obj/bhkBlendController.h"
+		#include "obj/bhkBoxShape.h"
+		#include "obj/bhkCapsuleShape.h"
+		#include "obj/bhkCollisionObject.h"
+		#include "obj/bhkConvexVerticesShape.h"
+		#include "obj/bhkHingeConstraint.h"
+		#include "obj/bhkLimitedHingeConstraint.h"
+		#include "obj/bhkListShape.h"
+		#include "obj/bhkMalleableConstraint.h"
+		#include "obj/bhkMoppBvTreeShape.h"
+		#include "obj/bhkMultiSphereShape.h"
+		#include "obj/bhkNiTriStripsShape.h"
+		#include "obj/bhkPackedNiTriStripsShape.h"
+		#include "obj/bhkPrismaticConstraint.h"
+		#include "obj/bhkRagdollConstraint.h"
+		#include "obj/bhkRigidBody.h"
+		#include "obj/bhkRigidBodyT.h"
+		#include "obj/bhkSimpleShapePhantom.h"
+		#include "obj/bhkSPCollisionObject.h"
+		#include "obj/bhkSphereShape.h"
+		#include "obj/bhkStiffSpringConstraint.h"
+		#include "obj/bhkTransformShape.h"
+		#include "obj/bhkConvexTransformShape.h"
+		#include "obj/BSBound.h"
+		#include "obj/BSFurnitureMarker.h"
+		#include "obj/BSParentVelocityModifier.h"
+		#include "obj/BSPSysArrayEmitter.h"
+		#include "obj/BSXFlags.h"
+		#include "obj/hkPackedNiTriStripsData.h"
+		#include "obj/NiAlphaController.h"
+		#include "obj/NiAlphaProperty.h"
+		#include "obj/NiAmbientLight.h"
+		#include "obj/NiAutoNormalParticlesData.h"
+		#include "obj/NiBinaryExtraData.h"
+		#include "obj/NiBlendBoolInterpolator.h"
+		#include "obj/NiBlendFloatInterpolator.h"
+		#include "obj/NiBlendPoint3Interpolator.h"
+		#include "obj/NiBlendTransformInterpolator.h"
+		#include "obj/NiBoneLODController.h"
+		#include "obj/NiBoolData.h"
+		#include "obj/NiBooleanExtraData.h"
+		#include "obj/NiBoolInterpolator.h"
+		#include "obj/NiBoolTimelineInterpolator.h"
+		#include "obj/NiBSBoneLODController.h"
+		#include "obj/NiBSplineBasisData.h"
+		#include "obj/NiBSplineCompFloatInterpolator.h"
+		#include "obj/NiBSplineCompPoint3Interpolator.h"
+		#include "obj/NiBSplineCompTransformInterpolator.h"
+		#include "obj/NiBSplineData.h"
+		#include "obj/NiCamera.h"
+		#include "obj/NiCollisionData.h"
+		#include "obj/NiColorData.h"
+		#include "obj/NiColorExtraData.h"
+		#include "obj/NiControllerManager.h"
+		#include "obj/NiControllerSequence.h"
+		#include "obj/NiDefaultAVObjectPalette.h"
+		#include "obj/NiDirectionalLight.h"
+		#include "obj/NiDitherProperty.h"
+		#include "obj/NiFlipController.h"
+		#include "obj/NiFloatData.h"
+		#include "obj/NiFloatExtraData.h"
+		#include "obj/NiFloatExtraDataController.h"
+		#include "obj/NiFloatInterpolator.h"
+		#include "obj/NiFloatsExtraData.h"
+		#include "obj/NiFogProperty.h"
+		#include "obj/NiGeomMorpherController.h"
+		#include "obj/NiGravity.h"
+		#include "obj/NiIntegerExtraData.h"
+		#include "obj/NiIntegersExtraData.h"
+		#include "obj/NiKeyframeController.h"
+		#include "obj/BSKeyframeController.h"
+		#include "obj/NiKeyframeData.h"
+		#include "obj/NiLightColorController.h"
+		#include "obj/NiLightDimmerController.h"
+		#include "obj/NiLookAtController.h"
+		#include "obj/NiLookAtInterpolator.h"
+		#include "obj/NiMaterialColorController.h"
+		#include "obj/NiMaterialProperty.h"
+		#include "obj/NiMeshPSysData.h"
+		#include "obj/NiMorphData.h"
+		#include "obj/NiMultiTargetTransformController.h"
+		#include "obj/NiNode.h"
+		#include "obj/AvoidNode.h"
+		#include "obj/FxWidget.h"
+		#include "obj/FxButton.h"
+		#include "obj/FxRadioButton.h"
+		#include "obj/NiBillboardNode.h"
+		#include "obj/NiBSAnimationNode.h"
+		#include "obj/NiBSParticleNode.h"
+		#include "obj/NiLODNode.h"
+		#include "obj/NiPalette.h"
+		#include "obj/NiParticleBomb.h"
+		#include "obj/NiParticleColorModifier.h"
+		#include "obj/NiParticleGrowFade.h"
+		#include "obj/NiParticleMeshModifier.h"
+		#include "obj/NiParticleRotation.h"
+		#include "obj/NiParticles.h"
+		#include "obj/NiAutoNormalParticles.h"
+		#include "obj/NiParticleMeshes.h"
+		#include "obj/NiParticlesData.h"
+		#include "obj/NiParticleMeshesData.h"
+		#include "obj/NiParticleSystem.h"
+		#include "obj/NiMeshParticleSystem.h"
+		#include "obj/NiParticleSystemController.h"
+		#include "obj/NiBSPArrayController.h"
+		#include "obj/NiPathController.h"
+		#include "obj/NiPathInterpolator.h"
+		#include "obj/NiPixelData.h"
+		#include "obj/NiPlanarCollider.h"
+		#include "obj/NiPoint3Interpolator.h"
+		#include "obj/NiPointLight.h"
+		#include "obj/NiPosData.h"
+		#include "obj/NiPSysAgeDeathModifier.h"
+		#include "obj/NiPSysBombModifier.h"
+		#include "obj/NiPSysBoundUpdateModifier.h"
+		#include "obj/NiPSysBoxEmitter.h"
+		#include "obj/NiPSysColliderManager.h"
+		#include "obj/NiPSysColorModifier.h"
+		#include "obj/NiPSysCylinderEmitter.h"
+		#include "obj/NiPSysData.h"
+		#include "obj/NiPSysDragModifier.h"
+		#include "obj/NiPSysEmitterCtlr.h"
+		#include "obj/NiPSysEmitterCtlrData.h"
+		#include "obj/NiPSysEmitterDeclinationCtlr.h"
+		#include "obj/NiPSysEmitterDeclinationVarCtlr.h"
+		#include "obj/NiPSysEmitterInitialRadiusCtlr.h"
+		#include "obj/NiPSysEmitterLifeSpanCtlr.h"
+		#include "obj/NiPSysEmitterSpeedCtlr.h"
+		#include "obj/NiPSysGravityModifier.h"
+		#include "obj/NiPSysGravityStrengthCtlr.h"
+		#include "obj/NiPSysGrowFadeModifier.h"
+		#include "obj/NiPSysMeshEmitter.h"
+		#include "obj/NiPSysMeshUpdateModifier.h"
+		#include "obj/NiPSysModifierActiveCtlr.h"
+		#include "obj/NiPSysPlanarCollider.h"
+		#include "obj/NiPSysPositionModifier.h"
+		#include "obj/NiPSysResetOnLoopCtlr.h"
+		#include "obj/NiPSysRotationModifier.h"
+		#include "obj/NiPSysSpawnModifier.h"
+		#include "obj/NiPSysSphereEmitter.h"
+		#include "obj/NiPSysUpdateCtlr.h"
+		#include "obj/NiRangeLODData.h"
+		#include "obj/NiRotatingParticles.h"
+		#include "obj/NiRotatingParticlesData.h"
+		#include "obj/NiScreenLODData.h"
+		#include "obj/NiSequenceStreamHelper.h"
+		#include "obj/NiShadeProperty.h"
+		#include "obj/NiSkinData.h"
+		#include "obj/NiSkinInstance.h"
+		#include "obj/NiSkinPartition.h"
+		#include "obj/NiSourceTexture.h"
+		#include "obj/NiSpecularProperty.h"
+		#include "obj/NiSphericalCollider.h"
+		#include "obj/NiSpotLight.h"
+		#include "obj/NiStencilProperty.h"
+		#include "obj/NiStringExtraData.h"
+		#include "obj/NiStringPalette.h"
+		#include "obj/NiStringsExtraData.h"
+		#include "obj/NiTextKeyExtraData.h"
+		#include "obj/NiTextureEffect.h"
+		#include "obj/NiTextureTransformController.h"
+		#include "obj/NiTexturingProperty.h"
+		#include "obj/NiTransformController.h"
+		#include "obj/NiTransformData.h"
+		#include "obj/NiTransformInterpolator.h"
+		#include "obj/NiTriShape.h"
+		#include "obj/NiTriShapeData.h"
+		#include "obj/NiTriStrips.h"
+		#include "obj/NiTriStripsData.h"
+		#include "obj/NiUVController.h"
+		#include "obj/NiUVData.h"
+		#include "obj/NiVectorExtraData.h"
+		#include "obj/NiVertexColorProperty.h"
+		#include "obj/NiVertWeightsExtraData.h"
+		#include "obj/NiVisController.h"
+		#include "obj/NiVisData.h"
+		#include "obj/NiWireframeProperty.h"
+		#include "obj/NiZBufferProperty.h"
+		#include "obj/RootCollisionNode.h"
 %}
 
+
 // we need the definition of the template classes before we define the template Python names below
 template <class T> 
 struct Key {