diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h
index 3f846f13145034e0d26c33b5f50a09064ddff737..286fc43a77fbb77a9c7f8ed2d453d256419aba70 100644
--- a/indra/llcommon/llapr.h
+++ b/indra/llcommon/llapr.h
@@ -37,6 +37,9 @@
 	// If you get undefined symbols, find the appropriate
 	// Windows header file and include that in your .cpp file.
 	#define WIN32_LEAN_AND_MEAN
+	// do not define min() and max() macros, which collide with
+	// things like numeric_limits<T>
+	#define NOMINMAX
 	#include <winsock2.h>
 	#include <windows.h>
 #endif
diff --git a/indra/llcommon/llprocesslauncher.h b/indra/llcommon/llprocesslauncher.h
index 954c2491472eb2e17b11122fe7d95eeb53348fff..23e48b1823ee87c96cc108a75fa25a80b9f8790c 100644
--- a/indra/llcommon/llprocesslauncher.h
+++ b/indra/llcommon/llprocesslauncher.h
@@ -28,6 +28,7 @@
 #define LL_LLPROCESSLAUNCHER_H
 
 #if LL_WINDOWS
+#define NOMINMAX
 #include <windows.h>
 #endif
 
diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h
index 851a75629e184e60767390c843360156d7d8515a..b936fd30f8494a3b9701aa6fc939b948c4a93318 100644
--- a/indra/llrender/llglheaders.h
+++ b/indra/llrender/llglheaders.h
@@ -520,6 +520,7 @@ extern PFNGLSAMPLEMASKIPROC glSampleMaski;
 
 // windows gl headers depend on things like APIENTRY, so include windows.
 #define WIN32_LEAN_AND_MEAN
+#define NOMINMAX
 #include <winsock2.h>
 #include <windows.h>
 
diff --git a/indra/llui/llui.h b/indra/llui/llui.h
index 8cec1a16f406170e4a176f06b474552e888fac5e..af8f23965760f42b6b6eb11bc56011440c99fd1c 100644
--- a/indra/llui/llui.h
+++ b/indra/llui/llui.h
@@ -41,6 +41,7 @@
 #include <boost/signals2.hpp>
 #include "lllazyvalue.h"
 #include "llframetimer.h"
+#include <limits>
 
 // LLUIFactory
 #include "llsd.h"
@@ -150,27 +151,25 @@ class LLUI
 	//
 	// Classes
 	//
+	template <typename T>
+	struct RangeParams : public LLInitParam::Block<RangeParams<T> >
+	{
+		Optional<T>	minimum,
+					maximum;
+
+		RangeParams()
+		:	minimum("min", T()),
+			maximum("max", std::numeric_limits<T>::max())
+		{}
+	};
 
 	template <typename T>
 	struct Range 
 	{
 		typedef Range<T> self_t;
 
-		struct Params : public LLInitParam::Block<Params>
-		{
-			typename Optional<T>	minimum,
-									maximum;
-
-			Params()
-			:	minimum("min", 0),
-				maximum("max", S32_MAX)
-			{
-
-			}
-		};
-
 		// correct for inverted params
-		Range(const Params& p = Params())
+		Range(const RangeParams<T>& p = RangeParams<T>())
 			:	mMin(p.minimum),
 			mMax(p.maximum)
 		{
@@ -228,12 +227,12 @@ class LLUI
 	{
 		typedef Range<T> range_t;
 
-		struct Params : public LLInitParam::Block<Params, typename range_t::Params>
+		struct Params : public LLInitParam::Block<Params, RangeParams<T> >
 		{
-			Mandatory<S32> value;
+			Mandatory<T> value;
 
 			Params()
-			:	value("", 0)
+			:	value("", T())
 			{
 				addSynonym(value, "value");
 			}
diff --git a/indra/llwindow/lldragdropwin32.h b/indra/llwindow/lldragdropwin32.h
index 929e7f9e377f3a0d480e3b55047bb9fb35b193d0..63054bffec3998e6f7fe066f53ba2bfa2cf097cd 100644
--- a/indra/llwindow/lldragdropwin32.h
+++ b/indra/llwindow/lldragdropwin32.h
@@ -31,6 +31,7 @@
 #ifndef LL_LLDRAGDROP32_H
 #define LL_LLDRAGDROP32_H
 
+#define NOMINMAX
 #include <windows.h>
 #include <ole2.h>
 
@@ -54,6 +55,7 @@ class LLDragDropWin32
 #ifndef LL_LLDRAGDROP32_H
 #define LL_LLDRAGDROP32_H
 
+#define NOMINMAX
 #include <windows.h>
 #include <ole2.h>
 
diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h
index 387e4cbdb65a8767ecf8ddf220b4438669ff6111..dc1950fb315f8a081c78eea312a86386ee66b10b 100644
--- a/indra/llwindow/llwindowwin32.h
+++ b/indra/llwindow/llwindowwin32.h
@@ -29,6 +29,7 @@
 
 // Limit Windows API to small and manageable set.
 #define WIN32_LEAN_AND_MEAN
+#define NOMINMAX
 #include <winsock2.h>
 #include <windows.h>
 
diff --git a/indra/win_crash_logger/StdAfx.h b/indra/win_crash_logger/StdAfx.h
index ce70fe2994c5077cfa10acd4f2e489a309d99c55..71faf88bad8121bb48c868324cd0ad57c92dfa1a 100644
--- a/indra/win_crash_logger/StdAfx.h
+++ b/indra/win_crash_logger/StdAfx.h
@@ -37,7 +37,7 @@
 #endif // _MSC_VER > 1000
 
 #define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
-
+#define NOMINMAX				// don't define min and max macros
 
 // Windows Header Files:
 #include <windows.h>