diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index af3a409944657add96b4a4a936efe304dd309c7e..9f764c6e41eef6a473fd9f97b34cba870d03b194 100755
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -3779,6 +3779,7 @@ void LLAgent::sendAgentSetAppearance()
 		return;
 	}
 
+	gAgentAvatarp->sendAppearanceChangeMetrics();
 	llinfos << gAgentAvatarp->avString() << "TAT: Sent AgentSetAppearance: " << gAgentAvatarp->getBakedStatusForPrintout() << llendl;
 	//dumpAvatarTEs( "sendAgentSetAppearance()" );
 
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 27d499b9c445771215c85e728c292904ec12558d..4e75582a935cc15d45759695d518119ee40c2cd7 100755
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -2089,6 +2089,7 @@ const std::string LLVOAvatarSelf::debugDumpAllLocalTextureDataInfo() const
 // Dump avatar metrics data.
 LLSD LLVOAvatarSelf::metricsData()
 {
+	// runway - add region info
 	LLSD result;
 	result["id"] = getID();
 	result["rez_status"] = getRezzedStatus();
@@ -2109,6 +2110,53 @@ LLSD LLVOAvatarSelf::metricsData()
 	return result;
 }
 
+class ViewerAppearanceChangeMetricsResponder: public LLCurl::Responder
+{
+public:
+	ViewerAppearanceChangeMetricsResponder()
+	{
+	}
+
+	virtual void completed(U32 status,
+						   const std::string& reason,
+						   const LLSD& content)
+	{
+		if (isGoodStatus(status))
+		{
+			llinfos << "OK" << llendl;
+			result(content);
+		}
+		else
+		{
+			llwarns << "Failed " << status << " reason " << reason << llendl;
+			error(status,reason);
+		}
+	}
+};
+
+void LLVOAvatarSelf::sendAppearanceChangeMetrics()
+{
+	gAgentAvatarp->stopAllPhases();
+
+	LLSD msg = metricsData();
+	msg["message"] = "ViewerAppearanceChangeMetrics";
+
+	llinfos << "message: " << msg << llendl;
+	std::string	caps_url;
+	if (getRegion())
+	{
+		// runway - change here to activate.
+		caps_url = "";//getRegion()->getCapability("ViewerMetrics");
+	}
+	if (!caps_url.empty())
+	{
+		LLCurlRequest::headers_t headers;
+		LLHTTPClient::post(caps_url,
+							msg,
+							new ViewerAppearanceChangeMetricsResponder);
+	}
+}
+
 const LLUUID& LLVOAvatarSelf::grabBakedTexture(EBakedTextureIndex baked_index) const
 {
 	if (canGrabBakedTexture(baked_index))
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index c9098f174c2d339dafef9a9635200837fa4e7cc0..fc1b602764bacc660920ec5e70bb9855ab99d253 100755
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -370,6 +370,7 @@ class LLVOAvatarSelf :
 	const std::string		debugDumpLocalTextureDataInfo(const LLTexLayerSet* layerset) const; // Lists out state of this particular baked texture layer
 	const std::string		debugDumpAllLocalTextureDataInfo() const; // Lists out which baked textures are at highest LOD
 	LLSD					metricsData();
+	void					sendAppearanceChangeMetrics(); // send data associated with completing a change.
 private:
 	LLFrameTimer    		mDebugSelfLoadTimer;
 	F32						mDebugTimeWearablesLoaded;