diff --git a/indra/llmath/lltreenode.h b/indra/llmath/lltreenode.h
index c66bc26176130730e5da24c4cc0d0eb1e04ffe4e..0b479c4564fe6aa4946e87400b83e9985a5650d6 100755
--- a/indra/llmath/lltreenode.h
+++ b/indra/llmath/lltreenode.h
@@ -57,7 +57,14 @@ class LLTreeNode
 	virtual bool remove(T* data);
 	virtual void notifyRemoval(T* data);
 	virtual U32 getListenerCount()					{ return mListeners.size(); }
-	virtual LLTreeListener<T>* getListener(U32 index) const { return mListeners[index]; }
+	virtual LLTreeListener<T>* getListener(U32 index) const 
+	{
+		if(index < mListeners.size())
+		{
+			return mListeners[index]; 
+		}
+		return NULL;
+	}
 	virtual void addListener(LLTreeListener<T>* listener) { mListeners.push_back(listener); }
 
 protected:
diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp
index 47033afea3dbf861efe0ae0e7c49cff92b8a8b11..e1684c19df2dd183cf4d7a20b875c28671590f92 100644
--- a/indra/newview/llvieweroctree.cpp
+++ b/indra/newview/llvieweroctree.cpp
@@ -957,7 +957,7 @@ class LLSpatialClearOcclusionStateDiff : public LLSpatialClearOcclusionState
 	{
 		LLOcclusionCullingGroup* group = (LLOcclusionCullingGroup*) n->getListener(0);
 		
-		if (group->isOcclusionState(mState))
+		if (group && group->isOcclusionState(mState))
 		{
 			OctreeTraveler::traverse(n);
 		}