diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h
index 286fc43a77fbb77a9c7f8ed2d453d256419aba70..3f846f13145034e0d26c33b5f50a09064ddff737 100644
--- a/indra/llcommon/llapr.h
+++ b/indra/llcommon/llapr.h
@@ -37,9 +37,6 @@
 	// 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 23e48b1823ee87c96cc108a75fa25a80b9f8790c..954c2491472eb2e17b11122fe7d95eeb53348fff 100644
--- a/indra/llcommon/llprocesslauncher.h
+++ b/indra/llcommon/llprocesslauncher.h
@@ -28,7 +28,6 @@
 #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 b936fd30f8494a3b9701aa6fc939b948c4a93318..851a75629e184e60767390c843360156d7d8515a 100644
--- a/indra/llrender/llglheaders.h
+++ b/indra/llrender/llglheaders.h
@@ -520,7 +520,6 @@ 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/lltoolbar.h b/indra/llui/lltoolbar.h
index 407cbde7d27461ae209349070c07fdfaa67918d7..3c317e10a2b5a01b506465f304dd516f0774a7ba 100644
--- a/indra/llui/lltoolbar.h
+++ b/indra/llui/lltoolbar.h
@@ -45,7 +45,7 @@ class LLToolBarButton : public LLButton
 public:
 	struct Params : public LLInitParam::Block<Params, LLButton::Params>
 	{
-		Optional<LLUI::Range<S32> >	button_width;
+		Optional<LLUI::RangeS32>	button_width;
 		Optional<S32>				desired_height;
 
 		Params()
@@ -67,7 +67,7 @@ class LLToolBarButton : public LLButton
 	LLCommandId		mId;
 	S32				mMouseDownX;
 	S32				mMouseDownY;
-	LLUI::Range<S32> mWidthRange;
+	LLUI::RangeS32	mWidthRange;
 	S32				mDesiredHeight;
 	bool						mIsDragged;
 	startdrag_callback_t		mStartDragItemCallback;
diff --git a/indra/llui/llui.h b/indra/llui/llui.h
index af8f23965760f42b6b6eb11bc56011440c99fd1c..28e84fa44410e55174ea478d1600f1786cc631c3 100644
--- a/indra/llui/llui.h
+++ b/indra/llui/llui.h
@@ -151,46 +151,43 @@ 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 
+	struct RangeS32 
 	{
-		typedef Range<T> self_t;
+		struct Params : public LLInitParam::Block<Params>
+		{
+			Optional<S32>	minimum,
+							maximum;
+
+			Params()
+			:	minimum("min", 0),
+				maximum("max", S32_MAX)
+			{}
+		};
 
 		// correct for inverted params
-		Range(const RangeParams<T>& p = RangeParams<T>())
-			:	mMin(p.minimum),
+		RangeS32(const Params& p = Params())
+		:	mMin(p.minimum),
 			mMax(p.maximum)
 		{
 			sanitizeRange();
 		}
 
-		Range(T minimum, T maximum)
-			:	mMin(minimum),
+		RangeS32(S32 minimum, S32 maximum)
+		:	mMin(minimum),
 			mMax(maximum)
 		{
 			sanitizeRange();
 		}
 
-		S32 clamp(T input)
+		S32 clamp(S32 input)
 		{
 			if (input < mMin) return mMin;
 			if (input > mMax) return mMax;
 			return input;
 		}
 
-		void setRange(T minimum, T maximum)
+		void setRange(S32 minimum, S32 maximum)
 		{
 			mMin = minimum;
 			mMax = maximum;
@@ -200,7 +197,7 @@ class LLUI
 		S32 getMin() { return mMin; }
 		S32 getMax() { return mMax; }
 
-		bool operator==(const self_t& other) const
+		bool operator==(const RangeS32& other) const
 		{
 			return mMin == other.mMin 
 				&& mMax == other.mMax;
@@ -218,60 +215,55 @@ class LLUI
 		}
 
 
-		T	mMin,
+		S32	mMin,
 			mMax;
 	};
 
-	template<typename T>
-	struct ClampedValue : public Range<T>
+	struct ClampedS32 : public RangeS32
 	{
-		typedef Range<T> range_t;
-
-		struct Params : public LLInitParam::Block<Params, RangeParams<T> >
+		struct Params : public LLInitParam::Block<Params, RangeS32::Params>
 		{
-			Mandatory<T> value;
+			Mandatory<S32> value;
 
 			Params()
-			:	value("", T())
+			:	value("", 0)
 			{
 				addSynonym(value, "value");
 			}
 		};
 
-		ClampedValue(const Params& p)
-		:	range_t(p)
+		ClampedS32(const Params& p)
+		:	RangeS32(p)
 		{}
 
-		ClampedValue(const range_t& range)
-		:	range_t(range)
+		ClampedS32(const RangeS32& range)
+		:	RangeS32(range)
 		{
 			// set value here, after range has been sanitized
 			mValue = clamp(0);
 		}
 
-		ClampedValue(T value, const range_t& range = range_t())
-		:	range_t(range)
+		ClampedS32(S32 value, const RangeS32& range = RangeS32())
+		:	RangeS32(range)
 		{
 			mValue = clamp(value);
 		}
 
-		T get()
+		S32 get()
 		{
 			return mValue;
 		}
 
-		void set(T value)
+		void set(S32 value)
 		{
 			mValue = clamp(value);
 		}
 
 
 	private:
-		T mValue;
+		S32 mValue;
 	};
 
-	typedef ClampedValue<S32> ClampedS32;
-
 	//
 	// Methods
 	//
diff --git a/indra/llwindow/lldragdropwin32.h b/indra/llwindow/lldragdropwin32.h
index 63054bffec3998e6f7fe066f53ba2bfa2cf097cd..929e7f9e377f3a0d480e3b55047bb9fb35b193d0 100644
--- a/indra/llwindow/lldragdropwin32.h
+++ b/indra/llwindow/lldragdropwin32.h
@@ -31,7 +31,6 @@
 #ifndef LL_LLDRAGDROP32_H
 #define LL_LLDRAGDROP32_H
 
-#define NOMINMAX
 #include <windows.h>
 #include <ole2.h>
 
@@ -55,7 +54,6 @@ 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 dc1950fb315f8a081c78eea312a86386ee66b10b..387e4cbdb65a8767ecf8ddf220b4438669ff6111 100644
--- a/indra/llwindow/llwindowwin32.h
+++ b/indra/llwindow/llwindowwin32.h
@@ -29,7 +29,6 @@
 
 // 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 71faf88bad8121bb48c868324cd0ad57c92dfa1a..35976658acb9b525c45d8a75842ac8bb6d8e92d9 100644
--- a/indra/win_crash_logger/StdAfx.h
+++ b/indra/win_crash_logger/StdAfx.h
@@ -37,7 +37,6 @@
 #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>