diff --git a/indra/llcommon/llsd.h b/indra/llcommon/llsd.h
index c1406cf73ff90f788298891a10b3eb2c169ac8fd..92a1fc58a511766d5c2ca02cb071913965981b50 100644
--- a/indra/llcommon/llsd.h
+++ b/indra/llcommon/llsd.h
@@ -30,7 +30,6 @@
 #include <map>
 #include <string>
 #include <vector>
-#include <type_traits>
 
 #include "stdtypes.h"
 
@@ -216,21 +215,15 @@ class LL_COMMON_API LLSD
 		void assign(const Date&);
 		void assign(const URI&);
 		void assign(const Binary&);
-
-		// support assignment from size_t et al.
-		template <typename VALUE,
-				  typename std::enable_if<std::is_integral<VALUE>::value &&
-										  ! std::is_same<VALUE, Boolean>::value,
-										  bool>::type = true>
-		void assign(VALUE v) { assign(Integer(narrow(v))); }
-		// support assignment from F32 et al.
-		template <typename VALUE,
-				  typename std::enable_if<std::is_floating_point<VALUE>::value,
-										  bool>::type = true>
-		void assign(VALUE v) { assign(Real(narrow(v))); }
-
-		template <typename VALUE>
-		LLSD& operator=(VALUE v)			{ assign(v); return *this; }
+		
+		LLSD& operator=(Boolean v)			{ assign(v); return *this; }
+		LLSD& operator=(Integer v)			{ assign(v); return *this; }
+		LLSD& operator=(Real v)				{ assign(v); return *this; }
+		LLSD& operator=(const String& v)	{ assign(v); return *this; }
+		LLSD& operator=(const UUID& v)		{ assign(v); return *this; }
+		LLSD& operator=(const Date& v)		{ assign(v); return *this; }
+		LLSD& operator=(const URI& v)		{ assign(v); return *this; }
+		LLSD& operator=(const Binary& v)	{ assign(v); return *this; }
 	//@}
 
 	/**
@@ -292,6 +285,7 @@ class LL_COMMON_API LLSD
 	//@{
 		LLSD(const char*);
 		void assign(const char*);
+		LLSD& operator=(const char* v) { assign(v); return *this; }
 	//@}
 	
 	/** @name Map Values */
diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 7c381161c92bac5bc7a4f2a617657c1196ac9984..d736aa6634879ca33fc27023000f539c59db6a8f 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -337,7 +337,7 @@ void LLNotificationForm::addElement(const std::string& type, const std::string&
 	element["name"] = name;
 	element["text"] = name;
 	element["value"] = value;
-	element["index"] = mFormData.size();
+	element["index"] = LLSD::Integer(mFormData.size());
 	element["enabled"] = enabled;
 	mFormData.append(element);
 }
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index d97ed61e115f323ca093576d0e5ffe026b9071b6..5266db5b3891bd2ca464bcb0db6291b40417f121 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -6284,7 +6284,7 @@ bool handle_lure_callback(const LLSD& notification, const LLSD& response)
 		// More than OFFER_RECIPIENT_LIMIT targets will overload the message
 		// producing an llerror.
 		LLSD args;
-		args["OFFERS"] = notification["payload"]["ids"].size();
+		args["OFFERS"] = LLSD::Integer(notification["payload"]["ids"].size());
 		args["LIMIT"] = static_cast<int>(OFFER_RECIPIENT_LIMIT);
 		LLNotificationsUtil::add("TooManyTeleportOffers", args);
 		return false;