Fixing up IK load issues, still need to fix IK runtime.
diff --git a/Source/Actor.cpp b/Source/Actor.cpp
index 846a658..9421f31 100644
--- a/Source/Actor.cpp
+++ b/Source/Actor.cpp
@@ -160,8 +160,8 @@
 
 void Actor::readAnimationsBlock(BlockReader* block)
 {
-	int animationCount = (int)block->readUnsignedShort();
-	m_Animations = new ActorAnimation[animationCount];
+	m_AnimationsCount = (int)block->readUnsignedShort();
+	m_Animations = new ActorAnimation[m_AnimationsCount];
 
 	BlockReader* animationBlock = nullptr;
 	int animationIndex = 0;
@@ -172,9 +172,9 @@
 		{
 			case BlockType::Animation:
 				// Sanity check.
-				if (animationIndex < animationCount)
+				if (animationIndex < m_AnimationsCount)
 				{
-					m_Animations[animationIndex].read(animationBlock, m_Nodes);
+					m_Animations[animationIndex++].read(animationBlock, m_Nodes);
 				}
 				break;
 			default:
@@ -278,6 +278,7 @@
 {
 	m_Flags = actor.m_Flags;
 	m_Animations = actor.m_Animations;
+	m_AnimationsCount = actor.m_AnimationsCount;
 	m_MaxTextureIndex = actor.m_MaxTextureIndex;
 	m_ImageNodeCount = actor.m_ImageNodeCount;
 	m_SolverNodeCount = actor.m_SolverNodeCount;
@@ -384,10 +385,11 @@
 
 	if(runSolvers)
 	{
+
 		for(int i = 0; i < m_SolverNodeCount; i++)
 		{
 			Solver* solver = m_Solvers[i];
-			if(solver != nullptr && solver->needsSolve())
+			if(solver != nullptr)
 			{
 				solver->solveStart();
 			}
@@ -396,7 +398,7 @@
 		for(int i = 0; i < m_SolverNodeCount; i++)
 		{
 			Solver* solver = m_Solvers[i];
-			if(solver != nullptr && solver->needsSolve())
+			if(solver != nullptr)
 			{
 				solver->solve();
 			}
@@ -405,7 +407,7 @@
 		for(int i = 0; i < m_SolverNodeCount; i++)
 		{
 			Solver* solver = m_Solvers[i];
-			if(solver != nullptr && solver->needsSolve())
+			if(solver != nullptr)
 			{
 				solver->suppressMarkDirty(true);
 			}
diff --git a/Source/ActorIKTarget.cpp b/Source/ActorIKTarget.cpp
index 199abdd..40807b6 100644
--- a/Source/ActorIKTarget.cpp
+++ b/Source/ActorIKTarget.cpp
@@ -98,16 +98,20 @@
 		m_Bone2 = m_InfluencedBones[m_NumInfluencedBones - 1].bone;
 		ActorBone* b1c = m_Bone2;
 		ActorBone* b1 = m_Bone1;
-		while (b1c != nullptr && b1c->parent() != b1)
+
+		if(m_NumInfluencedBones > 1)
 		{
-			ActorNode* n = b1c->parent();
-			if (n != nullptr && n->type() == NodeType::ActorBone)
+			while (b1c != nullptr && b1c->parent() != b1)
 			{
-				b1c = reinterpret_cast<ActorBone*>(n);
-			}
-			else
-			{
-				b1c = nullptr;
+				ActorNode* n = b1c->parent();
+				if (n != nullptr && n->type() == NodeType::ActorBone)
+				{
+					b1c = dynamic_cast<ActorBone*>(n);
+				}
+				else
+				{
+					break;
+				}
 			}
 		}
 		m_Bone1Child = b1c;
@@ -134,8 +138,9 @@
 		int chainIndex = 0;
 		while (end != nullptr && end != b1->parent())
 		{
-			BoneChain& bc = m_Chain[chainIndex];
+			BoneChain& bc = m_Chain[chainIndex++];
 			bc.bone = reinterpret_cast<ActorBone*>(end);
+			bc.angle = 0.0f;
 			ActorNode* n = end->parent();
 			if (n != nullptr && n->type() == NodeType::ActorBone)
 			{
@@ -147,7 +152,7 @@
 			}
 
 			bc.included = doesInfluence(bc.bone) || doesInfluence(reinterpret_cast<ActorBone*>(end)); // end is either null or an actorbone (for sure) here.
-			bc.angle = 0.0f;
+			
 		}
 	}
 }
@@ -204,6 +209,7 @@
 
 void ActorIKTarget::solveStart()
 {
+	printf("CHAIN %i\n", m_ChainLength);
 	if (m_Bone1 == nullptr)
 	{
 		return;
@@ -333,14 +339,17 @@
 
 	if (m_NumInfluencedBones == 1)
 	{
+		printf("A\n");
 		solve1(m_InfluencedBones[0].bone, worldTargetTranslation);
 	}
 	else if (m_NumInfluencedBones == 2)
 	{
+		printf("B\n");
 		solve2(m_InfluencedBones[0].bone, m_InfluencedBones[1].bone, worldTargetTranslation, m_InvertDirection);
 	}
 	else
 	{
+		printf("C\n");
 		for (int i = 0; i < m_NumInfluencedBones - 1; i++)
 		{
 			solve2(m_InfluencedBones[i].bone, m_Bone2, worldTargetTranslation, m_InvertDirection);