diff --git a/indra/llcommon/lltracerecording.cpp b/indra/llcommon/lltracerecording.cpp
index e7ed55e8aef242ab4710d452ef9ffaf868d371ae..e31e36cb27bee7b88890572a1630dcf4c46eab97 100644
--- a/indra/llcommon/lltracerecording.cpp
+++ b/indra/llcommon/lltracerecording.cpp
@@ -58,10 +58,6 @@ Recording::Recording( const Recording& other )
 	mStackTimers       = other.mStackTimers;
 
 	LLStopWatchControlsMixin::initTo(other.getPlayState());
-	if (other.isStarted())
-	{
-		handleStart();
-	}
 }
 
 
@@ -127,6 +123,15 @@ bool Recording::isPrimary() const
 	return mCounts->isPrimary();
 }
 
+void Recording::makeUnique()
+{
+	mCountsFloat.makeUnique();
+	mMeasurementsFloat.makeUnique();
+	mCounts.makeUnique();
+	mMeasurements.makeUnique();
+	mStackTimers.makeUnique();
+}
+
 void Recording::appendRecording( const Recording& other )
 {
 	mCountsFloat.write()->addSamples(*other.mCountsFloat);
diff --git a/indra/llcommon/lltracerecording.h b/indra/llcommon/lltracerecording.h
index efc54d240fbdbec262ced2d722d3c266eb5c45b3..e5a21a2d3824c0f71248dfc1fb997defe12697e8 100644
--- a/indra/llcommon/lltracerecording.h
+++ b/indra/llcommon/lltracerecording.h
@@ -112,6 +112,8 @@ namespace LLTrace
 		void makePrimary();
 		bool isPrimary() const;
 
+		void makeUnique();
+
 		void appendRecording(const Recording& other);
 
 		void update();
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 713ae789a7dc573c9d09f86dd882d363cada89b0..fb95c9ec5b2d81eabd1532ebfe64005a11bfc32f 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -438,7 +438,7 @@ LLAppViewer::LLUpdaterInfo *LLAppViewer::sUpdaterInfo = NULL ;
 //----------------------------------------------------------------------------
 // Metrics logging control constants
 //----------------------------------------------------------------------------
-static const F32 METRICS_INTERVAL_DEFAULT = 30.0;
+static const F32 METRICS_INTERVAL_DEFAULT = 600.0;
 static const F32 METRICS_INTERVAL_QA = 30.0;
 static F32 app_metrics_interval = METRICS_INTERVAL_DEFAULT;
 static bool app_metrics_qa_mode = false;
diff --git a/indra/newview/llviewerassetstats.cpp b/indra/newview/llviewerassetstats.cpp
index d79d98aaaf025550f7e16349e0c7a10c4d42605e..58936c3220834ad0e23fa7aadff21088aeb45057 100644
--- a/indra/newview/llviewerassetstats.cpp
+++ b/indra/newview/llviewerassetstats.cpp
@@ -250,9 +250,18 @@ LLViewerAssetStats::LLViewerAssetStats(const LLViewerAssetStats & src)
 {
 	src.mCurRecording->update();
 	mRegionRecordings = src.mRegionRecordings;
-	
+
 	mCurRecording = &mRegionRecordings[mRegionHandle];
 	mCurRecording->stop();
+
+	// assume this is being passed to another thread, so make sure we have unique copies of recording data
+	for (PerRegionRecordingContainer::iterator it = mRegionRecordings.begin(), end_it = mRegionRecordings.end();
+		it != end_it;
+		++it)
+	{
+		it->second.makeUnique();
+	}
+
 	LLStopWatchControlsMixin::initTo(src.getPlayState());
 }