diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp
index 7e255299c7db541b4773a87195a2310dc4935cc7..906f19203cfc6caa824586a2ffa604dc549431e5 100644
--- a/indra/llaudio/llaudiodecodemgr.cpp
+++ b/indra/llaudio/llaudiodecodemgr.cpp
@@ -800,7 +800,11 @@ BOOL LLAudioDecodeMgr::addDecodeRequest(const LLUUID &uuid)
 	{
 		// Just put it on the decode queue.
 		LL_DEBUGS("AudioEngine") << "addDecodeRequest for " << uuid << " has local asset file already" << LL_ENDL;
-        mImpl->mDecodeQueue.push_back(uuid);
+		// ...only add it if it's note already in the queue
+		if (std::find(mImpl->mDecodeQueue.begin(), mImpl->mDecodeQueue.end(), uuid) == mImpl->mDecodeQueue.end())
+		{
+			mImpl->mDecodeQueue.push_back(uuid);
+		}
 		return TRUE;
 	}
 
diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp
index fc670c88fe3fc5ef8ea9f86c1b161061f6c03c8c..e9647bbbb115385bcdf3f119eb8858dfc609e2e3 100644
--- a/indra/llaudio/llaudioengine.cpp
+++ b/indra/llaudio/llaudioengine.cpp
@@ -1911,6 +1911,16 @@ bool LLAudioData::load()
 		gAudiop->cleanupBuffer(mBufferp);
 		mBufferp = NULL;
 
+		if (!gDirUtilp->fileExists(wav_path))
+		{
+			mHasLocalData = false;
+			mHasDecodedData = false;
+			mHasCompletedDecode = false;
+			mHasDecodeFailed = false;
+			mHasWAVLoadFailed = false;
+			gAudiop->preloadSound(mID);
+		}
+
 		return false;
 	}
 	mBufferp->mAudioDatap = this;