diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 5ea847599b65f30a5b47b837565fc70ec7a8e1da..21ca2a86d05dcd507c06954f163a6e4f756f5c2b 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -14406,6 +14406,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>LogWearableAssetSave</key>
+    <map>
+      <key>Comment</key>
+      <string>Save copy of saved wearables to log dir</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>LogTextureDownloadsToViewerLog</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llviewerwearable.cpp b/indra/newview/llviewerwearable.cpp
index 0f73515b5d8331909708758fa9a2baa8b14425b0..8d482b2e34eb4b2f820c18bcc29bea056311e9f0 100755
--- a/indra/newview/llviewerwearable.cpp
+++ b/indra/newview/llviewerwearable.cpp
@@ -70,7 +70,7 @@ class LLOverrideBakedTextureUpdate
 };
 
 // Private local functions
-static std::string asset_id_to_filename(const LLUUID &asset_id);
+static std::string asset_id_to_filename(const LLUUID &asset_id, const ELLPath dir_spec);
 
 LLViewerWearable::LLViewerWearable(const LLTransactionID& transaction_id) :
 	LLWearable(),
@@ -508,7 +508,7 @@ void LLViewerWearable::saveNewAsset() const
 //	LL_INFOS() << "LLViewerWearable::saveNewAsset() type: " << getTypeName() << LL_ENDL;
 	//LL_INFOS() << *this << LL_ENDL;
 
-	const std::string filename = asset_id_to_filename(mAssetID);
+	const std::string filename = asset_id_to_filename(mAssetID, LL_PATH_CACHE);
 	if(! exportFile(filename))
 	{
 		std::string buffer = llformat("Unable to save '%s' to wearable file.", mName.c_str());
@@ -520,6 +520,12 @@ void LLViewerWearable::saveNewAsset() const
 		return;
 	}
 
+    if (gSavedSettings.getBOOL("LogWearableAssetSave"))
+    {
+        const std::string log_filename = asset_id_to_filename(mAssetID, LL_PATH_LOGS);
+        exportFile(log_filename);
+    }
+
 	// save it out to database
 	if( gAssetStorage )
 	{
@@ -568,7 +574,7 @@ void LLViewerWearable::onSaveNewAssetComplete(const LLUUID& new_asset_id, void*
 	}
 
 	// Delete temp file
-	const std::string src_filename = asset_id_to_filename(new_asset_id);
+	const std::string src_filename = asset_id_to_filename(new_asset_id, LL_PATH_CACHE);
 	LLFile::remove(src_filename);
 
 	// delete the context data
@@ -605,10 +611,10 @@ std::ostream& operator<<(std::ostream &s, const LLViewerWearable &w)
 	return s;
 }
 
-std::string asset_id_to_filename(const LLUUID &asset_id)
+std::string asset_id_to_filename(const LLUUID &asset_id, const ELLPath dir_spec)
 {
 	std::string asset_id_string;
 	asset_id.toString(asset_id_string);
-	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE,asset_id_string) + ".wbl";	
+	std::string filename = gDirUtilp->getExpandedFilename(dir_spec,asset_id_string) + ".wbl";	
 	return filename;
 }