diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp
index 6a8959517d8ede18f71b159c5dde9b696af585a9..282c859e9e79c6ba702992005446443745568c9b 100755
--- a/indra/llkdu/llimagej2ckdu.cpp
+++ b/indra/llkdu/llimagej2ckdu.cpp
@@ -1034,7 +1034,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
 				val = (kdu_int32)(sp->fval*scale16);
 				val = (val+128)>>8; // May be faster than true rounding
 				val += 128;
-				if (val & ((-1)<<8))
+				if (val & ((0xffffffffU)<<8))
 				{
 					val = (val < 0 ? 0 : 255);
 				}
@@ -1052,7 +1052,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
 				val = sp->ival;
 				val = (val+offset)>>downshift;
 				val += 128;
-				if (val & ((-1)<<8))
+				if (val & ((0xffffffffU)<<8))
 				{
 					val = (val < 0 ? 0 : 255);
 				}
@@ -1075,7 +1075,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
 					val += (1<<(KDU_FIX_POINT-8))>>1;
 					val >>= (KDU_FIX_POINT-8);
 					val += 128;
-					if (val & ((-1)<<8))
+					if (val & ((0xffffffffU)<<8))
 					{
 						val = (val < 0 ? 0 : 255);
 					}
@@ -1094,7 +1094,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
 					val = (val+offset)>>downshift;
 					val <<= upshift;
 					val += 128;
-					if (val & ((-1)<<8))
+					if (val & ((0xffffffffU)<<8))
 					{
 						val = (val < 0 ? 0 : 256 - (1<<upshift));
 					}
@@ -1116,7 +1116,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
 					val = sp->ival;
 					val = (val+offset)>>downshift;
 					val += 128;
-					if (val & ((-1)<<8))
+					if (val & ((0xffffffffU)<<8))
 					{
 						val = (val < 0 ? 0 : 255);
 					}
@@ -1132,7 +1132,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
 					val = sp->ival;
 					val <<= upshift;
 					val += 128;
-					if (val & ((-1)<<8))
+					if (val & ((0xffffffffU)<<8))
 					{
 						val = (val < 0 ? 0 : 256 - (1<<upshift));
 					}
diff --git a/indra/llmessage/llcoproceduremanager.cpp b/indra/llmessage/llcoproceduremanager.cpp
index f0fe1ab01b14d718b65c104baccb63dbd2cf6bb0..d4c0788b7d5ef272abb0e6c1e4c51e9988d6c7dd 100644
--- a/indra/llmessage/llcoproceduremanager.cpp
+++ b/indra/llmessage/llcoproceduremanager.cpp
@@ -36,7 +36,8 @@
 static std::map<std::string, U32> DefaultPoolSizes = 
     boost::assign::map_list_of
         (std::string("Upload"),  1)
-        (std::string("AIS"),    25);
+        (std::string("AIS"),     1);    
+        // *TODO: Rider for the moment keep AIS calls serialized otherwise the COF will tend to get out of sync.
 
 #define DEFAULT_POOL_SIZE 5
 
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 61b3b56d84b8f6f6312bcf2555db2cdfba2721b2..15f6fe56493aeeffd4499499b5a94a06606cc6d6 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -14490,7 +14490,7 @@
         <key>Type</key>
             <string>U32</string>
         <key>Value</key>
-            <integer>25</integer>
+            <integer>1</integer>
         </map>
     <key>PoolSizeUpload</key>
         <map>
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 8b84b1b89bb5e095ed7d6c07a426511c2aa46bc6..cc676550abe65783b024ef45b9fd0f5155cc51bb 100755
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -65,7 +65,12 @@
 #pragma warning (disable:4702)
 #endif
 
-#if 1
+namespace 
+{
+    const S32   BAKE_RETRY_MAX_COUNT = 5;
+    const F32   BAKE_RETRY_TIMEOUT = 2.0F;
+}
+
 // *TODO$: LLInventoryCallback should be deprecated to conform to the new boost::bind/coroutine model.
 // temp code in transition
 void doAppearanceCb(LLPointer<LLInventoryCallback> cb, LLUUID id)
@@ -73,8 +78,6 @@ void doAppearanceCb(LLPointer<LLInventoryCallback> cb, LLUUID id)
     if (cb.notNull())
         cb->fire(id);
 }
