diff --git a/indra/llui/llsdparam.cpp b/indra/llui/llsdparam.cpp
index 6fa90933a4ccf8ec436baeafe20b5de979c1fbb8..0e29873bb01403bacc492661f48a7c1d88bf91fd 100644
--- a/indra/llui/llsdparam.cpp
+++ b/indra/llui/llsdparam.cpp
@@ -36,6 +36,8 @@ static 	LLInitParam::Parser::parser_write_func_map_t sWriteFuncs;
 static 	LLInitParam::Parser::parser_inspect_func_map_t sInspectFuncs;
 static const LLSD NO_VALUE_MARKER;
 
+LLFastTimer::DeclareTimer FTM_SD_PARAM_ADAPTOR("LLSD to LLInitParam conversion");
+
 //
 // LLParamSDParser
 //
diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h
index c1cfa98399f7e6ad9c69e28b47a429c59e3d085f..3dfc6d020ee33ada34bf74a17145ef8f85533786 100644
--- a/indra/llui/llsdparam.h
+++ b/indra/llui/llsdparam.h
@@ -91,6 +91,8 @@ typedef LLInitParam::Parser parser_t;
 	LLSD*					mCurWriteSD;
 };
 
+
+extern LLFastTimer::DeclareTimer FTM_SD_PARAM_ADAPTOR;
 template<typename T>
 class LLSDParamAdapter : public T
 {
@@ -98,8 +100,11 @@ class LLSDParamAdapter : public T
 	LLSDParamAdapter() {}
 	LLSDParamAdapter(const LLSD& sd)
 	{
+		LLFastTimer _(FTM_SD_PARAM_ADAPTOR);
 		LLParamSDParser parser;
-		parser.readSD(sd, *this);
+		// don't spam for implicit parsing of LLSD, as we want to allow arbitrary freeform data and ignore most of it
+		bool parse_silently = true;
+		parser.readSD(sd, *this, parse_silently);
 	}
 
 	operator LLSD() const