diff --git a/indra/newview/llappcorehttp.cpp b/indra/newview/llappcorehttp.cpp
index deda0ccb41c9ea53bd1a1e9e57bd98050794f1a5..d097f18d61ca29ed18e167e0267c104e7ba096a4 100755
--- a/indra/newview/llappcorehttp.cpp
+++ b/indra/newview/llappcorehttp.cpp
@@ -42,9 +42,9 @@
 const F64 LLAppCoreHttp::MAX_THREAD_WAIT_TIME(10.0);
 const long LLAppCoreHttp::PIPELINING_DEPTH(5L);
 
+//  Default and dynamic values for classes
 static const struct
 {
-	LLAppCoreHttp::EAppPolicy	mPolicy;
 	U32							mDefault;
 	U32							mMin;
 	U32							mMax;
@@ -52,40 +52,40 @@ static const struct
 	bool						mPipelined;
 	std::string					mKey;
 	const char *				mUsage;
-} init_data[] =					//  Default and dynamic values for classes
+} init_data[LLAppCoreHttp::AP_COUNT] =
 {
-	{
-		LLAppCoreHttp::AP_DEFAULT,			8,		8,		8,		0,		false,
+	{ // AP_DEFAULT
+		8,		8,		8,		0,		false,
 		"",
 		"other"
 	},
-	{
-		LLAppCoreHttp::AP_TEXTURE,			8,		1,		12,		0,		true,	
+	{ // AP_TEXTURE
+		4,		1,		12,		0,		true,	
 		"TextureFetchConcurrency",
 		"texture fetch"
 	},
-	{
-		LLAppCoreHttp::AP_MESH1,			32,		1,		128,	100,	false,
+	{ // AP_MESH1
+		32,		1,		128,	100,	false,
 		"MeshMaxConcurrentRequests",
 		"mesh fetch"
 	},
-	{
-		LLAppCoreHttp::AP_MESH2,			8,		1,		32,		100,	true,	
+	{ // AP_MESH2
+		4,		1,		32,		100,	true,	
 		"Mesh2MaxConcurrentRequests",
 		"mesh2 fetch"
 	},
-	{
-		LLAppCoreHttp::AP_LARGE_MESH,		2,		1,		8,		0,		false,
+	{ // AP_LARGE_MESH
+		2,		1,		8,		0,		false,
 		"",
 		"large mesh fetch"
 	},
-	{
-		LLAppCoreHttp::AP_UPLOADS,			2,		1,		8,		0,		false,
+	{ // AP_UPLOADS 
+		2,		1,		8,		0,		false,
 		"",
 		"asset upload"
 	},
-	{
-		LLAppCoreHttp::AP_LONG_POLL,		32,		32,		32,		0,		false,
+	{ // AP_LONG_POLL
+		32,		32,		32,		0,		false,
 		"",
 		"long poll"
 	}
@@ -173,9 +173,10 @@ void LLAppCoreHttp::init()
 	mHttpClasses[AP_DEFAULT].mPolicy = LLCore::HttpRequest::DEFAULT_POLICY_ID;
 
 	// Setup additional policies based on table and some special rules
+	llassert(LL_ARRAY_SIZE(init_data) == AP_COUNT);
 	for (int i(0); i < LL_ARRAY_SIZE(init_data); ++i)
 	{
-		const EAppPolicy app_policy(init_data[i].mPolicy);
+		const EAppPolicy app_policy(static_cast<EAppPolicy>(i));
 
 		if (AP_DEFAULT == app_policy)
 		{
@@ -301,7 +302,7 @@ void LLAppCoreHttp::refreshSettings(bool initial)
 	
 	for (int i(0); i < LL_ARRAY_SIZE(init_data); ++i)
 	{
-		const EAppPolicy app_policy(init_data[i].mPolicy);
+		const EAppPolicy app_policy(static_cast<EAppPolicy>(i));
 
 		if (initial)
 		{
@@ -326,6 +327,10 @@ void LLAppCoreHttp::refreshSettings(bool initial)
 			if (mPipelined && init_data[i].mPipelined)
 			{
 				// Pipelining election is currently static (init-time).
+				// Making it dynamic isn't too hard in the SL code but verifying
+				// that libcurl handles the on-to-off transition while holding
+				// outstanding requests is something that should be tested.
+				
 				status = LLCore::HttpRequest::setStaticPolicyOption(LLCore::HttpRequest::PO_PIPELINING_DEPTH,
 																	mHttpClasses[app_policy].mPolicy,
 																	PIPELINING_DEPTH,
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index c91ae975ead743ac0125c56aa447077cb0c4b444..74eb6015f23188884e910ccdb312d31225a29126 100755
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -338,14 +338,17 @@ static LLFastTimer::DeclareTimer FTM_MESH_FETCH("Mesh Fetch");
 LLMeshRepository gMeshRepo;
 
 const S32 MESH_HEADER_SIZE = 4096;                      // Important:  assumption is that headers fit in this space
+
 const S32 REQUEST_HIGH_WATER_MIN = 32;					// Limits for GetMesh regions
 const S32 REQUEST_HIGH_WATER_MAX = 150;					// Should remain under 2X throttle
 const S32 REQUEST_LOW_WATER_MIN = 16;
 const S32 REQUEST_LOW_WATER_MAX = 75;
+
 const S32 REQUEST2_HIGH_WATER_MIN = 32;					// Limits for GetMesh2 regions
 const S32 REQUEST2_HIGH_WATER_MAX = 100;
 const S32 REQUEST2_LOW_WATER_MIN = 16;
 const S32 REQUEST2_LOW_WATER_MAX = 50;
+
 const U32 LARGE_MESH_FETCH_THRESHOLD = 1U << 21;		// Size at which requests goes to narrow/slow queue
 const long SMALL_MESH_XFER_TIMEOUT = 120L;				// Seconds to complete xfer, small mesh downloads
 const long LARGE_MESH_XFER_TIMEOUT = 600L;				// Seconds to complete xfer, large downloads
@@ -3203,7 +3206,9 @@ void LLMeshRepository::notifyLoadedMeshes()
 		// we'll increase this.  See llappcorehttp and llcorehttp for
 		// discussion on connection strategies.
 		LLAppCoreHttp & app_core_http(LLAppViewer::instance()->getAppCoreHttp());
-		S32 scale(app_core_http.isPipelined(LLAppCoreHttp::AP_MESH2) ? 10 : 5);
+		S32 scale(app_core_http.isPipelined(LLAppCoreHttp::AP_MESH2)
+				  ? (2 * LLAppCoreHttp::PIPELINING_DEPTH)
+				  : 5);
 
 		LLMeshRepoThread::sMaxConcurrentRequests = gSavedSettings.getU32("Mesh2MaxConcurrentRequests");
 		LLMeshRepoThread::sRequestHighWater = llclamp(scale * S32(LLMeshRepoThread::sMaxConcurrentRequests),
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index ee11e7b47b34ea6ba01f4689a6fd18bd03dee59c..ecaf5f8d061a2d5eedd798d86f86063e0aee82de 100755
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -2516,6 +2516,8 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
 	mHttpPolicyClass = app_core_http.getPolicy(LLAppCoreHttp::AP_TEXTURE);
 	if (app_core_http.isPipelined(LLAppCoreHttp::AP_TEXTURE))
 	{
+		// Init-time election that will have to change for
+		// support of dynamic changes to the pipelining enable flag.
 		mHttpHighWater = HTTP_PIPE_REQUESTS_HIGH_WATER;
 		mHttpLowWater = HTTP_PIPE_REQUESTS_LOW_WATER;
 	}