-#endif
-
 
 std::string self_av_string()
 {
@@ -3354,12 +3357,36 @@ LLSD LLAppearanceMgr::dumpCOF() const
 
 void LLAppearanceMgr::requestServerAppearanceUpdate()
 {
-    LLCoprocedureManager::CoProcedure_t proc = boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this, _1);
-    LLCoprocedureManager::instance().enqueueCoprocedure("AIS", "LLAppearanceMgr::serverAppearanceUpdateCoro", proc);
+    if (!mOutstandingAppearanceBakeRequest)
+    {
+#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE
+        mRerequestAppearanceBake = false;
+        LLCoprocedureManager::CoProcedure_t proc = boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this, _1);
+        LLCoprocedureManager::instance().enqueueCoprocedure("AIS", "LLAppearanceMgr::serverAppearanceUpdateCoro", proc);
+#else
+        LLCoros::instance().launch("serverAppearanceUpdateCoro", 
+            boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this));
+
+#endif
+    }
+    else
+    {
+        mRerequestAppearanceBake = true;
+    }
 }
 
+#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE
 void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter)
+#else
+void LLAppearanceMgr::serverAppearanceUpdateCoro()
+#endif
 {
+#ifndef APPEARANCEBAKE_AS_IN_AIS_QUEUE
+    LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(
+        new LLCoreHttpUtil::HttpCoroutineAdapter("serverAppearanceUpdateCoro", LLCore::HttpRequest::DEFAULT_POLICY_ID));
+#endif
+
+    mRerequestAppearanceBake = false;
     if (!gAgent.getRegion())
     {
         LL_WARNS("Avatar") << "Region not set, cannot request server appearance update" << LL_ENDL;
@@ -3386,57 +3413,57 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd
         return;
     }
 
-#if 0
-    static int reqcount = 0;
-    int r_count = ++reqcount;
-    LL_WARNS("Avatar") << "START: Server Bake request #" << r_count << "!" << LL_ENDL;
-#endif
-
-    // If we have already received an update for this or higher cof version, 
-    // put a warning in the log but request anyway.
-    S32 cofVersion = getCOFVersion();
-    S32 lastRcv = gAgentAvatarp->mLastUpdateReceivedCOFVersion;
-    S32 lastReq = gAgentAvatarp->mLastUpdateRequestCOFVersion;
-
-    LL_INFOS("Avatar") << "Requesting COF version " << cofVersion <<
-        " (Last Received:" << lastRcv << ")" <<
-        " (Last Requested:" << lastReq << ")" << LL_ENDL;
-
-    if ((cofVersion != LLViewerInventoryCategory::VERSION_UNKNOWN))
+    llcoro::suspend();
+    S32 retryCount(0);
+    bool bRetry;
+    do
     {
-        if (cofVersion < lastRcv)
+        BoolSetter outstanding(mOutstandingAppearanceBakeRequest);
+        
+        // If we have already received an update for this or higher cof version, 
+        // put a warning in the log and cancel the request.
+        S32 cofVersion = getCOFVersion();
+        S32 lastRcv = gAgentAvatarp->mLastUpdateReceivedCOFVersion;
+        S32 lastReq = gAgentAvatarp->mLastUpdateRequestCOFVersion;
+
+        LL_INFOS("Avatar") << "Requesting COF version " << cofVersion <<
+            " (Last Received:" << lastRcv << ")" <<
+            " (Last Requested:" << lastReq << ")" << LL_ENDL;
+
+        if (cofVersion == LLViewerInventoryCategory::VERSION_UNKNOWN)
         {
-            LL_WARNS("Avatar") << "Have already received update for cof version " << lastRcv
-                << " but requesting for " << cofVersion << LL_ENDL;
+            LL_WARNS("AVatar") << "COF version is unknown... not requesting until COF version is known." << LL_ENDL;
+            return;
         }
-        if (lastReq > cofVersion)
+        else
         {
-            LL_WARNS("Avatar") << "Request already in flight for cof version " << lastReq
-                << " but requesting for " << cofVersion << LL_ENDL;
+            if (cofVersion < lastRcv)
+            {
+                LL_WARNS("Avatar") << "Have already received update for cof version " << lastRcv
+                    << " but requesting for " << cofVersion << LL_ENDL;
+                return;
+            }
+            if (lastReq > cofVersion)
+            {
+                LL_WARNS("Avatar") << "Request already in flight for cof version " << lastReq
+                    << " but requesting for " << cofVersion << LL_ENDL;
+                return;
+            }
         }
-    }
-
-    // Actually send the request.
-    LL_DEBUGS("Avatar") << "Will send request for cof_version " << cofVersion << LL_ENDL;
 
-//  LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter(
-//      "UpdateAvatarAppearance", gAgent.getAgentPolicy()));
+        // Actually send the request.
+        LL_DEBUGS("Avatar") << "Will send request for cof_version " << cofVersion << LL_ENDL;
 
-    bool bRetry;
-    do
-    {
         bRetry = false;
         LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest());
 
-        S32 reqCofVersion = getCOFVersion();  // Treat COF version (gets set by AISAPI as authoritative, 
-                                                // not what the bake request tells us to use).
         if (gSavedSettings.getBOOL("DebugForceAppearanceRequestFailure"))
         {
-            reqCofVersion += 999;
+            cofVersion += 999;
             LL_WARNS("Avatar") << "Forcing version failure on COF Baking" << LL_ENDL;
         }
 
-        LL_INFOS() << "Requesting bake for COF version " << reqCofVersion << LL_ENDL;
+        LL_INFOS() << "Requesting bake for COF version " << cofVersion << LL_ENDL;
 
         LLSD postData;
         if (gSavedSettings.getBOOL("DebugAvatarExperimentalServerAppearanceUpdate"))
@@ -3445,10 +3472,10 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd
         }
         else
         {
-            postData["cof_version"] = reqCofVersion;
+            postData["cof_version"] = cofVersion;
         }
 
