diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 98eeed09b3a7448bbf504dadb27a80bbce469f16..9db0f4fff8f4e47debec739f526cc08bad0611fe 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -180,7 +180,7 @@ if (LINUX)
       # this stops us requiring a really recent glibc at runtime
       add_definitions(-fno-stack-protector)
       # linking can be very memory-hungry, especially the final viewer link
-      set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory")
+      set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory,FORCE:MULTIPLE")
     endif (NOT STANDALONE)
   endif (VIEWER)
 
diff --git a/indra/llrender/llrendernavprim.cpp b/indra/llrender/llrendernavprim.cpp
index 3d76f08496b60f35f1b50d8808e16003b46b7b56..71e808d04eeca649a536539658fb51e182571e86 100644
--- a/indra/llrender/llrendernavprim.cpp
+++ b/indra/llrender/llrendernavprim.cpp
@@ -1,6 +1,6 @@
 /** 
  * @file LLRenderNavPrim.cpp
- * @brief 
+ * @brief Renderable primitives used by the pathing library
  *
  * $LicenseInfo:firstyear=2001&license=viewerlgpl$
  * Second Life Viewer Source Code
@@ -35,7 +35,7 @@
 //=============================================================================
 LLRenderNavPrim gRenderNav;
 //=============================================================================
-void LLRenderNavPrim::renderSegment( const LLVector3& start, const LLVector3& end, int color,bool overlayMode  ) const
+void LLRenderNavPrim::renderSegment( const LLVector3& start, const LLVector3& end, int color, bool overlayMode  ) const
 {	
 	LLGLSLShader::sNoFixedFunction = false;
 	LLColor4 colorA( color );	
@@ -54,7 +54,7 @@ void LLRenderNavPrim::renderSegment( const LLVector3& start, const LLVector3& en
 	glLineWidth(1.0f);	
 }
 //=============================================================================
-void LLRenderNavPrim::renderTri( const LLVector3& a, const LLVector3& b, const LLVector3& c, int color,bool overlayMode  ) const
+void LLRenderNavPrim::renderTri( const LLVector3& a, const LLVector3& b, const LLVector3& c, int color, bool overlayMode ) const
 {
 	glLineWidth(1.5f);	
 	if ( overlayMode )
@@ -101,3 +101,16 @@ void LLRenderNavPrim::renderNavMeshVB( LLVertexBuffer* pVBO, int vertCnt )
 	glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );	
 }
 //=============================================================================
+void LLRenderNavPrim::renderStar( const LLVector3& center, const float scale, int color ) const
+{	
+	for (int k=0; k<3; k++)
+	{
+		LLVector3 star, pt1, pt2;
+		star = LLVector3( 0.0f,0.0f,0.0f);
+		star[k] = 0.5f;
+		pt1 =  center + star;
+		pt2 =  center - star;	
+		renderSegment( pt1, pt2, color, false );
+	}
+}
+//=============================================================================
diff --git a/indra/llrender/llrendernavprim.h b/indra/llrender/llrendernavprim.h
index a30a14551def405537359c7ce773efbbe6c40094..d88fe656b7be9143fe3045f0249965abdfba38a5 100644
--- a/indra/llrender/llrendernavprim.h
+++ b/indra/llrender/llrendernavprim.h
@@ -40,11 +40,13 @@ class LLRenderNavPrim
 {
 public:
 	//Draw a line
-	void renderSegment( const LLVector3& start, const LLVector3& end, int color,bool overlayMode  ) const;
+	void renderSegment( const LLVector3& start, const LLVector3& end, int color, bool overlayMode  ) const;
 	//Draw simple tri
-	void renderTri( const LLVector3& a, const LLVector3& b, const LLVector3& c, int color,bool overlayMode  ) const;
+	void renderTri( const LLVector3& a, const LLVector3& b, const LLVector3& c, int color, bool overlayMode ) const;
 	//Draw the contents of vertex buffer
-	void renderNavMeshVB( LLVertexBuffer* pVBO, int vertCnt  );
+	void renderNavMeshVB( LLVertexBuffer* pVBO, int vertCnt );
+	//Draw a star
+	void renderStar( const LLVector3& center, const float scale, int color ) const;
 
 private:
 };
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 31081e32decfba6d0d2a43b2f9f06390e82a469f..314bd790ddf13062564ff622e74a45d2f4635e48 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1517,9 +1517,9 @@ if (WINDOWS)
         PROPERTIES
         # *TODO -reenable this once we get server usage sorted out
         #LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCLUDE:\"__tcmalloc\""
-        LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCLUDE:__tcmalloc"
-        LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO"
-        LINK_FLAGS_RELEASE ""
+        LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCLUDE:__tcmalloc /FORCE:MULTIPLE"
+  		LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO /FORCE:MULTIPLE"
+  		LINK_FLAGS_RELEASE "/FORCE:MULTIPLE"
         )
     if(USE_PRECOMPILED_HEADERS)
         set_target_properties(
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 7511208ae5b76a0c77a7b45f2858197aa2a5969e..f90c525f11f880820cffd24aa5afc428b1475d0c 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -104,6 +104,7 @@
 #include "lltoolpie.h"
 #include "llcurl.h"
 #include "llnotifications.h"
+#include "llpathinglib.h"
 
 #ifdef _DEBUG
 // Debug indices is disabled for now for debug performance - djs 4/24/02
@@ -6212,7 +6213,11 @@ void LLPipeline::resetVertexBuffers()
 
 	gSky.resetVertexBuffers();
 
-		LLVertexBuffer::cleanupClass();
+	if ( LLPathingLib::getInstance() )
+	{
+		LLPathingLib::getInstance()->cleanupVBOManger();
+	}
+	LLVertexBuffer::cleanupClass();
 
 	//delete all name pool caches
 	LLGLNamePool::cleanupPools();