diff --git a/indra/llcommon/StackWalker.h b/indra/llcommon/StackWalker.h
index 5a5ed96e6ff6ed1d4af474796150a41476073b58..834f89c471ea13a090dc2773fcf66e86bac4d5d1 100644
--- a/indra/llcommon/StackWalker.h
+++ b/indra/llcommon/StackWalker.h
@@ -127,7 +127,7 @@ class StackWalker
 // in older compilers in order to use it... starting with VC7 we can declare it as "protected"
 protected:
 #endif
-	enum { STACKWALK_MAX_NAMELEN = 2048 }; // max name length for found symbols
+	enum { STACKWALK_MAX_NAMELEN = 4096 }; // max name length for found symbols
 
 protected:
   // Entry for each Callstack-Entry
diff --git a/indra/llprimitive/lldaeloader.cpp b/indra/llprimitive/lldaeloader.cpp
index df69607404372c2c3fb89fe307f6f088d0ad62a0..38b061dd798b7f0b8d0b31c5acdf1affe2069801 100644
--- a/indra/llprimitive/lldaeloader.cpp
+++ b/indra/llprimitive/lldaeloader.cpp
@@ -1189,7 +1189,7 @@ void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, do
 				S32 childCount = children.getCount();
 
 				//Process any children that are joints
-				//Not all children are joints, some code be ambient lights, cameras, geometry etc..
+				//Not all children are joints, some could be ambient lights, cameras, geometry etc..
 				for (S32 i = 0; i < childCount; ++i)
 				{
 					domNode* pNode = daeSafeCast<domNode>(children[i]);
@@ -1229,6 +1229,8 @@ void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, do
                         domNode* pJoint = daeSafeCast<domNode>( resolver.getElement() );
                         if ( pJoint )
                         {
+                            // FIXME this has a lot of overlap with processJointNode(), would be nice to refactor.
+
                             //Pull out the translate id and store it in the jointTranslations map
                             daeSIDResolver jointResolverA( pJoint, "./translate" );
                             domTranslate* pTranslateA = daeSafeCast<domTranslate>( jointResolverA.getElement() );
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index a82f92b01a18c8b9c30ef47339dc0b6fabeedffd..af10af98f267efec3c79acc4f248d7046df77e8f 100755
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -5299,9 +5299,13 @@ void LLVOAvatar::addAttachmentPosOverridesForObject(LLViewerObject *vo)
 	if ( vobj && vobj->isAttachment() && vobj->isMesh() && pSkinData )
 	{
 		const int bindCnt = pSkinData->mAlternateBindMatrix.size();								
-		if ( bindCnt > 0 )
+        const int jointCnt = pSkinData->mJointNames.size();
+        if ((bindCnt > 0) && (bindCnt != jointCnt))
+        {
+            LL_WARNS_ONCE() << "invalid mesh, bindCnt " << bindCnt << "!= jointCnt " << jointCnt << ", joint overrides will be ignored." << LL_ENDL;
+        }
+		if ((bindCnt > 0) && (bindCnt == jointCnt))
 		{					
-			const int jointCnt = pSkinData->mJointNames.size();
 			const F32 pelvisZOffset = pSkinData->mPelvisOffset;
 			const LLUUID& mesh_id = pSkinData->mMeshID;
 			bool fullRig = (jointCnt>=JOINT_COUNT_REQUIRED_FOR_FULLRIG) ? true : false;