From 639803de4ff85808a4d72878f860b93e9d0adbea Mon Sep 17 00:00:00 2001
From: Shon Ferguson <shonferg@users.sourceforge.net>
Date: Fri, 13 Apr 2007 05:27:49 +0000
Subject: [PATCH] More documentation and minor fixes.

---
 include/obj/BSBound.h                         |  16 +-
 include/obj/BSFurnitureMarker.h               |   9 +
 include/obj/BSXFlags.h                        |   8 +-
 include/obj/NiAVObject.h                      |  16 +-
 include/obj/NiBSplineBasisData.h              |   8 +-
 .../obj/NiBSplineCompTransformInterpolator.h  | 159 ++++++++++++------
 include/obj/NiBSplineData.h                   |  22 ++-
 include/obj/NiBSplineInterpolator.h           |  36 +++-
 include/obj/NiBinaryExtraData.h               |   9 +
 include/obj/NiBlendBoolInterpolator.h         |   8 +-
 include/obj/NiBlendFloatInterpolator.h        |   8 +-
 include/obj/NiBlendPoint3Interpolator.h       |   8 +-
 include/obj/NiBoolInterpolator.h              |  18 +-
 include/obj/NiBoolTimelineInterpolator.h      |  22 ++-
 include/obj/NiBooleanExtraData.h              |   9 +
 include/obj/NiCollisionObject.h               |  19 ++-
 include/obj/NiColorExtraData.h                |   9 +
 include/obj/NiControllerSequence.h            |  93 ++++++----
 include/obj/NiDefaultAVObjectPalette.h        |   8 +-
 include/obj/NiExtraData.h                     |  38 +++--
 include/obj/NiFloatExtraData.h                |   9 +
 include/obj/NiFloatInterpolator.h             |  18 +-
 include/obj/NiFloatsExtraData.h               |   9 +
 include/obj/NiGeometryData.h                  |  51 +++---
 include/obj/NiIntegerExtraData.h              |   9 +
 include/obj/NiIntegersExtraData.h             |  10 +-
 include/obj/NiLookAtInterpolator.h            |  32 +++-
 include/obj/NiMorphData.h                     |  30 ++--
 include/obj/NiPathInterpolator.h              |  22 ++-
 include/obj/NiPoint3Interpolator.h            |  20 ++-
 include/obj/NiRangeLODData.h                  |   6 +-
 include/obj/NiScreenLODData.h                 |  12 +-
 include/obj/NiStringExtraData.h               |   9 +
 include/obj/NiStringsExtraData.h              |   9 +
 include/obj/NiTransformInterpolator.h         |  34 +++-
 include/obj/NiTriBasedGeomData.h              |  10 +-
 include/obj/NiTriShapeData.h                  |  17 +-
 include/obj/NiTriStripsData.h                 |  25 ++-
 include/obj/NiVectorExtraData.h               |   9 +
 include/obj/NiVertWeightsExtraData.h          |   9 +
 include/obj/bhkRigidBody.h                    | 158 +++++++++++++----
 src/obj/NiAVObject.cpp                        |  21 ++-
 src/obj/NiBSplineInterpolator.cpp             |   4 +-
 src/obj/NiBoolInterpolator.cpp                |   2 +-
 src/obj/NiBoolTimelineInterpolator.cpp        |  10 +-
 src/obj/NiCollisionObject.cpp                 |   2 +-
 src/obj/NiControllerSequence.cpp              |   6 +-
 src/obj/NiExtraData.cpp                       |   2 +-
 src/obj/NiFloatInterpolator.cpp               |   2 +-
 src/obj/NiGeometryData.cpp                    |  24 +++
 src/obj/NiPathInterpolator.cpp                |   4 +-
 src/obj/NiPoint3Interpolator.cpp              |   2 +-
 src/obj/NiTransformInterpolator.cpp           |   4 +-
 src/obj/NiTriBasedGeomData.cpp                |   4 +
 54 files changed, 849 insertions(+), 269 deletions(-)

diff --git a/include/obj/BSBound.h b/include/obj/BSBound.h
index 7db2acb2..145e0342 100644
--- a/include/obj/BSBound.h
+++ b/include/obj/BSBound.h
@@ -34,15 +34,27 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * Center of the bounding box.
+	 * Gets the center point of the bounding box.
+	 * \return The center point of the bounding box.
 	 */
 	NIFLIB_API Vector3 GetCenter() const;
+
+	/*!
+	 * Sets the center point of the bounding box.
+	 * \param[in] value The new center point of the bounding box.
+	 */
 	NIFLIB_API void SetCenter( const Vector3 & value );
 
 	/*!
-	 * Dimensions of the bounding box from center.
+	 * Gets the dimensions of the bounding box from center.  The three radii.
+	 * \return The radius of the bounding box along each axis.
 	 */
 	NIFLIB_API Vector3 GetDimensions() const;
+
+	/*!
+	 * Gets the dimensions of the bounding box from center.  The three radii.
+	 * \param[in] value The new radius of the bounding box along each axis.
+	 */
 	NIFLIB_API void SetDimensions( const Vector3 & value );
 
 protected:
diff --git a/include/obj/BSFurnitureMarker.h b/include/obj/BSFurnitureMarker.h
index f944626e..db58399e 100644
--- a/include/obj/BSFurnitureMarker.h
+++ b/include/obj/BSFurnitureMarker.h
@@ -36,7 +36,16 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
+	/*!
+	 * Retrieves the furniture marker positions.  These are markers that show where the character will end up if he/she sits or lies on this object.
+	 * \return The furniture marker positions.
+	 */
 	NIFLIB_API vector<FurniturePosition> GetFurniturePositions() const;
+
+	/*!
+	 * Sets the furniture marker positions.  These are markers that show where the character will end up if he/she sits or lies on this object.
+	 * \return The new furniture marker positions.
+	 */
 	NIFLIB_API void SetFurniturePositions( const vector<FurniturePosition> & n );
 
 protected:
diff --git a/include/obj/BSXFlags.h b/include/obj/BSXFlags.h
index 4027ffcd..e6943b8e 100644
--- a/include/obj/BSXFlags.h
+++ b/include/obj/BSXFlags.h
@@ -33,9 +33,15 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * The flags.
+	 * Gets the BSX Flag data.
+	 * \return The flag data.
 	 */
 	NIFLIB_API unsigned int GetFlags() const;
+
+	/*!
+	 * Sets the BSX Flag data.
+	 * \param[in] value The new flag data.
+	 */
 	NIFLIB_API void SetFlags( unsigned int value );
 
 protected:
diff --git a/include/obj/NiAVObject.h b/include/obj/NiAVObject.h
index 80f22515..1023b373 100644
--- a/include/obj/NiAVObject.h
+++ b/include/obj/NiAVObject.h
@@ -101,16 +101,16 @@ public:
 	 * In Oblivion this links the havok objects.
 	 */
 	NIFLIB_API Ref<NiCollisionObject > GetCollisionObject() const;
-	NIFLIB_API void SetCollisionObject( Ref<NiCollisionObject> value );
+	NIFLIB_API void SetCollisionObject( NiCollisionObject * value );
 
-   /*!
-   * Bounding box: refers to NiCollisionData
-   */
-   NIFLIB_API Ref<NiCollisionData > GetCollisionData() const;
-   NIFLIB_API void SetCollisionData( Ref<NiCollisionData> value );
+	/*!
+	 * Bounding box: refers to NiCollisionData
+	 */
+	NIFLIB_API Ref<NiCollisionData > GetCollisionData() const;
+	NIFLIB_API void SetCollisionData( NiCollisionData * value );
 
