diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index 553b26f34764543f29a1726539d57c179caa4518..b98ce39da85e2a784d175138a7059c64eb2edda8 100644
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -2374,7 +2374,25 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size)
 		LL_DEBUGS("MeshStreaming") << "Failed to unzip LLSD blob for LoD with code " << uzip_result << " , will probably fetch from sim again." << LL_ENDL;
 		return false;
 	}
-	
+	return unpackVolumeFacesInternal(mdl);
+}
+
+bool LLVolume::unpackVolumeFaces(U8* in_data, S32 size)
+{
+	//input stream is now pointing at a zlib compressed block of LLSD
+	//decompress block
+	LLSD mdl;
+	U32 uzip_result = LLUZipHelper::unzip_llsd(mdl, in_data, size);
+	if (uzip_result != LLUZipHelper::ZR_OK)
+	{
+		LL_DEBUGS("MeshStreaming") << "Failed to unzip LLSD blob for LoD with code " << uzip_result << " , will probably fetch from sim again." << LL_ENDL;
+		return false;
+	}
+	return unpackVolumeFacesInternal(mdl);
+}
+
+bool LLVolume::unpackVolumeFacesInternal(const LLSD& mdl)
+{
 	{
 		U32 face_count = mdl.size();
 
diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h
index a927e65bbe3363d37c094d4473e4e263eb97df30..0dcfa7844d91d8caecf3488d497b5396dc0bae8a 100644
--- a/indra/llmath/llvolume.h
+++ b/indra/llmath/llvolume.h
@@ -1086,6 +1086,11 @@ class LLVolume : public LLRefCount
 	void createVolumeFaces();
 public:
 	bool unpackVolumeFaces(std::istream& is, S32 size);
+	bool unpackVolumeFaces(U8* in_data, S32 size);
+private:
+	bool unpackVolumeFacesInternal(const LLSD& mdl);
+
+public:
 
 	void setMeshAssetLoaded(BOOL loaded);
 	BOOL isMeshAssetLoaded();