diff --git a/Configure.h.in b/Configure.h.in
index 3f46e22a4ad1e76cece1a992ac99790a9a604ce2..4a755aee610b5ff812867709b4a3e014527aed29 100644
--- a/Configure.h.in
+++ b/Configure.h.in
@@ -25,10 +25,37 @@
 # define @KWSYS_NAMESPACE@_EXPORT
 #endif
 
-/* Disable useless warnings.  */
+/* Enable warnings that are off by default but are useful.  */
+#if !defined(@KWSYS_NAMESPACE@_NO_WARNING_ENABLE)
+# if defined(_MSC_VER)
+#  pragma warning ( default : 4263 ) /* no override, call convention differs */
+# endif
+#endif
+
+/* Disable warnings that are on by default but occur in valid code.  */
 #if !defined(@KWSYS_NAMESPACE@_NO_WARNING_DISABLE)
 # if defined(_MSC_VER)
-#  pragma warning (disable: 4514) /* Unreferenced inline function removed.  */
+#  pragma warning (disable: 4097) /* typedef is synonym for class */
+#  pragma warning (disable: 4127) /* conditional expression is constant */
+#  pragma warning (disable: 4244) /* possible loss in conversion */
+#  pragma warning (disable: 4251) /* missing DLL-interface */
+#  pragma warning (disable: 4305) /* truncation from type1 to type2 */
+#  pragma warning (disable: 4309) /* truncation of constant value */
+#  pragma warning (disable: 4514) /* unreferenced inline function */
+#  pragma warning (disable: 4706) /* assignment in conditional expression */
+#  pragma warning (disable: 4710) /* function not inlined */
+#  pragma warning (disable: 4786) /* identifier truncated in debug info */
+# endif
+#endif
+
+/* MSVC 6.0 in release mode will warn about code it produces with its
+   optimizer.  Disable the warnings specifically for this
+   configuration.  Real warnings will be revealed by a debug build or
+   by other compilers.  */
+#if !defined(@KWSYS_NAMESPACE@_NO_WARNING_DISABLE_BOGUS)
+# if defined(_MSC_VER) && (_MSC_VER < 1300) && defined(NDEBUG)
+#  pragma warning ( disable : 4701 ) /* Variable may be used uninitialized.  */
+#  pragma warning ( disable : 4702 ) /* Unreachable code.  */
 # endif
 #endif