diff --git a/indra/llmessage/llcoproceduremanager.cpp b/indra/llmessage/llcoproceduremanager.cpp
index c50d2bfd4132e1ac1c1493bcf664fa7e643b66ea..b94ec541e9b142eb01933e7b2889bf67a0639763 100644
--- a/indra/llmessage/llcoproceduremanager.cpp
+++ b/indra/llmessage/llcoproceduremanager.cpp
@@ -140,11 +140,22 @@ LLCoprocedureManager::~LLCoprocedureManager()
 
 void LLCoprocedureManager::initializePool(const std::string &poolName)
 {
+    poolMap_t::iterator it = mPoolMap.find(poolName);
+
+    if (it != mPoolMap.end())
+    {
+        // Pools are not supposed to be initialized twice
+        // Todo: ideally restrict init to STATE_FIRST
+        LL_ERRS() << "Pool is already present " << poolName << LL_ENDL;
+        return;
+    }
+
     // Attempt to look up a pool size in the configuration.  If found use that
     std::string keyName = "PoolSize" + poolName;
     int size = 0;
 
     LL_ERRS_IF(poolName.empty(), "CoprocedureManager") << "Poolname must not be empty" << LL_ENDL;
+    LL_INFOS("CoprocedureManager") << "Initializing pool " << poolName << LL_ENDL;
 
     if (mPropertyQueryFn)
     {
diff --git a/indra/newview/llviewerassetstorage.cpp b/indra/newview/llviewerassetstorage.cpp
index b345396c2f118e7d9a7410870613840000a2b8cc..19f2456ae6afa84067f07c25dedead2b8ffa68a0 100644
--- a/indra/newview/llviewerassetstorage.cpp
+++ b/indra/newview/llviewerassetstorage.cpp
@@ -115,6 +115,7 @@ LLViewerAssetStorage::LLViewerAssetStorage(LLMessageSystem *msg, LLXferManager *
       mCountSucceeded(0),
       mTotalBytesFetched(0)
 {
+    LLCoprocedureManager::instance().initializePool(VIEWER_ASSET_STORAGE_CORO_POOL);
 }