diff --git a/gen/ControllerLink.cpp b/gen/ControllerLink.cpp
index 9f7c7273eea791fdc84bb2a8d09f5d1384654ef5..16c84980a60c4f25440bcd653282df1ddfb48ec2 100644
--- a/gen/ControllerLink.cpp
+++ b/gen/ControllerLink.cpp
@@ -9,7 +9,7 @@ All rights reserved.  Please see niflib.h for licence. */
 using namespace Niflib;
 
 //Constructor
-ControllerLink::ControllerLink() : controller(NULL), interpolator(NULL), unknownLink2(NULL), unknownShort0((ushort)0), priority_((byte)0), stringPalette(NULL), nodeNameOffset((uint)0), propertyTypeOffset((uint)0), controllerTypeOffset((uint)0), variableOffset1((uint)0), variableOffset2((uint)0) {};
+ControllerLink::ControllerLink() : controller(NULL), interpolator(NULL), unknownLink2(NULL), unknownShort0((ushort)0), priority_((byte)0), stringPalette(NULL), nodeNameOffset((uint)-1), propertyTypeOffset((uint)-1), controllerTypeOffset((uint)-1), variableOffset1((uint)-1), variableOffset2((uint)-1) {};
 
 //Destructor
 ControllerLink::~ControllerLink() {};
diff --git a/obj/NiControllerSequence.cpp b/obj/NiControllerSequence.cpp
index d1cc592194c7f3925fd918d8d3db307e3368fe6d..f3eb821597aa77adc780e4df960b16f69c5bc14e 100644
--- a/obj/NiControllerSequence.cpp
+++ b/obj/NiControllerSequence.cpp
@@ -104,12 +104,8 @@ void NiControllerSequence::AddInterpolator( const Ref<NiSingleInterpolatorContro
 	}
 
 	//If there are existing ControllerLinks, use the same StringPalette they're using
-	NiStringPaletteRef str_pal;
-	if ( controlledBlocks.size() > 0 ) {
-		str_pal = controlledBlocks[0].stringPalette;
-	} else {
-		//No existing ones, so make a new one
-		str_pal = new NiStringPalette;
+   if ( stringPalette == NULL ) {
+      stringPalette = new NiStringPalette;
 	}
 
 	//Make a new ControllerLink and fill out necessary data
@@ -117,15 +113,15 @@ void NiControllerSequence::AddInterpolator( const Ref<NiSingleInterpolatorContro
 
 	cl.interpolator = interp;
 	cl.priority_ = priority;
-   cl.stringPalette = str_pal;
-	cl.nodeNameOffset = str_pal->AddSubStr( target->GetName() );
+   cl.stringPalette = stringPalette;
+	cl.nodeNameOffset = stringPalette->AddSubStr( target->GetName() );
 
 	NiPropertyRef prop = DynamicCast<NiProperty>(target);
 	if ( prop != NULL ) {
-		cl.propertyTypeOffset = str_pal->AddSubStr( prop->GetType().GetTypeName() );
+		cl.propertyTypeOffset = stringPalette->AddSubStr( prop->GetType().GetTypeName() );
 	}
 
-	cl.controllerTypeOffset = str_pal->AddSubStr( obj->GetType().GetTypeName() );
+	cl.controllerTypeOffset = stringPalette->AddSubStr( obj->GetType().GetTypeName() );
 
 	//Add finished ControllerLink to list
 	controlledBlocks.push_back( cl );
diff --git a/obj/NiStringPalette.cpp b/obj/NiStringPalette.cpp
index 25aa2cb7e5ab69f78b610e74d9e51fbc5b534543..59183a69f251fa28900014f13bf60729ef1b7d65 100644
--- a/obj/NiStringPalette.cpp
+++ b/obj/NiStringPalette.cpp
@@ -64,7 +64,8 @@ string NiStringPalette::GetSubStr( short offset ) const {
 
 unsigned int NiStringPalette::AddSubStr( const string & n ) {
 	//Search for the string
-	uint offset = (uint)palette.palette.find( n );
+   //  When searching for strings also search for ending null.
+	uint offset = (uint)palette.palette.find( n.c_str(), 0, n.size()+1 );
 	
 	//If string was not found, append it
 	if ( offset == 0xFFFFFFFF ) {