diff --git a/indra/llcommon/llfasttimer.cpp b/indra/llcommon/llfasttimer.cpp
index 6f046c18ff4f785f552b15551ea39ab1a415665b..f4c87ab6f6bb966922405105d8e8914ffe243538 100755
--- a/indra/llcommon/llfasttimer.cpp
+++ b/indra/llcommon/llfasttimer.cpp
@@ -397,7 +397,7 @@ void TimeBlock::dumpCurTimes()
 		}
 
 		out_str << timerp->getName() << " " 
-			<< std::setprecision(3) << total_time.valueAs<LLUnits::Milliseconds>() << " ms, "
+			<< std::setprecision(3) << total_time.valueInUnits<LLUnits::Milliseconds>() << " ms, "
 			<< num_calls << " calls";
 
 		llinfos << out_str.str() << llendl;
diff --git a/indra/llcommon/llunit.h b/indra/llcommon/llunit.h
index 781a4ab7317a9bcb488a50f2208205390e9bed7b..2e4c0de28fd947bb2f2b256c6ab3877c82d3187e 100644
--- a/indra/llcommon/llunit.h
+++ b/indra/llcommon/llunit.h
@@ -74,10 +74,21 @@ struct LLUnit
 		return mValue;
 	}
 
+	void value(storage_t value)
+	{
+		mValue = value;
+	}
+
+	template<typename NEW_UNIT_TYPE> 
+	storage_t valueInUnits()
+	{
+		return LLUnit<storage_t, NEW_UNIT_TYPE>(*this).value();
+	}
+
 	template<typename NEW_UNIT_TYPE> 
-	STORAGE_TYPE valueAs()
+	void valueInUnits(storage_t value)
 	{
-		return LLUnit<STORAGE_TYPE, NEW_UNIT_TYPE>(*this).value();
+		*this = LLUnit<storage_t, NEW_UNIT_TYPE>(value);
 	}
 
 	void operator += (storage_t value)
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index b61889ccfa0116f127fa1a6f337567630bc0c41e..4037b5ebdd85107a6caa662aac0e55bc98ee2395 100755
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -1427,7 +1427,7 @@ void LLFastTimerView::updateTotalTime()
 		break;
 	}
 
-	mTotalTimeDisplay = LLUnits::Milliseconds::fromValue(llceil(mTotalTimeDisplay.valueAs<LLUnits::Milliseconds>() / 20.f) * 20.f);
+	mTotalTimeDisplay = LLUnits::Milliseconds::fromValue(llceil(mTotalTimeDisplay.valueInUnits<LLUnits::Milliseconds>() / 20.f) * 20.f);
 }
 
 void LLFastTimerView::drawBars()
diff --git a/indra/newview/llscenemonitor.cpp b/indra/newview/llscenemonitor.cpp
index 022a950ecebabff10dae28717d5bdcb375eb4af2..7fdee2b2add1cbce49074176fc5b72433868386c 100644
--- a/indra/newview/llscenemonitor.cpp
+++ b/indra/newview/llscenemonitor.cpp
@@ -642,7 +642,7 @@ void LLSceneMonitor::dumpToFile(std::string file_name)
 
 		for (S32 frame = 1; frame <= frame_count; frame++)
 		{
-			os << ", " << scene_load_recording.getPrevRecording(frame_count - frame).getMax(*it).valueAs<LLUnits::Kibibytes>();
+			os << ", " << scene_load_recording.getPrevRecording(frame_count - frame).getMax(*it).valueInUnits<LLUnits::Kibibytes>();
 		}
 
 		os << '\n';
diff --git a/indra/newview/lltextureinfo.cpp b/indra/newview/lltextureinfo.cpp
index 3ae85d56dada864daecde15729ffde6a0547a3ea..d467fd4d970e530deea8afca0eab2afc825f2b87 100755
--- a/indra/newview/lltextureinfo.cpp
+++ b/indra/newview/lltextureinfo.cpp
@@ -200,11 +200,11 @@ LLSD LLTextureInfo::getAverages()
 	}
 	else
 	{
-		averageDownloadRate = mRecording.getSum(sTextureDataDownloaded).valueAs<LLUnits::Bits>() / download_time.valueAs<LLUnits::Seconds>();
+		averageDownloadRate = mRecording.getSum(sTextureDataDownloaded).valueInUnits<LLUnits::Bits>() / download_time.valueInUnits<LLUnits::Seconds>();
 	}
 
 	averagedTextureData["bits_per_second"]             = averageDownloadRate;
-	averagedTextureData["bytes_downloaded"]            = mRecording.getSum(sTextureDataDownloaded).valueAs<LLUnits::Bytes>();
+	averagedTextureData["bytes_downloaded"]            = mRecording.getSum(sTextureDataDownloaded).valueInUnits<LLUnits::Bytes>();
 	averagedTextureData["texture_downloads_started"]   = mRecording.getSum(sTextureDownloadsStarted);
 	averagedTextureData["texture_downloads_completed"] = mRecording.getSum(sTextureDownloadsCompleted);
 	averagedTextureData["transport"]                   = mTextureDownloadProtocol;