-   NIFLIB_API bool GetHidden();
-   NIFLIB_API void SetHidden(bool value);
+	NIFLIB_API bool GetHidden();
+	NIFLIB_API void SetHidden(bool value);
 
    typedef enum CollisionType
    {
diff --git a/include/obj/NiBSplineBasisData.h b/include/obj/NiBSplineBasisData.h
index c5b09baa..cb3148e7 100644
--- a/include/obj/NiBSplineBasisData.h
+++ b/include/obj/NiBSplineBasisData.h
@@ -33,9 +33,15 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * The number of control points (Usually number of frames for animation).
+	 * Retrives the current number of spline control points.  This is usually the number of frames for animation.
+	 * \return The number of spline control points.
 	 */
 	NIFLIB_API unsigned int GetNumControlPt() const;
+
+	/*!
+	 * Sets the number of spline control points.  This is usually the number of frames for animation.
+	 * \param[in] value The new number of spline control points.
+	 */
 	NIFLIB_API void SetNumControlPt( unsigned int value );
 
 protected:
diff --git a/include/obj/NiBSplineCompTransformInterpolator.h b/include/obj/NiBSplineCompTransformInterpolator.h
index 6349fd83..005cee72 100644
--- a/include/obj/NiBSplineCompTransformInterpolator.h
+++ b/include/obj/NiBSplineCompTransformInterpolator.h
@@ -35,99 +35,160 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * Base translation when translate curve not defined.
+	 * Gets the base translation when a translate curve is not defined.
+	 * \return The base translation.
 	 */
 	NIFLIB_API Vector3 GetTranslation() const;
+
+	/*!
+	 * Sets the base translation when a translate curve is not defined.
+	 * \param[in] value The new base translation.
+	 */
 	NIFLIB_API void SetTranslation( Vector3 value );
 
 	/*!
-	 * Base rotation when rotation curve not defined.
+	 * Gets the base rotation when a translate curve is not defined.
+	 * \return The base rotation.
 	 */
 	NIFLIB_API Quaternion GetRotation() const;
+
+	/*!
+	 * Sets the base rotation when a translate curve is not defined.
+	 * \param[in] value The new base rotation.
+	 */
 	NIFLIB_API void SetRotation( Quaternion value );
 
 	/*!
-	 * Base scale when scale curve not defined.
+	 * Gets the base scale when a translate curve is not defined.
+	 * \return The base scale.
 	 */
 	NIFLIB_API float GetScale() const;
+
+	/*!
+	 * Sets the base scale when a translate curve is not defined.
+	 * \param[in] value The new base scale.
+	 */
 	NIFLIB_API void SetScale( float value );
 
 	/*!
-	 * Translate Bias
+	 * Gets translate bias.
+	 * \return The translate bias.
 	 */
 	NIFLIB_API float GetTranslateBias() const;
+
+	/*!
+	 * Sets translate bias.
+	 * \param[in] value The new translate bias.
+	 */
 	NIFLIB_API void SetTranslateBias( float value );
 
 	/*!
-	 * Translate Multiplier
+	 * Gets translate multiplier.
+	 * \return The translate bias.
 	 */
 	NIFLIB_API float GetTranslateMultiplier() const;
+
+	/*!
+	 * Sets translate multiplier.
+	 * \param[in] value The new translate bias.
+	 */
 	NIFLIB_API void SetTranslateMultiplier( float value );
 
 	/*!
-	 * Rotation Bias
+	 * Gets rotation bias.
+	 * \return The rotation bias.
 	 */
 	NIFLIB_API float GetRotationBias() const;
+
+	/*!
+	 * Sets rotation bias.
+	 * \param[in] value The new rotation bias.
+	 */
 	NIFLIB_API void SetRotationBias( float value );
 
 	/*!
-	 * Rotation Multiplier
+	 * Gets rotation multiplier.
+	 * \return The translate bias.
 	 */
 	NIFLIB_API float GetRotationMultiplier() const;
+
+	/*!
+	 * Sets rotation multiplier.
+	 * \param[in] value The new translate bias.
+	 */
 	NIFLIB_API void SetRotationMultiplier( float value );
 
 	/*!
-	 * Scale Bias
+	 * Gets scale bias.
+	 * \return The scale bias.
 	 */
 	NIFLIB_API float GetScaleBias() const;
+
+	/*!
+	 * Sets scale bias.
+	 * \param[in] value The new scale bias.
+	 */
 	NIFLIB_API void SetScaleBias( float value );
 
 	/*!
-	 * Scale Multiplier
+	 * Gets scale multiplier.
+	 * \return The scale multiplier.
 	 */
 	NIFLIB_API float GetScaleMultiplier() const;
+
+	/*!
+	 * Sets scale multiplier.
+	 * \param[in] value The new scale multiplier.
+	 */
 	NIFLIB_API void SetScaleMultiplier( float value );
 
-   /*! Retrieves the control quaternion rotation data.
-   * \return A vector containing control Quaternion data which specify rotation over time.
-   */
-   NIFLIB_API vector< Quaternion > GetQuatRotateControlData() const;
-
-   /*! Retrieves the control translation data.
-   * \return A vector containing control Vector3 data which specify translation over time.
-   */
-   NIFLIB_API vector< Vector3 > GetTranslateControlData() const;
-
-   /*! Retrieves the scale key data.
-   * \return A vector containing control float data which specify scale over time.
-   */
-   NIFLIB_API vector< float > GetScaleControlData() const;
-
-   /*! Retrieves the sampled quaternion rotation key data between start and stop time.
-   * \param npoints The number of data points to sample between start and stop time.
-   * \param degree N-th order degree of polynomial used to fit the data.
-   * \return A vector containing Key<Quaternion> data which specify rotation over time.
-   */
-   NIFLIB_API vector< Key<Quaternion> > SampleQuatRotateKeys(int npoints, int degree) const;
-
-   /*! Retrieves the sampled scale key data between start and stop time.
-   * \param npoints The number of data points to sample between start and stop time.
-   * \param degree N-th order degree of polynomial used to fit the data.
-   * \return A vector containing Key<Vector3> data which specify translation over time.
-   */
-   NIFLIB_API vector< Key<Vector3> > SampleTranslateKeys(int npoints, int degree) const;
-
-   /*! Retrieves the sampled scale key data between start and stop time.
-   * \param npoints The number of data points to sample between start and stop time.
-   * \param degree N-th order degree of polynomial used to fit the data.
-   * \return A vector containing Key<float> data which specify scale over time.
-   */
-   NIFLIB_API vector< Key<float> > SampleScaleKeys(int npoints, int degree) const;
-
-   /*! Retrieves the number of control points used in the spline curve.
-   * \return The number of control points used in the spline curve.
-   */
-   NIFLIB_API int GetNumControlPt() const;
+	/*!
+	 * Retrieves the control quaternion rotation data.
+	 * \return A vector containing control Quaternion data which specify rotation over time.
+	 */
+	NIFLIB_API vector< Quaternion > GetQuatRotateControlData() const;
+
+	/*!
+	 * Retrieves the control translation data.
+	 * \return A vector containing control Vector3 data which specify translation over time.
+	 */
+	NIFLIB_API vector< Vector3 > GetTranslateControlData() const;
+
+	/*!
+	 * Retrieves the scale key data.
+	 * \return A vector containing control float data which specify scale over time.
+	 */
+	NIFLIB_API vector< float > GetScaleControlData() const;
+
+	/*!
+	 * Retrieves the sampled quaternion rotation key data between start and stop time.
+	 * \param npoints The number of data points to sample between start and stop time.
+	 * \param degree N-th order degree of polynomial used to fit the data.
+	 * \return A vector containing Key<Quaternion> data which specify rotation over time.
+	 */
+	NIFLIB_API vector< Key<Quaternion> > SampleQuatRotateKeys(int npoints, int degree) const;
+
+	/*!
+	 * Retrieves the sampled scale key data between start and stop time.
+	 * \param npoints The number of data points to sample between start and stop time.
+	 * \param degree N-th order degree of polynomial used to fit the data.
+	 * \return A vector containing Key<Vector3> data which specify translation over time.
+	 */
+	NIFLIB_API vector< Key<Vector3> > SampleTranslateKeys(int npoints, int degree) const;
+
+	/*!
+	 * Retrieves the sampled scale key data between start and stop time.
+	 * \param npoints The number of data points to sample between start and stop time.
+	 * \param degree N-th order degree of polynomial used to fit the data.
+	 * \return A vector containing Key<float> data which specify scale over time.
+	 */
+	NIFLIB_API vector< Key<float> > SampleScaleKeys(int npoints, int degree) const;
+
+	/*!
+	 * Retrieves the number of control points used in the spline curve.
+	 * \return The number of control points used in the spline curve.
+	 */
+	NIFLIB_API int GetNumControlPt() const;
 
 protected:
 	NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_MEMBERS
diff --git a/include/obj/NiBSplineData.h b/include/obj/NiBSplineData.h
index 53bf01fd..7e586561 100644
--- a/include/obj/NiBSplineData.h
+++ b/include/obj/NiBSplineData.h
@@ -32,15 +32,19 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
-   /*!
-   * Get Signed shorts representing the data scaled by SHRT_MAX.
-   */
-   NIFLIB_API vector<short > GetControlPoints() const;
-
-   /*!
-   * Get Range of signed shorts representing the data scaled by SHRT_MAX.
-   */
-   NIFLIB_API vector<short > GetControlPointRange(int offset, int count) const;
+	/*!
+	 * Get Signed shorts representing the spline data scaled by SHRT_MAX.
+	 * \return The spline data.
+	 */
+	NIFLIB_API vector<short> GetControlPoints() const;
+
+	/*!
+	 * Get Range of signed shorts representing the data scaled by SHRT_MAX.
+	 * \param[in] offset The start of the range.
+	 * \param[in] count The number of control points to get.
+	 * \return The control points that fall within the specified range.
+	 */
+	NIFLIB_API vector<short> GetControlPointRange(int offset, int count) const;
 
 protected:
 	NI_B_SPLINE_DATA_MEMBERS
diff --git a/include/obj/NiBSplineInterpolator.h b/include/obj/NiBSplineInterpolator.h
index ad574bfa..21ffaebd 100644
--- a/include/obj/NiBSplineInterpolator.h
+++ b/include/obj/NiBSplineInterpolator.h
@@ -37,28 +37,52 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * Animation start time.
+	 * Retrieves the animation start time.
+	 * \return The animation start time
 	 */
 	NIFLIB_API float GetStartTime() const;
+
+	/*!
+	 * Sets the animation start time.
+	 * \param[in] value The new animation start time
+	 */
 	NIFLIB_API void SetStartTime( float value );
 
 	/*!
-	 * Animation stop time.
+	 * Retrieves the animation stop time.
+	 * \return The animation stop time
 	 */
 	NIFLIB_API float GetStopTime() const;
+
+	/*!
+	 * Sets the animation stop time.
+	 * \param[in] value The new animation stop time
+	 */
 	NIFLIB_API void SetStopTime( float value );
 
 	/*!
-	 * Refers to NiBSplineData.
+	 * Gets the NiBSplineData used by this interpolator.
+	 * \return the NiBSplineData used by this interpolator.
 	 */
 	NIFLIB_API Ref<NiBSplineData > GetSplineData() const;
-	NIFLIB_API void SetSplineData( Ref<NiBSplineData > value );
 
 	/*!
-	 * Refers to NiBSPlineBasisData.
+	 * Sets the NiBSplineData used by this interpolator.
+	 * \param[in] value The NiBSplineData used by this interpolator.
+	 */
+	NIFLIB_API void SetSplineData( NiBSplineData * value );
+
+	/*!
+	 * Gets the NiBSplineBasisData used by this interpolator.
+	 * \return the NiBSplineBasisData used by this interpolator.
 	 */
 	NIFLIB_API Ref<NiBSplineBasisData > GetBasisData() const;
-	NIFLIB_API void SetBasisData( Ref<NiBSplineBasisData > value );
+
+	/*!
+	 * Sets the SetBasisData used by this interpolator.
+	 * \param[in] value The SetBasisData used by this interpolator.
+	 */
+	NIFLIB_API void SetBasisData( NiBSplineBasisData * value );
 
 protected:
 
diff --git a/include/obj/NiBinaryExtraData.h b/include/obj/NiBinaryExtraData.h
index e02e8639..bdfae4a3 100644
--- a/include/obj/NiBinaryExtraData.h
+++ b/include/obj/NiBinaryExtraData.h
@@ -35,7 +35,16 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
+	/*!
+	 * Retrieves the binary data stored in this object.
+	 * \return The binary data stored in this object.
+	 */
 	NIFLIB_API vector<byte> GetData() const;
+
+	/*!
+	 * Sets the binary data stored in this object.  Removes any previous data.
+	 * \param[in] n The new binary data to store in this object.
+	 */
 	NIFLIB_API void SetData( const vector<byte> & n );
 
 protected:
diff --git a/include/obj/NiBlendBoolInterpolator.h b/include/obj/NiBlendBoolInterpolator.h
index a8dc3867..2a42abb6 100644
--- a/include/obj/NiBlendBoolInterpolator.h
+++ b/include/obj/NiBlendBoolInterpolator.h
@@ -34,9 +34,15 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * The interpolated bool?
+	 * Gets the boolean value stored in this object.  Perhaps this is the current interpolated value.
+	 * \return The boolean value stored in this object.
 	 */
 	NIFLIB_API byte GetBoolValue() const;
+
+	/*!
+	 * Sets the boolean value stored in this object.  Perhaps this is the current interpolated value.
+	 * \param[in] value The new boolean value to store in this object.
+	 */
 	NIFLIB_API void SetBoolValue( byte value );
 
 protected:
diff --git a/include/obj/NiBlendFloatInterpolator.h b/include/obj/NiBlendFloatInterpolator.h
index f87ef461..b66e2759 100644
--- a/include/obj/NiBlendFloatInterpolator.h
+++ b/include/obj/NiBlendFloatInterpolator.h
@@ -34,9 +34,15 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * The interpolated float?
+	 * Gets the floating point value stored in this object.  Perhaps this is the current interpolated value.
+	 * \return The floating point value stored in this object.
 	 */
 	NIFLIB_API float GetFloatValue() const;
+
+	/*!
+	 * Sets the floating point value stored in this object.  Perhaps this is the current interpolated value.
+	 * \param[in] value The new floating point value to store in this object.
+	 */
 	NIFLIB_API void SetFloatValue( float value );
 
 protected:
diff --git a/include/obj/NiBlendPoint3Interpolator.h b/include/obj/NiBlendPoint3Interpolator.h
index a1aabef6..b26ae902 100644
--- a/include/obj/NiBlendPoint3Interpolator.h
+++ b/include/obj/NiBlendPoint3Interpolator.h
@@ -34,9 +34,15 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * The interpolated point?
+	 * Gets the 3D point value stored in this object.  Perhaps this is the current interpolated value.
+	 * \return The 3D point value stored in this object.
 	 */
 	NIFLIB_API Vector3 GetPointValue() const;
+
+	/*!
+	 * Sets the 3D point value stored in this object.  Perhaps this is the current interpolated value.
+	 * \param[in] value The new 3D point value to store in this object.
+	 */
 	NIFLIB_API void SetPointValue( Vector3 value );
 
 protected:
diff --git a/include/obj/NiBoolInterpolator.h b/include/obj/NiBoolInterpolator.h
index d0251a5e..750c4b0c 100644
--- a/include/obj/NiBoolInterpolator.h
+++ b/include/obj/NiBoolInterpolator.h
@@ -39,16 +39,28 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * Value when posed?  At time 0?
+	 * Gets the boolean value stored in this object.  Perhaps this is the current interpolated value, the value when posed, or at time index 0.
+	 * \return The boolean value stored in this object.
 	 */
 	NIFLIB_API bool GetBoolValue() const;
+
+	/*!
+	 * Sets the boolean value stored in this object.  Perhaps this is the current interpolated value, the value when posed, or at time index 0.
+	 * \param[in] value The new boolean value to store in this object.
+	 */
 	NIFLIB_API void SetBoolValue( bool value );
 
 	/*!
-	 * Refers to a NiBoolData block.
+	 * Gets the NiBoolData object that this interpolator links to, if any.
+	 * \return The NiBoolData object that this interpolator links to, or NULL if one is not linked.
 	 */
 	NIFLIB_API Ref<NiBoolData > GetData() const;
-	NIFLIB_API void SetData( Ref<NiBoolData > value );
+
+	/*!
+	 * Sets the NiBoolData object that this interpolator links to, if any.
+	 * \return The NiBoolData object that this interpolator should now link to, or NULL to clear the current one.
+	 */
+	NIFLIB_API void SetData( NiBoolData * value );
 
 protected:
 	NI_BOOL_INTERPOLATOR_MEMBERS
diff --git a/include/obj/NiBoolTimelineInterpolator.h b/include/obj/NiBoolTimelineInterpolator.h
index 86c372b7..a2522bd7 100644
--- a/include/obj/NiBoolTimelineInterpolator.h
+++ b/include/obj/NiBoolTimelineInterpolator.h
@@ -39,16 +39,28 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * The interpolated bool?
+	 * Gets the boolean value stored in this object.  Perhaps this is the current interpolated value, the value when posed, or at time index 0.
+	 * \return The boolean value stored in this object.
 	 */
-	NIFLIB_API byte GetBoolValue() const;
-	NIFLIB_API void SetBoolValue( byte value );
+	NIFLIB_API bool GetBoolValue() const;
 
 	/*!
-	 * The bool data.
+	 * Sets the boolean value stored in this object.  Perhaps this is the current interpolated value, the value when posed, or at time index 0.
+	 * \param[in] value The new boolean value to store in this object.
+	 */
+	NIFLIB_API void SetBoolValue( bool value );
+
+	/*!
+	 * Gets the NiBoolData object that this interpolator links to, if any.
+	 * \return The NiBoolData object that this interpolator links to, or NULL if one is not linked.
 	 */
 	NIFLIB_API Ref<NiBoolData > GetData() const;
-	NIFLIB_API void SetData( Ref<NiBoolData > value );
+
+	/*!
+	 * Sets the NiBoolData object that this interpolator links to, if any.
+	 * \return The NiBoolData object that this interpolator should now link to, or NULL to clear the current one.
+	 */
+	NIFLIB_API void SetData( NiBoolData * value );
 
 protected:
 	NI_BOOL_TIMELINE_INTERPOLATOR_MEMBERS
diff --git a/include/obj/NiBooleanExtraData.h b/include/obj/NiBooleanExtraData.h
index 8a5b31ae..8faae78b 100644
--- a/include/obj/NiBooleanExtraData.h
+++ b/include/obj/NiBooleanExtraData.h
@@ -33,7 +33,16 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
+	/*!
+	 * Retrieves the boolean value stored in this object.
+	 * \return The boolean value stored in this object.
+	 */
 	NIFLIB_API bool GetData() const;
+
+	/*!
+	 * Sets the boolean value stored in this object.
+	 * \param[in] n The new boolean value to store in this object.
+	 */
 	NIFLIB_API void SetData( bool n );
 
 protected:
diff --git a/include/obj/NiCollisionObject.h b/include/obj/NiCollisionObject.h
index 07fefab4..9bd56d6a 100644
--- a/include/obj/NiCollisionObject.h
+++ b/include/obj/NiCollisionObject.h
@@ -40,16 +40,25 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * Links to the node parent.
+	 * Returns the NiNode that this collision object is connected to, if any.
+	 * \return The NiNode that this collision object is connected to, or NULL if it is not connected to any nodes.
 	 */
 	NIFLIB_API Ref<NiAVObject> GetParent() const;
-	NIFLIB_API void SetParent( NiAVObject * value );
 
 	/*!
-	 * Links to the collision object data
+	 * Gets the rigid body that this collision object uses, if any.
+	 * \return The rigid body that this object references, or a NULL reference if it does not reference any.
 	 */
-	NIFLIB_API Ref<NiObject > GetBody() const;
-	NIFLIB_API void SetBody( Ref<NiObject > value );
+	NIFLIB_API Ref<NiObject> GetBody() const;
+
+	/*!
+	 * Sets the new rigid body that this collision object uses.
+	 * \param[in] value The new rigid body for this collision object to use, or NULL to clear the current reference.
+	 */
+	NIFLIB_API void SetBody( NiObject * value );
+
+	/*! NIFLIB_HIDDEN function.  For internal use only */
+	NIFLIB_HIDDEN void SetParent( NiAVObject * value );
 
 protected:
 	NI_COLLISION_OBJECT_MEMBERS
diff --git a/include/obj/NiColorExtraData.h b/include/obj/NiColorExtraData.h
index 6929ac90..6806dc73 100644
--- a/include/obj/NiColorExtraData.h
+++ b/include/obj/NiColorExtraData.h
@@ -33,7 +33,16 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
+	/*!
+	 * Retrieves the RGBA color value stored in this object.
+	 * \return The RGBA color value stored in this object.
+	 */
 	NIFLIB_API Color4 GetData() const;
+
+	/*!
+	 * Sets the RGBA color value stored in this object.
+	 * \param[in] n The new RGBA color value to store in this object.
+	 */
 	NIFLIB_API void SetData( const Color4 & n );
 
 protected:
diff --git a/include/obj/NiControllerSequence.h b/include/obj/NiControllerSequence.h
index ac62a068..ec7702f9 100644
--- a/include/obj/NiControllerSequence.h
+++ b/include/obj/NiControllerSequence.h
@@ -43,45 +43,64 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * Name of this NiControllerSequence object. This is also the name of the action
+	 * Returns the name of this NiControllerSequence object. This is also the name of the action
 	 * associated with this file. For instance, if the original NIF file is called
 	 * "demon.nif" and this animation file contains an attack sequence, then
 	 * the file would be called "demon_attack1.kf" and this field would
 	 * contain the string "attack1".
+	 * \return The name of this NiControllerSequence object.
 	 */
 	NIFLIB_API string GetName() const;
+
+	/*!
+	 * Sets the name of this NiControllerSequence object. This is also the name of the action
+	 * associated with this file. For instance, if the original NIF file is called
+	 * "demon.nif" and this animation file contains an attack sequence, then
+	 * the file would be called "demon_attack1.kf" and this field would
+	 * contain the string "attack1".
+	 * \param[in] value The new name for this NiControllerSequence object.
+	 */
 	NIFLIB_API void SetName( const string & value );
 
-	/*! Sets the name and block reference to the NiTextKeyExtraData block which will be used by this controller sequence to specify the keyframe labels or "notes."
+	/*!
+	 * Sets the name and block reference to the NiTextKeyExtraData block which will be used by this controller sequence to specify the keyframe labels or "notes."
 	 * \param[in] txt_key A reference to the NiTextKeyExtraData object to use.
 	 * \sa NiTextKeyExtraData
 	 */
-	NIFLIB_API void SetTextKey( const Ref<NiTextKeyExtraData> & txt_key );
+	NIFLIB_API void SetTextKey( NiTextKeyExtraData * txt_key );
 
-	/*! Attatches a controler to this KF file for a KF file of version 10.2.0.0 or below.  Versions above this use interpolators.
+	/*! 
+	 * Attatches a controler to this KF file for a KF file of version 10.2.0.0 or below.  Versions above this use interpolators.
 	 * \param[in] obj A reference to the new NiTimeController to attach.
 	 * \sa NiControllerSequence::ClearChildren, NiControllersequence::AddInterpolator
 	 */
-	NIFLIB_API void AddController( const Ref<NiTimeController> & obj );
+	NIFLIB_API void AddController( NiTimeController * obj );
 
-	/*! Attatches an interpolator to this KF file for a KF file of version greater than 10.2.0.0.  Versions below this use controllers.
+	/*!
+	 * Attatches an interpolator to this KF file for a KF file of version greater than 10.2.0.0.  Versions below this use controllers.
 	 * \param[in] obj A reference to the new controller which has an interpolator to attach.
 	 * \param[in] priority Used only in Oblivion to set the priority of one controller over another when the two are merged.
 	 * \sa NiControllerSequence::ClearChildren, NiControllerSequence::AddController
 	 */
-	NIFLIB_API void AddInterpolator( const Ref<NiSingleInterpolatorController> & obj, byte priority = 0 );
+	NIFLIB_API void AddInterpolator( NiSingleInterpolatorController * obj, byte priority = 0 );
 
-	/*! Removes all controllers and interpolators from this Kf file root object.
+	/*! 
+	 * Removes all controllers and interpolators from this Kf file root object.
 	 * \sa NiControllerSequence::AddController, NiControllersequence::AddInterpolator
 	 */
 	NIFLIB_API void ClearControllerData();
 
-	/*! Retrieves the data for the controllers or interpolators which are attached to this controller sequence.
+	/*!
+	 * Retrieves the data for the controllers or interpolators which are attached to this controller sequence.
 	 * \return A vector containing the data for all controllers.
 	 * \sa NiControllerSequence::AddController, NiControllersequence::AddInterpolator, ClearKfChildren
 	 */
 	NIFLIB_API vector<ControllerLink> GetControllerData() const;
 
+	/*!
+	 * Retrieves the text keys, which are tags associated with keyframe times that mark the start and stop of each sequence, among other things such as the triggering of sound effects.
+	 * \return The text key data.
+	 */
 	NIFLIB_API Ref<NiTextKeyExtraData> GetTextKeyExtraData() const;
 
 	/*!
@@ -113,33 +132,47 @@ public:
 	 * \return The conroller sequence stop time.
 	 */
 	NIFLIB_API float GetStopTime() const;
+
+	/*!
+	 * Sets the controller sequence stop time.
+	 * \param[in] value The conroller sequence stop time.
+	 */
 	NIFLIB_API void SetStopTime( float value );
 
+	/*!
+	 * Gets the controller cyle behavior. Can be loop, reverse, or clamp.
+	 * \return The animation cycle behavior.
+	 */
 	NIFLIB_API CycleType GetCycleType() const;
+
+	/*!
+	 * Sets the controller cyle behavior. Can be loop, reverse, or clamp.
+	 * \param[in] n The new animation cycle behavior.
+	 */
 	NIFLIB_API void SetCycleType( CycleType n );
 
-   /*! 
-    * Gets the  number of controllers.
-	* \return Number of total controllers in this sequence
-	* \sa GetControllerData
-	*/
-   NIFLIB_API int GetNumControllers() const;
+	/*! 
+	 * Gets the  number of controllers.
+	 * \return Number of total controllers in this sequence
+	 * \sa GetControllerData
+	 */
+	NIFLIB_API int GetNumControllers() const;
 
-   /*! 
-    * Gets controller priority.  Oblivion Specific.
-	* \return Priority of a specific controller.
-	* \param[in] controller The index of the controller to get the priority for.
-	* \sa GetControllerData, GetNumControllers, SetControllerPriority
-	*/
-   NIFLIB_API int GetControllerPriority( int controller ) const;
+	/*! 
+	 * Gets controller priority.  Oblivion Specific.
+	 * \return Priority of a specific controller.
+	 * \param[in] controller The index of the controller to get the priority for.
+	 * \sa GetControllerData, GetNumControllers, SetControllerPriority
+	 */
+	NIFLIB_API int GetControllerPriority( int controller ) const;
 
-   /*! 
-    * Sets controller priority.  Oblivion Specific.
-    * \param[in] controller The index of the controller to set the priority for.
-	* \param[in] priority The amount of priority the controller should have.
-    * \sa GetControllerData, GetNumControllers, GetControllerPriority
-    */
-   NIFLIB_API void SetControllerPriority( int controller, int priority );
+	/*! 
+	 * Sets controller priority.  Oblivion Specific.
+	 * \param[in] controller The index of the controller to set the priority for.
+	 * \param[in] priority The amount of priority the controller should have.
+	 * \sa GetControllerData, GetNumControllers, GetControllerPriority
+	 */
+	NIFLIB_API void SetControllerPriority( int controller, int priority );
 
 
 	/*!
@@ -169,7 +202,7 @@ public:
 protected:
    friend class NiControllerManager;
    NiControllerManager * GetParent() const;
-   void SetParent(NiControllerManager *parent);
+   void SetParent( NiControllerManager * parent );
 
 	NI_CONTROLLER_SEQUENCE_MEMBERS
 private:
diff --git a/include/obj/NiDefaultAVObjectPalette.h b/include/obj/NiDefaultAVObjectPalette.h
index ee73b713..559a4668 100644
--- a/include/obj/NiDefaultAVObjectPalette.h
+++ b/include/obj/NiDefaultAVObjectPalette.h
@@ -38,9 +38,15 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * The objects.
+	 * Gets the AV Objects stored in this palette.
+	 * \return The AV Objects stored in this palette.
 	 */
 	NIFLIB_API vector<Ref<NiAVObject> > GetObjs() const;
+
+	/*!
+	 * Sets the AV Objects stored in this palette.
+	 * \return The new AV Objects to be stored in this palette.
+	 */
 	NIFLIB_API void SetObjs( const vector<Ref<NiAVObject> >& value );
 
 protected:
diff --git a/include/obj/NiExtraData.h b/include/obj/NiExtraData.h
index 47253b2c..4a328977 100644
--- a/include/obj/NiExtraData.h
+++ b/include/obj/NiExtraData.h
@@ -35,28 +35,16 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
-	/*! Returns a reference to the next extra data used in early version NIF
-	 * files which store extra data in a linked list.  This function should
-	 * only be called by NiObjectNET as it is not always meaningful.
-	 * \return A reference to the next extra data in early version NIF files.  May not always be meaningful.
-	 */
-	NIFLIB_HIDDEN NiExtraDataRef GetNextExtraData() const;
-
-	/*! Sets the next extra data in early version NIF files which store extra
-	 * data in a linked list.  This function should only be called by
-	 * NiObjectNET.
-	 * \param obj A reference to the object to set as the one after this in the chain.
-	 */
-	NIFLIB_HIDDEN void SetNextExtraData( const NiExtraDataRef & obj );
-
-	/*! Retrieve the name of this NiExtraData object.  Names are only stored
+	/*!
+	 * Retrieve the name of this NiExtraData object.  Names are only stored
 	 * in later version NIF files so this may not be necessary depending on
 	 * the target version.
 	 * \return The name of this NiExtraData object.
 	 */
 	NIFLIB_API string GetName();
 
-	/*! Sets the name of this NiExtraData object.  Will only be written to later
+	/*!
+	 * Sets the name of this NiExtraData object.  Will only be written to later
 	 * version NIF files.
 	 * \param new_name The new name for this NiExtraData object.
 	 */
@@ -68,6 +56,24 @@ public:
 	 */
 	NIFLIB_API virtual string GetIDString() const;
 
+	/*! 
+	 * NIFLIB HIDDEN function.  For internal use only.
+	 * Returns a reference to the next extra data used in early version NIF
+	 * files which store extra data in a linked list.  This function should
+	 * only be called by NiObjectNET as it is not always meaningful.
+	 * \return A reference to the next extra data in early version NIF files.  May not always be meaningful.
+	 */
+	NIFLIB_HIDDEN NiExtraDataRef GetNextExtraData() const;
+
+	/*!
+	 * NIFLIB HIDDEN function.  For internal use only.
+	 * Sets the next extra data in early version NIF files which store extra
+	 * data in a linked list.  This function should only be called by
+	 * NiObjectNET.
+	 * \param obj A reference to the object to set as the one after this in the chain.
+	 */
+	NIFLIB_HIDDEN void SetNextExtraData( NiExtraData * obj );
+
 protected:
 	NI_EXTRA_DATA_MEMBERS
 private:
diff --git a/include/obj/NiFloatExtraData.h b/include/obj/NiFloatExtraData.h
index 3b53c8a2..024ac43e 100644
--- a/include/obj/NiFloatExtraData.h
+++ b/include/obj/NiFloatExtraData.h
@@ -33,7 +33,16 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
+	/*!
+	 * Retrieves the floating point value stored in this object.
+	 * \return The floating point value stored in this object.
+	 */
 	NIFLIB_API float GetData() const;
+
+	/*!
+	 * Sets the floating point value stored in this object.
+	 * \param[in] n The new floating point value to store in this object.
+	 */
 	NIFLIB_API void SetData( float n );
 
 protected:
diff --git a/include/obj/NiFloatInterpolator.h b/include/obj/NiFloatInterpolator.h
index a6a3ba20..6c3c23f0 100644
--- a/include/obj/NiFloatInterpolator.h
+++ b/include/obj/NiFloatInterpolator.h
@@ -39,16 +39,28 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * Value when posed?  At time 0?
+	 * Gets the floating point value stored in this object.  Perhaps this is the current interpolated value, the value when posed, or at time index 0.
+	 * \return The floating point value stored in this object.
 	 */
 	NIFLIB_API float GetFloatValue() const;
+
+	/*!
+	 * Sets the floating point value stored in this object.  Perhaps this is the current interpolated value, the value when posed, or at time index 0.
+	 * \param[in] value The new floating point value to store in this object.
+	 */
 	NIFLIB_API void SetFloatValue( float value );
 
 	/*!
-	 * Float data?
+	 * Gets the NiFloatData object that this interpolator links to, if any.
+	 * \return The NiFloatData object that this interpolator links to, or NULL if one is not linked.
 	 */
 	NIFLIB_API Ref<NiFloatData > GetData() const;
-	NIFLIB_API void SetData( Ref<NiFloatData > value );
+
+	/*!
+	 * Sets the NiFloatData object that this interpolator links to, if any.
+	 * \return The NiFloatData object that this interpolator should now link to, or NULL to clear the current one.
+	 */
+	NIFLIB_API void SetData( NiFloatData * value );
 
 protected:
 	NI_FLOAT_INTERPOLATOR_MEMBERS
diff --git a/include/obj/NiFloatsExtraData.h b/include/obj/NiFloatsExtraData.h
index 8ddb4db7..952a89cf 100644
--- a/include/obj/NiFloatsExtraData.h
+++ b/include/obj/NiFloatsExtraData.h
@@ -33,7 +33,16 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
+	/*!
+	 * Retrieves the floating point values stored in this object.
+	 * \return The floating point values stored in this object.
+	 */
 	NIFLIB_API vector<float> GetData() const;
+
+	/*!
+	 * Sets the floating point values stored in this object.
+	 * \param[in] n The new floating point values to store in this object.
+	 */
 	NIFLIB_API void SetData( const vector<float> & n );
 
 protected:
diff --git a/include/obj/NiGeometryData.h b/include/obj/NiGeometryData.h
index 89aa7775..38ffdbb7 100644
--- a/include/obj/NiGeometryData.h
+++ b/include/obj/NiGeometryData.h
@@ -44,19 +44,22 @@ public:
 
 	//--Counts--//
 
-	/*! Returns the number of verticies that make up this mesh.  This is also the number of normals, colors, and UV coordinates if these are used.
+	/*! 
+	 * Returns the number of verticies that make up this mesh.  This is also the number of normals, colors, and UV coordinates if these are used.
 	 * \return The number of vertices that make up this mesh.
 	 * \sa IShapeData::SetVertexCount
 	 */
-	NIFLIB_API int GetVertexCount() const { return int(vertices.size()); }
+	NIFLIB_API int GetVertexCount() const;
 
-	/*! Returns the number of texture coordinate sets used by this mesh.  For each UV set, there is a pair of texture coordinates for every vertex in the mesh.  Each set corresponds to a texture entry in the NiTexturingPropery block.
+	/*! 
+	 * Returns the number of texture coordinate sets used by this mesh.  For each UV set, there is a pair of texture coordinates for every vertex in the mesh.  Each set corresponds to a texture entry in the NiTexturingPropery block.
 	 * \return The number of texture cooridnate sets used by this mesh.  Can be zero.
 	 * \sa IShapeData::SetUVSetCount, ITexturingProperty
 	 */
-	NIFLIB_API short GetUVSetCount() const { return short(uvSets.size()); }
+	NIFLIB_API short GetUVSetCount() const;
 
-	/*! Changes the number of UV sets used by this mesh.  If the new size is smaller, data at the end of the array will be lost.  Otherwise it will be retained.  The number of UV sets must correspond with the number of textures defined in the corresponding NiTexturingProperty block.
+	/*! 
+	 * Changes the number of UV sets used by this mesh.  If the new size is smaller, data at the end of the array will be lost.  Otherwise it will be retained.  The number of UV sets must correspond with the number of textures defined in the corresponding NiTexturingProperty block.
 	 * \param n The new size of the uv set array.
 	 * \sa IShapeData::GetUVSetCount, ITexturingProperty
 	 */
@@ -64,63 +67,73 @@ public:
 
 	//--Getters--//
 
-	/*! Returns the 3D center of the mesh.
+	/*! 
+	 * Returns the 3D center of the mesh.
 	 * \return The center of this mesh.
 	 */
 	NIFLIB_API Vector3 GetCenter() const;
 
-	/*! Returns the radius of the mesh.  That is the distance from the center to
+	/*! 
+	 * Returns the radius of the mesh.  That is the distance from the center to
 	 * the farthest point from the center.
 	 * \return The radius of this mesh.
 	 */
 	NIFLIB_API float GetRadius() const;
 
-	/*! Used to retrive the vertices used by this mesh.  The size of the vector will be the same as the vertex count retrieved with the IShapeData::GetVertexCount function.
+	/*! 
+	 * Used to retrive the vertices used by this mesh.  The size of the vector will be the same as the vertex count retrieved with the IShapeData::GetVertexCount function.
 	 * \return A vector cntaining the vertices used by this mesh.
 	 * \sa IShapeData::SetVertices, IShapeData::GetVertexCount, IShapeData::SetVertexCount.
 	 */
-	NIFLIB_API vector<Vector3> GetVertices() const { return vertices; }
+	NIFLIB_API vector<Vector3> GetVertices() const;
 
-	/*! Used to retrive the normals used by this mesh.  The size of the vector will either be zero if no normals are used, or be the same as the vertex count retrieved with the IShapeData::GetVertexCount function.
+	/*! 
+	 * Used to retrive the normals used by this mesh.  The size of the vector will either be zero if no normals are used, or be the same as the vertex count retrieved with the IShapeData::GetVertexCount function.
 	 * \return A vector cntaining the normals used by this mesh, if any.
 	 * \sa IShapeData::SetNormals, IShapeData::GetVertexCount, IShapeData::SetVertexCount.
 	 */
-	NIFLIB_API vector<Vector3> GetNormals() const { return normals; }
+	NIFLIB_API vector<Vector3> GetNormals() const;
 
-	/*! Used to retrive the vertex colors used by this mesh.  The size of the vector will either be zero if no vertex colors are used, or be the same as the vertex count retrieved with the IShapeData::GetVertexCount function.
+	/*! 
+	 * Used to retrive the vertex colors used by this mesh.  The size of the vector will either be zero if no vertex colors are used, or be the same as the vertex count retrieved with the IShapeData::GetVertexCount function.
 	 * \return A vector cntaining the vertex colors used by this mesh, if any.
 	 * \sa IShapeData::SetVertexColors, IShapeData::GetVertexCount, IShapeData::SetVertexCount.
 	 */
-	NIFLIB_API vector<Color4> GetColors() const { return vertexColors; }
+	NIFLIB_API vector<Color4> GetColors() const;
 
-	/*! Used to retrive the texture coordinates from one of the texture sets used by this mesh.  The function will throw an exception if a texture set index that does not exist is specified.  The size of the vector will be the same as the vertex count retrieved with the IShapeData::GetVertexCount function.
+	/*! 
+	 * Used to retrive the texture coordinates from one of the texture sets used by this mesh.  The function will throw an exception if a texture set index that does not exist is specified.  The size of the vector will be the same as the vertex count retrieved with the IShapeData::GetVertexCount function.
 	 * \param index The index of the texture coordinate set to retrieve the texture coordinates from.  This index is zero based and must be a positive number smaller than that returned by the IShapeData::GetUVSetCount function.  If there are no texture coordinate sets, this function will throw an exception.
 	 * \return A vector cntaining the the texture coordinates used by the requested texture coordinate set.
 	 * \sa IShapeData::SetUVSet, IShapeData::GetUVSetCount, IShapeData::SetUVSetCount, IShapeData::GetVertexCount, IShapeData::SetVertexCount.
 	 */
-	NIFLIB_API vector<TexCoord> GetUVSet( int index ) const { return uvSets[index]; }
+	NIFLIB_API vector<TexCoord> GetUVSet( int index ) const;
 	
 	//--Setters--//
 
-	/*! Used to set the vertex data used by this mesh.  Calling this function will clear all other data in this object.
+	/*! 
+	 * Used to set the vertex data used by this mesh.  Calling this function will clear all other data in this object.
 	 * \param in A vector containing the vertices to replace those in the mesh with.  Note that there is no way to set vertices one at a time, they must be sent in one batch.
 	 * \sa IShapeData::GetVertices, IShapeData::GetVertexCount
 	 */
 	NIFLIB_API virtual void SetVertices( const vector<Vector3> & in );
 
-	/*! Used to set the normal data used by this mesh.  The size of the vector must either be zero, or the same as the vertex count retrieved with the IShapeData::GetVertexCount function or the function will throw an exception.
+	/*!
+	 * Used to set the normal data used by this mesh.  The size of the vector must either be zero, or the same as the vertex count retrieved with the IShapeData::GetVertexCount function or the function will throw an exception.
 	 * \param in A vector containing the normals to replace those in the mesh with.  Note that there is no way to set normals one at a time, they must be sent in one batch.  Use an empty vector to signify that this mesh will not be using normals.
 	 * \sa IShapeData::GetNormals, IShapeData::GetVertexCount, IShapeData::SetVertexCount.
 	 */
 	NIFLIB_API void SetNormals( const vector<Vector3> & in );
 
-	/*! Used to set the vertex color data used by this mesh.  The size of the vector must either be zero, or the same as the vertex count retrieved with the IShapeData::GetVertexCount function or the function will throw an exception.
+	/*!
+	 * Used to set the vertex color data used by this mesh.  The size of the vector must either be zero, or the same as the vertex count retrieved with the IShapeData::GetVertexCount function or the function will throw an exception.
 	 * \param in A vector containing the vertex colors to replace those in the mesh with.  Note that there is no way to set vertex colors one at a time, they must be sent in one batch.  Use an empty vector to signify that this mesh will not be using vertex colors.
 	 * \sa IShapeData::GetColors, IShapeData::GetVertexCount, IShapeData::SetVertexCount.
 	 */
 	NIFLIB_API void SetVertexColors( const vector<Color4> & in );
 
-	/*! Used to set the texture coordinate data from one of the texture sets used by this mesh.  The function will throw an exception if a texture set index that does not exist is specified.  The size of the vector must be the same as the vertex count retrieved with the IShapeData::GetVertexCount function, or the function will throw an exception.
+	/*!
+	 * Used to set the texture coordinate data from one of the texture sets used by this mesh.  The function will throw an exception if a texture set index that does not exist is specified.  The size of the vector must be the same as the vertex count retrieved with the IShapeData::GetVertexCount function, or the function will throw an exception.
 	 * \param index The index of the texture coordinate set to retrieve the texture coordinates from.  This index is zero based and must be a positive number smaller than that returned by the IShapeData::GetUVSetCount function.  If there are no texture coordinate sets, this function will throw an exception.
 	 * \param in A vector containing the the new texture coordinates to replace those in the requested texture coordinate set.
 	 * \sa IShapeData::GetUVSet, IShapeData::GetUVSetCount, IShapeData::SetUVSetCount, IShapeData::GetVertexCount, IShapeData::SetVertexCount.
diff --git a/include/obj/NiIntegerExtraData.h b/include/obj/NiIntegerExtraData.h
index bdaf6668..f96abc5d 100644
--- a/include/obj/NiIntegerExtraData.h
+++ b/include/obj/NiIntegerExtraData.h
@@ -33,7 +33,16 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
+	/*!
+	 * Retrieves the integer value stored in this object.
+	 * \return The integer value stored in this object.
+	 */
 	NIFLIB_API unsigned int GetData() const;
+
+	/*!
+	 * Sets the integer value stored in this object.
+	 * \param[in] n The new integer value to store in this object.
+	 */
 	NIFLIB_API void SetData( unsigned int n );
 
 protected:
diff --git a/include/obj/NiIntegersExtraData.h b/include/obj/NiIntegersExtraData.h
index bfb24461..c76c9138 100644
--- a/include/obj/NiIntegersExtraData.h
+++ b/include/obj/NiIntegersExtraData.h
@@ -33,10 +33,16 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * Integers.
+	 * Retrieves the integer values stored in this object.
+	 * \return The integer values stored in this object.
 	 */
 	NIFLIB_API vector<unsigned int> GetData() const;
-	NIFLIB_API void SetData( const vector<unsigned int >& value );
+
+	/*!
+	 * Sets the integer values stored in this object.
+	 * \param[in] value The new integer values to store in this object.
+	 */
+	NIFLIB_API void SetData( const vector<unsigned int > & value );
 
 protected:
 	NI_INTEGERS_EXTRA_DATA_MEMBERS
diff --git a/include/obj/NiLookAtInterpolator.h b/include/obj/NiLookAtInterpolator.h
index 5be94f15..c1596198 100644
--- a/include/obj/NiLookAtInterpolator.h
+++ b/include/obj/NiLookAtInterpolator.h
@@ -41,27 +41,51 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * Refers to a Node to focus on.
+	 * Retrieves the node that this interpolator is focused on.
+	 * \return The node that this interpolator is focused on.
 	 */
 	NIFLIB_API Ref<NiNode > GetLookAt() const;
+
+	/*!
+	 * Sets the node that this interpolator will focus on.
+	 * \return The new node that the interpolator will focus on, or NULL to clear the current one.
+	 */
 	NIFLIB_API void SetLookAt( Ref<NiNode > value );
 
 	/*!
-	 * Translate.
+	 * Gets the translation of the interpolator.  Could be the necessary value to point at the referenced node in the current pose.
+	 * \return The translation of the interpolator.
 	 */
 	NIFLIB_API Vector3 GetTranslation() const;
+
+	/*!
+	 * Sets the translation of the interpolator.  Could be the necessary value to point at the referenced node in the current pose.
+	 * \param[in] value The new translation for the interpolator.
+	 */
 	NIFLIB_API void SetTranslation( Vector3 value );
 
 	/*!
-	 * Rotation.
+	 * Gets the rotation of the interpolator.  Could be the necessary value to point at the referenced node in the current pose.
+	 * \return The rotation of the interpolator.
 	 */
 	NIFLIB_API Quaternion GetRotation() const;
+
+	/*!
+	 * Sets the rotation of the interpolator.  Could be the necessary value to point at the referenced node in the current pose.
+	 * \param[in] value The new rotation for the interpolator.
+	 */
 	NIFLIB_API void SetRotation( Quaternion value );
 
 	/*!
-	 * Scale.
+	 * Gets the scale of the interpolator.  Could be the necessary value to point at the referenced node in the current pose.
+	 * \return The scale of the interpolator.
 	 */
 	NIFLIB_API float GetScale() const;
+
+	/*!
+	 * Sets the scale of the interpolator.  Could be the necessary value to point at the referenced node in the current pose.
+	 * \param[in] value The new scale for the interpolator.
+	 */
 	NIFLIB_API void SetScale( float value );
 
 protected:
diff --git a/include/obj/NiMorphData.h b/include/obj/NiMorphData.h
index 8704a8a3..d65a34ac 100644
--- a/include/obj/NiMorphData.h
+++ b/include/obj/NiMorphData.h
@@ -34,65 +34,75 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
-	/*! Retrieves the number of verticies used in the morph targets.  This must be the same as the number of verticies in the base mesh that the morph controller for which this block stores data is attatched.  This is not done automatically by Niflib.
+	/*!
+	 * Retrieves the number of verticies used in the morph targets.  This must be the same as the number of verticies in the base mesh that the morph controller for which this block stores data is attatched.  This is not done automatically by Niflib.
 	 * \return The number of vertices used in the morph target meshes.
 	 * \sa NiMorphData::SetVertexCount
 	 */
 	NIFLIB_API int GetVertexCount() const;
 
-	/*! Sets the number of verticies used in the morph targets.  This must be the same as the number of verticies in the base mesh that the morph controller for which this block stores data is attatched.  This is not done automatically by Niflib.  If the new size is smaller, vertices at the ends of the morph targets will be lost.
+	/*!
+	 * Sets the number of verticies used in the morph targets.  This must be the same as the number of verticies in the base mesh that the morph controller for which this block stores data is attatched.  This is not done automatically by Niflib.  If the new size is smaller, vertices at the ends of the morph targets will be lost.
 	 * \param n The new size of the morph target's vertex arrays.
 	 * \sa NiMorphData::GetVertexCount
 	 */
 	NIFLIB_API void SetVertexCount( int n );
 
-	/*! Retrieves the number of morph targets used by this morph controller data.
+	/*!
+	 * Retrieves the number of morph targets used by this morph controller data.
 	 * \return The number of morph targets used by this morph controller data.
 	 * \sa NiMorphData::SetMorphCount
 	 */
 	NIFLIB_API int GetMorphCount() const;
 
-	/*! Resizes the morph target array used by this morph controller data.  If the new size is smaller, morph targets at the end of the array and all associated data will be lost.
+	/*!
+	 * Resizes the morph target array used by this morph controller data.  If the new size is smaller, morph targets at the end of the array and all associated data will be lost.
 	 * \param n The new size of the morph target array.
 	 * \sa NiMorphData::GetMorphCount
 	 */
 	NIFLIB_API void SetMorphCount( int n );
 
-	/*! Retrieves the type of morph interpolation being used by a specific morph target.
+	/*!
+	 * Retrieves the type of morph interpolation being used by a specific morph target.
 	 * \param n The index of the morph to get the interpolation key type from.  A zero-based positive value which must be less than that returned by IMoprhData::GetMorphCount.
 	 * \return The morph key type specifing the type of interpolation being used by the specified morph target.
 	 * \sa NiMorphData::SetMorphKeyType
 	 */
 	NIFLIB_API KeyType GetMorphKeyType( int n ) const;
 	
-	/*! Sets the type of morph interpolation being used by a specific morph target.  Does not affect existing key data.
+	/*!
+	 * Sets the type of morph interpolation being used by a specific morph target.  Does not affect existing key data.
 	 * \param n The index of the morph to get the interpolation key type from.  A zero-based positive value which must be less than that returned by IMoprhData::GetMorphCount.
 	 * \param t The new morph key type specifing the type of interpolation to be used by the specified morph target.
 	 * \sa NiMorphData::GetMorphKeyType
 	 */
 	NIFLIB_API void SetMorphKeyType( int n, KeyType t );
 
-	/*! Retrieves the morph key data for a specified morph target.
+	/*!
+	 * Retrieves the morph key data for a specified morph target.
 	 * \return A vector containing Key<float> data which specify the influence of this morph target over time.
 	 * \sa NiMorphData::SetMorphKeys, Key
 	 */
 	NIFLIB_API vector< Key<float> > GetMorphKeys( int n ) const;
 
-	/*! Sets the morph key data.
+	/*!
+	 * Sets the morph key data.
 	 * \param n The index of the morph target to set the keys for.
 	 * \param keys A vector containing new Key<float> data which will replace any existing data for this morph target.
 	 * \sa NiMorphData::GetMorphKeys, Key
 	 */
 	NIFLIB_API void SetMorphKeys( int n, vector< Key<float> > const & keys );
 
-	/*! Retrieves the vertex data from the specified morph target
+	/*!
+	 * Retrieves the vertex data from the specified morph target
 	 * \param n The index of the morph target to retrieve vertex data for.  This is a zero-based index whoes value that must be less than that returned by NiMorphData::GetMorphCount.
 	 * \return A vector containing the vertices used by this morph target.  The size will be equal to the value returned by NiMorphData::GetVertexCount.
 	 * \sa NiMorphData::SetMorphVerts
 	 */
 	NIFLIB_API vector<Vector3> GetMorphVerts( int n) const;
 
-	/*! Sets the vertex data for a specified morph target
+	/*!
+	 * Sets the vertex data for a specified morph target
 	 * \param n The index of the morph target to set vertex data for.  This is a zero-based index whoes value that must be less than that returned by NiMorphData::GetMorphCount.
 	 * \param in A vector containing the new vertices to be used by this morph target.  The size will be equal to the value returned by NiMorphData::GetVertexCount.
 	 * \sa NiMorphData::SetMorphVerts
diff --git a/include/obj/NiPathInterpolator.h b/include/obj/NiPathInterpolator.h
index 2e48e4c9..6155bff2 100644
--- a/include/obj/NiPathInterpolator.h
+++ b/include/obj/NiPathInterpolator.h
@@ -40,16 +40,28 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * Links to NiPosData.
+	 * Gets the NiPosData object that this interpolator links to, if any.
+	 * \return The NiPosData object that this interpolator links to, or NULL if one is not linked.
 	 */
-	NIFLIB_API Ref<NiPosData > GetPosData() const;
-	NIFLIB_API void SetPosData( Ref<NiPosData > value );
+	NIFLIB_API Ref<NiPosData> GetPosData() const;
 
 	/*!
-	 * Links to NiFloatData.
+	 * Sets the NiPosData object that this interpolator links to, if any.
+	 * \return The NiPosData object that this interpolator should now link to, or NULL to clear the current one.
+	 */
+	NIFLIB_API void SetPosData( NiPosData * value );
+
+	/*!
+	 * Gets the NiFloatData object that this interpolator links to, if any.
+	 * \return The NiFloatData object that this interpolator links to, or NULL if one is not linked.
 	 */
 	NIFLIB_API Ref<NiFloatData > GetFloatData() const;
-	NIFLIB_API void SetFloatData( Ref<NiFloatData > value );
+
+	/*!
+	 * Sets the NiFloatData object that this interpolator links to, if any.
+	 * \return The NiFloatData object that this interpolator should now link to, or NULL to clear the current one.
+	 */
+	NIFLIB_API void SetFloatData( NiFloatData * value );
 
 protected:
 	NI_PATH_INTERPOLATOR_MEMBERS
diff --git a/include/obj/NiPoint3Interpolator.h b/include/obj/NiPoint3Interpolator.h
index 201a4de0..19b21bd5 100644
--- a/include/obj/NiPoint3Interpolator.h
+++ b/include/obj/NiPoint3Interpolator.h
@@ -39,16 +39,28 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * Value when posed?  Value at time 0?
+	 * Gets the 3D point value stored in this object.  Perhaps this is the current interpolated value, the value when posed, or at time index 0.
+	 * \return The 3D point value stored in this object.
 	 */
 	NIFLIB_API Vector3 GetPoint3Value() const;
+
+	/*!
+	 * Sets the 3D point value stored in this object.  Perhaps this is the current interpolated value, the value when posed, or at time index 0.
+	 * \param[in] value The new 3D point value to store in this object.
+	 */
 	NIFLIB_API void SetPoint3Value( Vector3 value );
 
 	/*!
-	 * Reference to NiPosData.
+	 * Gets the NiPosData object that this interpolator links to, if any.
+	 * \return The NiPosData object that this interpolator links to, or NULL if one is not linked.
+	 */
+	NIFLIB_API Ref<NiPosData> GetData() const;
+
+	/*!
+	 * Sets the NiPosData object that this interpolator links to, if any.
+	 * \return The NiPosData object that this interpolator should now link to, or NULL to clear the current one.
 	 */
-	NIFLIB_API Ref<NiPosData > GetData() const;
-	NIFLIB_API void SetData( Ref<NiPosData > value );
+	NIFLIB_API void SetData( NiPosData * value );
 
 protected:
 	NI_POINT3_INTERPOLATOR_MEMBERS
diff --git a/include/obj/NiRangeLODData.h b/include/obj/NiRangeLODData.h
index c6d69fa5..2e39f382 100644
--- a/include/obj/NiRangeLODData.h
+++ b/include/obj/NiRangeLODData.h
@@ -39,23 +39,27 @@ public:
 
 	/*!
 	 * Get the point to calculate distance from for switching?
+	 * \return The point to calculate distance from for switching?
 	 */
 	NIFLIB_API Vector3 GetLODCenter() const;
 
 	/*!
 	 * Set the point to calculate distance from for switching?
+	 * \param[in] value The new point to calculate distance from for switching?
 	 */
 	NIFLIB_API void SetLODCenter( const Vector3 & value );
 
 	/*!
 	 * Get the ranges of distance that each level of detail applies in.
+	 * \return The ranges of distance that each level of detail applies in.
 	 */
 	NIFLIB_API vector<LODRange > GetLODLevels() const;
 
 	/*!
 	 * Set the ranges of distance that each level of detail applies in.
+	 * \param[in] value The new ranges of distance that each level of detail applies in.
 	 */
-	NIFLIB_API void SetLODLevels( const vector<LODRange >& value );
+	NIFLIB_API void SetLODLevels( const vector<LODRange> & value );
 
 protected:
 	NI_RANGE_L_O_D_DATA_MEMBERS
diff --git a/include/obj/NiScreenLODData.h b/include/obj/NiScreenLODData.h
index 67874bcf..3b92ce8b 100644
--- a/include/obj/NiScreenLODData.h
+++ b/include/obj/NiScreenLODData.h
@@ -35,53 +35,63 @@ public:
 
 	/*!
 	 * Get the center of the bounding sphere?
+	 * \return The center of the bounding sphere?
 	 */
 	NIFLIB_API Vector3 GetBoundCenter() const;
 
 	/*!
 	 * Set the center of the bounding sphere?
+	 * \param[in] bound_center The new center of the bounding sphere?
 	 */
 	NIFLIB_API void SetBoundCenter( const Vector3 & bound_center );
 
 	/*!
 	 * Get the radius of the bounding sphere?
+	 * \return The radius of the bounding sphere?
 	 */
 	NIFLIB_API float GetBoundRadius() const;
 
 	/*!
 	 * Set the radius of the bounding sphere?
+	 * \param[in] value The new radius of the bounding sphere?
 	 */
 	NIFLIB_API void SetBoundRadius( float value );
 
 	/*!
 	 * Get the center of the bounding sphere in world space?
+	 * \return The center of the bounding sphere in world space?
 	 */
 	NIFLIB_API Vector3 GetWorldCenter() const;
 
 	/*!
 	 * Set the center of the bounding sphere in world space?
+	 * \param[in] value The new center of the bounding sphere in world space?
 	 */
 	NIFLIB_API void SetWorldCenter( const Vector3 & value );
 
 	/*!
 	 * Get the radius of the bounding sphere in world space?
+	 * \return The radius of the bounding sphere in world space?
 	 */
 	NIFLIB_API float GetWorldRadius() const;
 
 	/*!
 	 * Set the radius of the bounding sphere in world space?
+	 * \param[in] value The new radius of the bounding sphere in world space?
 	 */
 	NIFLIB_API void SetWorldRadius( float value );
 
 	/*!
 	 * Get the LOD levels based on proportion of screen size?
+	 * \return The LOD levels based on proportion of screen size?
 	 */
 	NIFLIB_API vector<float > GetProportionLevels() const;
 
 	/*!
 	 * Set the LOD levels based on proportion of screen size?
+	 * \param[in] value The LOD levels based on proportion of screen size?
 	 */
-	NIFLIB_API void SetProportionLevels( const vector<float >& value );
+	NIFLIB_API void SetProportionLevels( const vector<float> & value );
 
 protected:
 	NI_SCREEN_L_O_D_DATA_MEMBERS
diff --git a/include/obj/NiStringExtraData.h b/include/obj/NiStringExtraData.h
index a1f62ecf..38daa541 100644
--- a/include/obj/NiStringExtraData.h
+++ b/include/obj/NiStringExtraData.h
@@ -35,7 +35,16 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
+	/*!
+	 * Retrieves the string value stored in this object.
+	 * \return The string value stored in this object.
+	 */
 	NIFLIB_API string GetData() const;
+
+	/*!
+	 * Sets the string value stored in this object.
+	 * \param[in] n The new string value to store in this object.
+	 */
 	NIFLIB_API void SetData( const string & n );
 
 protected:
diff --git a/include/obj/NiStringsExtraData.h b/include/obj/NiStringsExtraData.h
index e1a3abbe..9092e567 100644
--- a/include/obj/NiStringsExtraData.h
+++ b/include/obj/NiStringsExtraData.h
@@ -34,7 +34,16 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
+	/*!
+	 * Retrieves the string values stored in this object.
+	 * \return The string values stored in this object.
+	 */
 	NIFLIB_API vector<string> GetData() const;
+
+	/*!
+	 * Sets the string values stored in this object.
+	 * \param[in] n The new string values to store in this object.
+	 */
 	NIFLIB_API void SetData( const vector<string> & n );
 
 protected:
diff --git a/include/obj/NiTransformInterpolator.h b/include/obj/NiTransformInterpolator.h
index 4c6d852f..1f20d42f 100644
--- a/include/obj/NiTransformInterpolator.h
+++ b/include/obj/NiTransformInterpolator.h
@@ -39,28 +39,52 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * Translate.
+	 * Gets the translation value stored in this object.  Perhaps this is the current interpolated value, the value when posed, or at time index 0.
+	 * \return The translation value stored in this object.
 	 */
 	NIFLIB_API Vector3 GetTranslation() const;
+
+	/*!
+	 * Sets the translation value stored in this object.  Perhaps this is the current interpolated value, the value when posed, or at time index 0.
+	 * \param[in] value The new translation value to store in this object.
+	 */
 	NIFLIB_API void SetTranslation( Vector3 value );
 
 	/*!
-	 * Rotation.
+	 * Gets the rotation value stored in this object.  Perhaps this is the current interpolated value, the value when posed, or at time index 0.
+	 * \return The rotation value stored in this object.
 	 */
 	NIFLIB_API Quaternion GetRotation() const;
+
+	/*!
+	 * Sets the rotation value stored in this object.  Perhaps this is the current interpolated value, the value when posed, or at time index 0.
+	 * \param[in] value The new rotation value to store in this object.
+	 */
 	NIFLIB_API void SetRotation( Quaternion value );
 
 	/*!
-	 * Scale.
+	 * Gets the scale value stored in this object.  Perhaps this is the current interpolated value, the value when posed, or at time index 0.
+	 * \return The scale value stored in this object.
 	 */
 	NIFLIB_API float GetScale() const;
+
+	/*!
+	 * Sets the scale value stored in this object.  Perhaps this is the current interpolated value, the value when posed, or at time index 0.
+	 * \param[in] value The new scale value to store in this object.
+	 */
 	NIFLIB_API void SetScale( float value );
 
 	/*!
-	 * Refers to NiTransformData.
+	 * Gets the NiTransformData object that this interpolator links to, if any.
+	 * \return The NiTransformData object that this interpolator links to, or NULL if one is not linked.
 	 */
 	NIFLIB_API Ref<NiTransformData > GetData() const;
-	NIFLIB_API void SetData( Ref<NiTransformData > value );
+
+	/*!
+	 * Sets the NiTransformData object that this interpolator links to, if any.
+	 * \return The NiTransformData object that this interpolator should now link to, or NULL to clear the current one.
+	 */
+	NIFLIB_API void SetData( NiTransformData * value );
 
 protected:
 	NI_TRANSFORM_INTERPOLATOR_MEMBERS
diff --git a/include/obj/NiTriBasedGeomData.h b/include/obj/NiTriBasedGeomData.h
index b681ae6c..638b55cf 100644
--- a/include/obj/NiTriBasedGeomData.h
+++ b/include/obj/NiTriBasedGeomData.h
@@ -38,15 +38,15 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
-
-
-	/*! Returns the triangle faces that make up this mesh.
+	/*!
+	 * Returns the triangle faces that make up this mesh.
 	 * \return A vector containing the triangle faces that make up this mesh.
 	 * \sa SetTriangles
 	 */
-	NIFLIB_API virtual vector<Triangle> GetTriangles() const { return vector<Triangle>(); }  //TODO:  Make this pure virtual?
+	NIFLIB_API virtual vector<Triangle> GetTriangles() const;
 
-	/*! Replaces the triangle face data in this mesh with new data.
+	/*!
+	 * Replaces the triangle face data in this mesh with new data.
 	 * \param in A vector containing the new face data.  Maximum size is 65,535.
 	 * \sa GetTriangles
 	 */
diff --git a/include/obj/NiTriShapeData.h b/include/obj/NiTriShapeData.h
index ce02568d..3bdc0800 100644
--- a/include/obj/NiTriShapeData.h
+++ b/include/obj/NiTriShapeData.h
@@ -35,15 +35,20 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 public:
 
-	NIFLIB_API NiTriShapeData(const vector<Triangle>& verts);
+	/*!
+	 * A constructor which can be used to create a NiTriShapeData and initialize it with vertices.
+	 * \param[in] verts The verticies to initialize the NiTriShapeData with.
+	 */
+	NIFLIB_API NiTriShapeData( const vector<Triangle>& verts );
 
 	//--Match Detection--//
 	
-	//Re-implemented only to casue match detection data to be cleared
+	//Reimplemented only to casue match detection data to be cleared
 	//when vertices are updated.
 	NIFLIB_API virtual void SetVertices( const vector<Vector3> & in );
 
-	/*! This function generates match detection data based on the current
+	/*!
+	 * This function generates match detection data based on the current
 	 * vertex list.  The function of this data is unknown and appears to be
 	 * optional.  The data contains a list of all the vertices that have
 	 * identical positions are stored in the file.  If the vertex data is
@@ -52,7 +57,8 @@ public:
 	 */
 	NIFLIB_API void DoMatchDetection();
 
-	/*! Used to determine whether current match detection data has been previously
+	/*!
+	 * Used to determine whether current match detection data has been previously
 	 * generated.
 	 * \return true if there is current match data, false otherwise.
 	 * \sa NiTriShapeData::DoMatchDetection
@@ -61,7 +67,8 @@ public:
 
 	//--Getters--//
 
-	/*! Returns the triangle faces that make up this mesh.
+	/*!
+	 * Returns the triangle faces that make up this mesh.
 	 * \return A vector containing the triangle faces that make up this mesh.
 	 * \sa ITriShapeData::SetTriangles
 	 */
diff --git a/include/obj/NiTriStripsData.h b/include/obj/NiTriStripsData.h
index e5e4a07d..200db2bb 100644
--- a/include/obj/NiTriStripsData.h
+++ b/include/obj/NiTriStripsData.h
@@ -32,17 +32,24 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
-	NIFLIB_API NiTriStripsData(const vector<Triangle> &tris, bool nvtristrips = true);
+	/*!
+	 * A constructor which can be used to create a NiTriStripsData and initialize it with triangles.
+	 * \param[in] tris The triangles to use to initialize the NiTriShapeData with.
+	 * \param[in] nvtristrips Whether or not to use the NvTriStrips library from nVidia to generate triangle strips from the given data.
+	 */
+	NIFLIB_API NiTriStripsData(const vector<Triangle> & tris, bool nvtristrips = true);
 
 	//--Counts--//
 
-	/*! Used to get the number of triangle strips that this mesh is divided into.
+	/*!
+	 * Used to get the number of triangle strips that this mesh is divided into.
 	 * \return The number of triangle strips used by this mesh.
 	 * \sa NiTriStripData::SetStripCount
 	 */
 	NIFLIB_API unsigned short GetStripCount() const;
 
-	/*! Used to resize the triangle strips array.  If the new size is smaller, strips at the end of the array will be deleted.
+	/*!
+	 * Used to resize the triangle strips array.  If the new size is smaller, strips at the end of the array will be deleted.
 	 * \param n The new size of the triangle strips array.
 	 * \sa NiTriStripData::GetStripCount
 	 */
@@ -50,14 +57,16 @@ public:
 	
 	//--Getters--//
 
-	/*! Used to retrieve all the triangles from a specific triangle strip.
+	/*!
+	 * Used to retrieve all the triangles from a specific triangle strip.
 	 * \param index The index of the triangle strip to retrieve the triangles from.  This is a zero-based index which must be a positive number less than that returned by NiTriStripsData::GetStripCount.
 	 * \return A vector containing all the triangle faces from the triangle strip specified by index.
 	 * \sa NiTriStripData::SetStrip, NiTriStripData::GetTriangles
 	 */
 	NIFLIB_API vector<unsigned short> GetStrip( int index ) const;
 
-	/*! This is a conveniance function which returns all triangle faces in all triangle strips that make up this mesh.  It is similar to the ITriShapeData::GetTriangles function.
+	/*!
+	 * This is a conveniance function which returns all triangle faces in all triangle strips that make up this mesh.  It is similar to the ITriShapeData::GetTriangles function.
 	 * \return A vector containing all the triangle faces from all the triangle strips that make up this mesh.
 	 * \sa NiTriStripData::GetTriangles, NiTriStripData::GetStrip, NiTriStripData::SetStrip
 	 */
@@ -65,14 +74,16 @@ public:
 
 	//--Setter--/
 
-	/*! Used to set the triangle face data in a specific triangle strip.
+	/*!
+	 * Used to set the triangle face data in a specific triangle strip.
 	 * \param index The index of the triangle strip to set the face data for.  This is a zero-based index which must be a positive number less than that returned by NiTriStripsData::GetStripCount.
 	 * \param in The vertex indices that make up this strip, in standard OpenGL triangle strip order.
 	 * \sa NiTriStripData::GetStrip, NiTriStripData::GetTriangles
 	 */
 	NIFLIB_API void SetStrip( int index, const vector<unsigned short> & in );
 
-	/*! Replaces the triangle face data in this mesh with new data.
+	/*!
+	 * Replaces the triangle face data in this mesh with new data.
 	 * \param in A vector containing the new face data.  Maximum size is 65,535.
 	 * \sa GetTriangles
 	 */
diff --git a/include/obj/NiVectorExtraData.h b/include/obj/NiVectorExtraData.h
index 1e26b416..7cae3eb8 100644
--- a/include/obj/NiVectorExtraData.h
+++ b/include/obj/NiVectorExtraData.h
@@ -33,7 +33,16 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
+	/*!
+	 * Retrieves the vector value stored in this object.
+	 * \return The vector value stored in this object.
+	 */
 	NIFLIB_API Vector3 GetData() const;
+
+	/*!
+	 * Sets the vector value stored in this object.
+	 * \param[in] n The new vector value to store in this object.
+	 */
 	NIFLIB_API void SetData( const Vector3 & n );
 
 	//TODO:  There is an unknown member in this class
diff --git a/include/obj/NiVertWeightsExtraData.h b/include/obj/NiVertWeightsExtraData.h
index 49006dbf..5d732708 100644
--- a/include/obj/NiVertWeightsExtraData.h
+++ b/include/obj/NiVertWeightsExtraData.h
@@ -34,7 +34,16 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
+	/*!
+	 * Retrieves the floating point values stored in this object.
+	 * \return The floating point values stored in this object.
+	 */
 	NIFLIB_API vector<float> GetData() const;
+
+	/*!
+	 * Sets the floating point values stored in this object.
+	 * \param[in] n The new floating point values to store in this object.
+	 */
 	NIFLIB_API void SetData( const vector<float> & n );
 
 protected:
diff --git a/include/obj/bhkRigidBody.h b/include/obj/bhkRigidBody.h
index d995a9f9..dcd21237 100644
--- a/include/obj/bhkRigidBody.h
+++ b/include/obj/bhkRigidBody.h
@@ -40,123 +40,207 @@ public:
 	NIFLIB_HIDDEN virtual list<NiObjectRef> GetRefs() const;
 
 	/*!
-	 * Copy of layer value?
+	 * Retrieves what appears to be a copy of the layer value.
+	 * \return The duplicate layer value.
 	 */
 	NIFLIB_API OblivionLayer GetLayerCopy() const;
+
+	/*!
+	 * Sets what appears to be a copy of the layer value.
+	 * \param[in] value The new duplicate layer value.
+	 */
 	NIFLIB_API void SetLayerCopy( OblivionLayer value );
 
 	/*!
-	 * Translation.
+	 * Gets the current translation of this rigid body.
+	 * \return The translation of this rigid body.
 	 */
 	NIFLIB_API Vector3 GetTranslation() const;
+
+	/*!
+	 * Sets a new translation for this rigid body.
+	 * \param[in] value  The new translation for this rigid body.
+	 */
 	NIFLIB_API void SetTranslation( const Vector3 & value );
 
 	/*!
-	 * Rotation.
+	 * Gets the current rotation of this rigid body.
+	 * \return The rotation of this rigid body.
 	 */
 	NIFLIB_API QuaternionXYZW GetRotation() const;
+
+	/*!
+	 * Sets a new rotation for this rigid body.
+	 * \param[in] value The new rotation for this rigid body.
+	 */
 	NIFLIB_API void SetRotation( const QuaternionXYZW & value );
 
 	/*!
-	 * Linear velocity.
+	 * Gets the current linear velocity of this rigid body.
+	 * \return The linear velocity of this rigid body.
 	 */
 	NIFLIB_API Vector3 GetLinearVelocity() const;
+
+	/*!
+	 * Sets a new linear velocity for this rigid body.
+	 * \param[in] value The new linear velocity for this rigid body.
+	 */
 	NIFLIB_API void SetLinearVelocity( const Vector3 & value );
 
 	/*!
-	 * Angular velocity.
+	 * Gets the current angular velocity of this rigid body.
+	 * \return The angular velocity of this rigid body.
 	 */
 	NIFLIB_API Vector3 GetAngularVelocity() const;
+
+	/*!
+	 * Sets a new angular velocity for this rigid body.
+	 * \param[in] value The new angular velocity for this rigid body.
+	 */
 	NIFLIB_API void SetAngularVelocity( const Vector3 & value );
 
 	/*!
-	 * Seems to be some kind of transformation matrix, scale or translation?
+	 * Gets the current inertia of this rigid body.
+	 * \return The inertia of this rigid body.
 	 */
-	NIFLIB_API array<12,float>  GetInertia() const;
-	NIFLIB_API void SetInertia( const array<12,float>&  value );
+	NIFLIB_API array<12,float> GetInertia() const;
 
 	/*!
-	 * The object's center.
+	 * Sets a new inertia for this rigid body.
+	 * \param[in] value The new inertia for this rigid body.
+	 */
+	NIFLIB_API void SetInertia( const array<12,float> & value );
+
+	/*!
+	 * Gets the current center point of this rigid body.
+	 * \return The center point of this rigid body.
 	 */
 	NIFLIB_API Vector3 GetCenter() const;
+
+	/*!
+	 * Sets a new center point for this rigid body.
+	 * \param[in] value The new center point for this rigid body.
+	 */
 	NIFLIB_API void SetCenter( const Vector3 & value );
 
 	/*!
-	 * Object mass.
+	 * Gets the current mass of this rigid body.
+	 * \return The mass of this rigid body.
 	 */
 	NIFLIB_API float GetMass() const;
+
+	/*!
+	 * Sets a new mass for this rigid body.
+	 * \param[in] value The new mass for this rigid body.
+	 */
 	NIFLIB_API void SetMass( float value );
 
 	/*!
-	 * Linear damping level.
+	 * Gets the current linear damping level of this rigid body.
+	 * \return The linear damping level of this rigid body.
 	 */
 	NIFLIB_API float GetLinearDamping() const;
+
+	/*!
+	 * Sets a new linear damping level for this rigid body.
+	 * \param[in] value The new linear damping level for this rigid body.
+	 */
 	NIFLIB_API void SetLinearDamping( float value );
 
 	/*!
-	 * Angular Dampling level.
+	 * Gets the current angular damping level of this rigid body.
+	 * \return The angular damping level of this rigid body.
 	 */
 	NIFLIB_API float GetAngularDamping() const;
+
+	/*!
+	 * Sets a new angular damping level for this rigid body.
+	 * \param[in] value The new angular damping level for this rigid body.
+	 */
 	NIFLIB_API void SetAngularDamping( float value );
 
 	/*!
-	 * The object's friction.
+	 * Gets the current friction of this rigid body.
+	 * \return The friction of this rigid body.
 	 */
 	NIFLIB_API float GetFriction() const;
+
+	/*!
+	 * Sets a new friction for this rigid body.
+	 * \param[in] value The new friction for this rigid body.
+	 */
 	NIFLIB_API void SetFriction( float value );
 
 	/*!
-	 * The object's restitution (elasticity).
+	 * Gets the current restitution of this rigid body.
+	 * \return The restitution of this rigid body.
 	 */
 	NIFLIB_API float GetRestitution() const;
+
+	/*!
+	 * Sets a new restitution for this rigid body.
+	 * \param[in] value The new restitution for this rigid body.
+	 */
 	NIFLIB_API void SetRestitution( float value );
 
 	/*!
-	 * Maximal linear velocity.
+	 * Gets the current maximum linear velocity of this rigid body.
+	 * \return The maximum linear velocity of this rigid body.
 	 */
 	NIFLIB_API float GetMaxLinearVelocity() const;
+
+	/*!
+	 * Sets a new maximum linear velocit for this rigid body.
+	 * \param[in] value The new maximum linear velocity for this rigid body.
+	 */
 	NIFLIB_API void SetMaxLinearVelocity( float value );
 
 	/*!
-	 * Maximal angular velocity. Pi x 10?
+	 * Gets the current maximum angular velocity of this rigid body.
+	 * \return The maximum angular velocity of this rigid body.
 	 */
 	NIFLIB_API float GetMaxAngularVelocity() const;
+
+	/*!
+	 * Sets a new maximum angular velocity for this rigid body.
+	 * \param[in] value The new maximum angular velocit for this rigid body.
+	 */
 	NIFLIB_API void SetMaxAngularVelocity( float value );
 
 	/*!
-	 * Penetration depth.
+	 * Gets the current allowable penetration depth of this rigid body.
+	 * \return The allowable penetration depth of this rigid body.
 	 */
 	NIFLIB_API float GetPenetrationDepth() const;
+
+	/*!
+	 * Sets a new allowable penetration depth for this rigid body.
+	 * \param[in] value The new allowable penetration depth for this rigid body.
+	 */
 	NIFLIB_API void SetPenetrationDepth( float value );
 
 	/*!
-	 * Motion system? Overrides Quality when on Keyframed?
-    * 0: Keyframed
-    * 1: Box
-    * 2: Sphere
-    * 3: Sphere
-    * 4: Box
-    * 5: Box
-    * 6: Keyframed
-	 * 7: Keyframed
-    * 8: Box
-    * 9+: Keyframed?
+	 * Sets the current motion system for this rigid body.  Seems to override motion quality when set to keyframed.
+	 * \return The current motion system setting of this rigid body.
 	 */
 	NIFLIB_API MotionSystem GetMotionSystem() const;
+
+	/*!
+	 * Gets the current motion system of this rigid body.  Seems to override motion quality when set to keyframed.
+	 * \param[in] value The new motion system setting for this rigid body.
+	 */
 	NIFLIB_API void SetMotionSystem( MotionSystem value );
 
 	/*!
-	 * The motion type. Determines quality of motion?
-    * 0: Moving
-	 * 1: Fixed
-    * 2: Keyframed
-    * 3-4: Moving(?)
-	 * 5: Critical
-    * 6: Bullet
-    * 7: User
-    * 8+: Null
+	 * Sets the quality of the calculations used to detect collisions for this object.  Essentially, the faster the object goes, the higher quality of motion it will require.
+	 * \return The current motion quality setting of this rigid body.
 	 */
 	NIFLIB_API MotionQuality GetQualityType() const;
+
+	/*!
+	 * Gets the quality of the calculations used to detect collisions for this object.  Essentially, the faster the object goes, the higher quality of motion it will require.
+	 * \param[in] value The new motion quality setting for this rigid body.
+	 */
 	NIFLIB_API void SetQualityType( MotionQuality value );
 
 protected:
diff --git a/src/obj/NiAVObject.cpp b/src/obj/NiAVObject.cpp
index 4eb60097..c7db630d 100644
--- a/src/obj/NiAVObject.cpp
+++ b/src/obj/NiAVObject.cpp
@@ -23,6 +23,11 @@ NiAVObject::NiAVObject() NI_A_V_OBJECT_CONSTRUCT, parent(NULL) {}
 NiAVObject::~NiAVObject() {
 	//Clear Properties
 	ClearProperties();
+
+	//Clear Collision Object Link
+	if ( collisionObject != NULL ) {
+		collisionObject->SetParent(NULL);
+	}
 }
 
 void NiAVObject::Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info ) {
@@ -172,7 +177,7 @@ Ref<NiCollisionData > NiAVObject::GetCollisionData() const {
    return collisionData;
 }
 
-void NiAVObject::SetCollisionData( Ref<NiCollisionData > value ) {
+void NiAVObject::SetCollisionData( NiCollisionData * value ) {
    collisionData = value;
 }
 
@@ -181,8 +186,18 @@ Ref<NiCollisionObject > NiAVObject::GetCollisionObject() const {
   return collisionObject;
 }
 
-void NiAVObject::SetCollisionObject( Ref<NiCollisionObject > value ) {
-   collisionObject = value;
+void NiAVObject::SetCollisionObject( NiCollisionObject * value ) {
+	if ( value->GetParent() != NULL ) {
+		throw runtime_error( "You have attempted to add a collision object to a NiNode which is already attached to another NiNode." );
+	}
+	value->SetParent( this );
+
+	if ( collisionObject !=NULL ) {
+		//Remove unlink previous collision object from this node
+		collisionObject->SetParent(NULL);
+	}
+
+	collisionObject = value;
 }
 
 void NiAVObject::SetHidden(bool value)
diff --git a/src/obj/NiBSplineInterpolator.cpp b/src/obj/NiBSplineInterpolator.cpp
index 1cab9aa3..5f0b9aa7 100644
--- a/src/obj/NiBSplineInterpolator.cpp
+++ b/src/obj/NiBSplineInterpolator.cpp
@@ -57,7 +57,7 @@ Ref<NiBSplineData > NiBSplineInterpolator::GetSplineData() const {
 	return splineData;
 }
 
-void NiBSplineInterpolator::SetSplineData( Ref<NiBSplineData > value ) {
+void NiBSplineInterpolator::SetSplineData( NiBSplineData * value ) {
 	splineData = value;
 }
 
@@ -65,7 +65,7 @@ Ref<NiBSplineBasisData > NiBSplineInterpolator::GetBasisData() const {
 	return basisData;
 }
 
-void NiBSplineInterpolator::SetBasisData( Ref<NiBSplineBasisData > value ) {
+void NiBSplineInterpolator::SetBasisData( NiBSplineBasisData * value ) {
 	basisData = value;
 }
 /*********************************************************************
diff --git a/src/obj/NiBoolInterpolator.cpp b/src/obj/NiBoolInterpolator.cpp
index abdaa442..b0b63b45 100644
--- a/src/obj/NiBoolInterpolator.cpp
+++ b/src/obj/NiBoolInterpolator.cpp
@@ -48,7 +48,7 @@ Ref<NiBoolData > NiBoolInterpolator::GetData() const {
 	return data;
 }
 
-void NiBoolInterpolator::SetData( Ref<NiBoolData > value ) {
+void NiBoolInterpolator::SetData( NiBoolData * value ) {
 	data = value;
 }
 
diff --git a/src/obj/NiBoolTimelineInterpolator.cpp b/src/obj/NiBoolTimelineInterpolator.cpp
index 1e931204..24731e90 100644
--- a/src/obj/NiBoolTimelineInterpolator.cpp
+++ b/src/obj/NiBoolTimelineInterpolator.cpp
@@ -36,19 +36,19 @@ const Type & NiBoolTimelineInterpolator::GetType() const {
 	return TYPE;
 };
 
-byte NiBoolTimelineInterpolator::GetBoolValue() const {
-	return boolValue;
+bool NiBoolTimelineInterpolator::GetBoolValue() const {
+	return (boolValue != 0);
 }
 
-void NiBoolTimelineInterpolator::SetBoolValue( byte value ) {
+void NiBoolTimelineInterpolator::SetBoolValue( bool value ) {
 	boolValue = value;
 }
 
-Ref<NiBoolData > NiBoolTimelineInterpolator::GetData() const {
+Ref<NiBoolData> NiBoolTimelineInterpolator::GetData() const {
 	return data;
 }
 
-void NiBoolTimelineInterpolator::SetData( Ref<NiBoolData > value ) {
+void NiBoolTimelineInterpolator::SetData( NiBoolData * value ) {
 	data = value;
 }
 
diff --git a/src/obj/NiCollisionObject.cpp b/src/obj/NiCollisionObject.cpp
index bf0608a6..8214223e 100644
--- a/src/obj/NiCollisionObject.cpp
+++ b/src/obj/NiCollisionObject.cpp
@@ -49,7 +49,7 @@ Ref<NiObject > NiCollisionObject::GetBody() const {
 	return body;
 }
 
-void NiCollisionObject::SetBody( Ref<NiObject > value ) {
+void NiCollisionObject::SetBody( NiObject * value ) {
 	body = value;
 }
 
diff --git a/src/obj/NiControllerSequence.cpp b/src/obj/NiControllerSequence.cpp
index 9cfda479..1bc1f3c4 100644
--- a/src/obj/NiControllerSequence.cpp
+++ b/src/obj/NiControllerSequence.cpp
@@ -56,13 +56,13 @@ void NiControllerSequence::SetParent(NiControllerManager * parent) {
 }
 
 
-void NiControllerSequence::SetTextKey( const Ref<NiTextKeyExtraData> & txt_key ) {
+void NiControllerSequence::SetTextKey( NiTextKeyExtraData * txt_key ) {
 	//Set new name
 	textKeysName = txt_key->GetName();
 	textKeys = txt_key;
 }
 
-void NiControllerSequence::AddController( const Ref<NiTimeController> & obj ) {
+void NiControllerSequence::AddController( NiTimeController * obj ) {
 	//Make sure the link isn't null
 	if ( obj == NULL ) {
 		throw runtime_error("Attempted to add a null controller to NiControllerSequence block.");
@@ -90,7 +90,7 @@ void NiControllerSequence::AddController( const Ref<NiTimeController> & obj ) {
 	controlledBlocks.push_back( cl );
 }
 
-void NiControllerSequence::AddInterpolator( const Ref<NiSingleInterpolatorController> & obj, byte priority ) {
+void NiControllerSequence::AddInterpolator( NiSingleInterpolatorController * obj, byte priority ) {
 	//Make sure the link isn't null
 	if ( obj == NULL ) {
 		throw runtime_error("Attempted to add a null controller to NiControllerSequence block.");
diff --git a/src/obj/NiExtraData.cpp b/src/obj/NiExtraData.cpp
index 838be7f6..e88fdb84 100644
--- a/src/obj/NiExtraData.cpp
+++ b/src/obj/NiExtraData.cpp
@@ -54,7 +54,7 @@ NiExtraDataRef NiExtraData::GetNextExtraData() const {
 	return nextExtraData;
 }
 
-void NiExtraData::SetNextExtraData( const NiExtraDataRef & obj ) {
+void NiExtraData::SetNextExtraData( NiExtraData * obj ) {
 	nextExtraData = obj;
 }
 
diff --git a/src/obj/NiFloatInterpolator.cpp b/src/obj/NiFloatInterpolator.cpp
index 45f7ab85..b606b562 100644
--- a/src/obj/NiFloatInterpolator.cpp
+++ b/src/obj/NiFloatInterpolator.cpp
@@ -48,7 +48,7 @@ Ref<NiFloatData > NiFloatInterpolator::GetData() const {
 	return data;
 }
 
-void NiFloatInterpolator::SetData( Ref<NiFloatData > value ) {
+void NiFloatInterpolator::SetData( NiFloatData * value ) {
 	data = value;
 }
 
diff --git a/src/obj/NiGeometryData.cpp b/src/obj/NiGeometryData.cpp
index db00a582..875394ff 100644
--- a/src/obj/NiGeometryData.cpp
+++ b/src/obj/NiGeometryData.cpp
@@ -12,6 +12,30 @@ NiGeometryData::NiGeometryData() NI_GEOMETRY_DATA_CONSTRUCT {}
 
 NiGeometryData::~NiGeometryData() {}
 
+int NiGeometryData::GetVertexCount() const {
+	return int(vertices.size());
+}
+
+short NiGeometryData::GetUVSetCount() const {
+	return short(uvSets.size());
+}
+
+vector<Vector3> NiGeometryData::GetVertices() const {
+	return vertices;
+}
+
+vector<Vector3> NiGeometryData::GetNormals() const {
+	return normals;
+}
+
+vector<Color4> NiGeometryData::GetColors() const {
+	return vertexColors;
+}
+
+vector<TexCoord> NiGeometryData::GetUVSet( int index ) const {
+	return uvSets[index];
+}
+
 void NiGeometryData::Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info ) {
 	InternalRead( in, link_stack, info );
 }
diff --git a/src/obj/NiPathInterpolator.cpp b/src/obj/NiPathInterpolator.cpp
index 659178c8..b92c8aca 100644
--- a/src/obj/NiPathInterpolator.cpp
+++ b/src/obj/NiPathInterpolator.cpp
@@ -41,7 +41,7 @@ Ref<NiPosData > NiPathInterpolator::GetPosData() const {
 	return posData;
 }
 
-void NiPathInterpolator::SetPosData( Ref<NiPosData > value ) {
+void NiPathInterpolator::SetPosData( NiPosData * value ) {
 	posData = value;
 }
 
@@ -49,7 +49,7 @@ Ref<NiFloatData > NiPathInterpolator::GetFloatData() const {
 	return floatData;
 }
 
-void NiPathInterpolator::SetFloatData( Ref<NiFloatData > value ) {
+void NiPathInterpolator::SetFloatData( NiFloatData * value ) {
 	floatData = value;
 }
 
diff --git a/src/obj/NiPoint3Interpolator.cpp b/src/obj/NiPoint3Interpolator.cpp
index 9943ab61..7d84fde3 100644
--- a/src/obj/NiPoint3Interpolator.cpp
+++ b/src/obj/NiPoint3Interpolator.cpp
@@ -48,7 +48,7 @@ Ref<NiPosData > NiPoint3Interpolator::GetData() const {
 	return data;
 }
 
-void NiPoint3Interpolator::SetData( Ref<NiPosData > value ) {
+void NiPoint3Interpolator::SetData( NiPosData * value ) {
 	data = value;
 }
 
diff --git a/src/obj/NiTransformInterpolator.cpp b/src/obj/NiTransformInterpolator.cpp
index 467e5eeb..79f4694f 100644
--- a/src/obj/NiTransformInterpolator.cpp
+++ b/src/obj/NiTransformInterpolator.cpp
@@ -60,11 +60,11 @@ void NiTransformInterpolator::SetScale( float value ) {
 	scale = value;
 }
 
-Ref<NiTransformData > NiTransformInterpolator::GetData() const {
+Ref<NiTransformData> NiTransformInterpolator::GetData() const {
 	return data;
 }
 
-void NiTransformInterpolator::SetData( Ref<NiTransformData > value ) {
+void NiTransformInterpolator::SetData( NiTransformData * value ) {
 	data = value;
 }
 
diff --git a/src/obj/NiTriBasedGeomData.cpp b/src/obj/NiTriBasedGeomData.cpp
index adc97de9..2cf8317a 100644
--- a/src/obj/NiTriBasedGeomData.cpp
+++ b/src/obj/NiTriBasedGeomData.cpp
@@ -40,6 +40,10 @@ void NiTriBasedGeomData::SetTriangles( const vector<Triangle> & in ) {
    throw runtime_error("SetTriangles is not implemented for this object.");
 }
 
+vector<Triangle> NiTriBasedGeomData::GetTriangles() const {
+	return vector<Triangle>();
+}  
+
 const Type & NiTriBasedGeomData::TypeConst() {
 	return TYPE;
 }
-- 
GitLab