-        gAgentAvatarp->mLastUpdateRequestCOFVersion = reqCofVersion;
+        gAgentAvatarp->mLastUpdateRequestCOFVersion = cofVersion;
 
         LLSD result = httpAdapter->postAndSuspend(httpRequest, url, postData);
 
@@ -3466,14 +3493,30 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd
             // on multiple machines.
             if (result.has("expected"))
             {
+
                 S32 expectedCofVersion = result["expected"].asInteger();
+                LL_WARNS("Avatar") << "Server expected " << expectedCofVersion << " as COF version" << LL_ENDL;
+
                 bRetry = true;
                 // Wait for a 1/2 second before trying again.  Just to keep from asking too quickly.
-                llcoro::suspendUntilTimeout(0.5);
+                if (++retryCount > BAKE_RETRY_MAX_COUNT)
+                {
+                    LL_WARNS("Avatar") << "Bake retry count exceeded!" << LL_ENDL;
+                    break;
+                }
+                F32 timeout = pow(BAKE_RETRY_TIMEOUT, static_cast<float>(retryCount)) - 1.0;
 
-                LL_WARNS("Avatar") << "Server expected " << expectedCofVersion << " as COF version" << LL_ENDL;
+                LL_WARNS("Avatar") << "Bake retry #" << retryCount << " in " << timeout << " seconds." << LL_ENDL;
+
+                llcoro::suspendUntilTimeout(timeout); 
+                bRetry = true;
                 continue;
             }
+            else
+            {
+                LL_WARNS("Avatar") << "No retry attempted." << LL_ENDL;
+                break;
+            }
         }
 
         LL_DEBUGS("Avatar") << "succeeded" << LL_ENDL;
@@ -3484,10 +3527,11 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd
 
     } while (bRetry);
 
-#if 0
-    LL_WARNS("Avatar") << "END: Server Bake request #" << r_count << "!" << LL_ENDL;
-#endif
-
+    if (mRerequestAppearanceBake)
+    {   // A bake request came in while this one was still outstanding.  
+        // Requeue ourself for a later request.
+        requestServerAppearanceUpdate();
+    }
 }
 
 /*static*/
@@ -3855,7 +3899,9 @@ LLAppearanceMgr::LLAppearanceMgr():
 	mOutfitLocked(false),
 	mInFlightCounter(0),
 	mInFlightTimer(),
-	mIsInUpdateAppearanceFromCOF(false)
+	mIsInUpdateAppearanceFromCOF(false),
+    mOutstandingAppearanceBakeRequest(false),
+    mRerequestAppearanceBake(false)
 {
 	LLOutfitObserver& outfit_observer = LLOutfitObserver::instance();
 	// unlock outfit on save operation completed
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index b97f9018c094e68ae189537077df238aa0944a6c..bf181cb4add27777af9581ec8a2e0dd31ba76b4f 100755
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -228,7 +228,12 @@ class LLAppearanceMgr: public LLSingleton<LLAppearanceMgr>
 
 
 private:
+#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE
     void serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter);
+#else
+    void serverAppearanceUpdateCoro();
+#endif
+
     static void debugAppearanceUpdateCOF(const LLSD& content);
 
 	std::string		mAppearanceServiceURL;
@@ -255,6 +260,8 @@ class LLAppearanceMgr: public LLSingleton<LLAppearanceMgr>
 	bool mAttachmentInvLinkEnabled;
 	bool mOutfitIsDirty;
 	bool mIsInUpdateAppearanceFromCOF; // to detect recursive calls.
+    bool mOutstandingAppearanceBakeRequest; // A bake request is outstanding.  Do not overlap.
+    bool mRerequestAppearanceBake;
 
 	/**
 	 * Lock for blocking operations on outfit until server reply or timeout exceed