diff --git a/Modules/CMakeDefaultMakeRuleVariables.cmake b/Modules/CMakeDefaultMakeRuleVariables.cmake
index d0134fc4844e92b34ed2889c456b7f702565105c..811ca01ffa94152eef377c84a6899991c312f187 100644
--- a/Modules/CMakeDefaultMakeRuleVariables.cmake
+++ b/Modules/CMakeDefaultMakeRuleVariables.cmake
@@ -2,68 +2,99 @@
 # do things like build a .o file, create a shared or static library
 #
 
-# create a shared C++ librar
+# this file defines the following rule variables
+# CMAKE_CXX_CREATE_SHARED_LIBRARY
+# CMAKE_CXX_CREATE_SHARED_MODULE
+# CMAKE_C_CREATE_SHARED_LIBRARY
+# CMAKE_C_CREATE_SHARED_MODULE
+# CMAKE_CXX_CREATE_STATIC_LIBRARY
+# CMAKE_C_CREATE_STATIC_LIBRARY
+# CMAKE_CXX_COMPILE_OBJECT
+# CMAKE_C_COMPILE_OBJECT
+# CMAKE_C_LINK_EXECUTABLE
+# CMAKE_CXX_LINK_EXECUTABLE
+
+# variables supplied by the generator at use time
+# <TARGET>
+# <OBJECTS>
+# <OBJECT>
+# <LINK_LIBRARIES>
+
+# CXX compiler information
+# <CMAKE_CXX_COMPILER>  
+# <CMAKE_CXX_COMPILE_FLAGS>
+# <CMAKE_CXX_SHARED_LIBRARY_CREATE_FLAGS>
+# <CMAKE_CXX_SHARED_MODULE_CREATE_FLAGS>
+# <CMAKE_CXX_LINK_FLAGS>
+
+# C compiler information
+# <CMAKE_C_COMPILER>  
+# <CMAKE_C_COMPILE_FLAGS>
+# <CMAKE_C_SHARED_LIBRARY_CREATE_FLAGS>
+# <CMAKE_C_SHARED_MODULE_CREATE_FLAGS>
+# <CMAKE_C_LINK_FLAGS>
+
+# Static library tools
+# <CMAKE_AR> 
+# <CMAKE_RANLIB>
+
+
+# create a shared C++ library
 IF(NOT CMAKE_CXX_CREATE_SHARED_LIBRARY)
   SET(CMAKE_CXX_CREATE_SHARED_LIBRARY
-      "${CMAKE_CXX_COMPILER} ${CMAKE_SHARED_LIBRARY_CREATE_FLAGS} "
-      "${CMAKE_CXX_LINK_SHARED_OUT_FLAG} <TARGET> <OBJECTS>")
+      "<CMAKE_CXX_COMPILER> <CMAKE_CXX_SHARED_LIBRARY_CREATE_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
 ENDIF(NOT CMAKE_CXX_CREATE_SHARED_LIBRARY)
 
-# create a c++ shared module
+# create a c++ shared module copy the shared library rule by default
 IF(NOT CMAKE_CXX_CREATE_SHARED_MODULE)
-  SET(CMAKE_CXX_CREATE_SHARED_MODULE
-      "${CMAKE_CXX_COMPILER} ${CMAKE_SHARED_MODULE_CREATE_FLAGS} "
-      "${CMAKE_CXX_LINK_SHARED_OUT_FLAG} <TARGET> <OBJECTS>")
+  SET(CMAKE_CXX_CREATE_SHARED_MODULE ${CMAKE_CXX_CREATE_SHARED_LIBRARY})
 ENDIF(NOT CMAKE_CXX_CREATE_SHARED_MODULE)
 
 # create a C shared library
 IF(NOT CMAKE_C_CREATE_SHARED_LIBRARY)
   SET(CMAKE_C_CREATE_SHARED_LIBRARY
-      "${CMAKE_C_COMPILER} ${CMAKE_SHARED_LIBRARY_CREATE_FLAGS} "
-      "${CMAKE_C_LINK_SHARED_OUT_FLAG} <TARGET> <OBJECTS>")
+      "<CMAKE_C_COMPILER> <CMAKE_C_SHARED_LIBRARY_CREATE_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
 ENDIF(NOT CMAKE_C_CREATE_SHARED_LIBRARY)
 
-# create a C shared module
+# create a C shared module just copy the shared library rule
 IF(NOT CMAKE_C_CREATE_SHARED_MODULE)
-  SET(CMAKE_C_CREATE_SHARED_MODULE
-      "${CMAKE_C_COMPILER} ${CMAKE_SHARED_MODULE_CREATE_FLAGS} "
-      "${CMAKE_C_LINK_SHARED_OUT_FLAG} <TARGET> <OBJECTS>")
+  SET(CMAKE_C_CREATE_SHARED_MODULE ${CMAKE_C_CREATE_SHARED_LIBRARY})
 ENDIF(NOT CMAKE_C_CREATE_SHARED_MODULE)
 
 # create a C++ static library
 IF(NOT CMAKE_CXX_CREATE_STATIC_LIBRARY)
   SET(CMAKE_CXX_CREATE_STATIC_LIBRARY
-      "${CMAKE_CXX_AR} cr <TARGET> <OBJECTS> "
-      "${CMAKE_RANLIB} <TARGET> ")
+      "<CMAKE_AR> cr <TARGET> <OBJECTS> "
+      "<CMAKE_RANLIB> <TARGET> ")
 ENDIF(NOT CMAKE_CXX_CREATE_STATIC_LIBRARY)
 
 # create a C static library
 IF(NOT CMAKE_C_CREATE_STATIC_LIBRARY)
   SET(CMAKE_C_CREATE_STATIC_LIBRARY
-      "${CMAKE_AR} cr <TARGET> <OBJECTS> "
-      "${CMAKE_RANLIB} <TARGET> ")
+      "<CMAKE_AR> cr <TARGET> <OBJECTS> "
+      "<CMAKE_RANLIB> <TARGET> ")
 ENDIF(NOT CMAKE_C_CREATE_STATIC_LIBRARY)
 
 # compile a C++ file into an object file
 IF(NOT CMAKE_CXX_COMPILE_OBJECT)
   SET(CMAKE_CXX_COMPILE_OBJECT
-    "${CMAKE_CXX_COMPILER} -o <OBJECT> <INCLUDE_FLAGS> <SHARED_FLAGS> ${CMAKE_CXX_FLAGS} -c <SOURCE>")
+    "<CMAKE_CXX_COMPILER> -o <OBJECT> <CMAKE_CXX_COMPILE_FLAGS> -c <SOURCE>")
 ENDIF(NOT CMAKE_CXX_COMPILE_OBJECT)
 
 # compile a C file into an object file
 IF(NOT CMAKE_C_COMPILE_OBJECT)
   SET(CMAKE_C_COMPILE_OBJECT
-    "${CMAKE_C_COMPILER} -o <OBJECT> <INCLUDE_FLAGS> <SHARED_FLAGS> ${CMAKE_C_FLAGS} -c <SOURCE>")
+    "<CMAKE_C_COMPILER> -o <OBJECT>  <CMAKE_C_COMPILE_FLAGS> -c <SOURCE>")
 ENDIF(NOT CMAKE_C_COMPILE_OBJECT)
 
 
 IF(NOT CMAKE_C_LINK_EXECUTABLE)
   SET(CMAKE_C_LINK_EXECUTABLE
-    "${CMAKE_C_COMPILER} <SHARED_FLAGS> <OBJECTS>  -o <TARGET> ")
+    "<CMAKE_C_COMPILER> <CMAKE_C_LINK_FLAGS>  <OBJECTS>  -o <TARGET> <LINK_LIBRARIES>")
 ENDIF(NOT CMAKE_C_LINK_EXECUTABLE)
 
 
 IF(NOT CMAKE_CXX_LINK_EXECUTABLE)
   SET(CMAKE_CXX_LINK_EXECUTABLE
-    "${CMAKE_CXX_COMPILER} <SHARED_FLAGS> <OBJECTS>  -o <TARGET> ")
+    "<CMAKE_CXX_COMPILER> <CMAKE_CXX_LINK_FLAGS> <OBJECTS>  -o <TARGET> <LINK_LIBRARIES>")
 ENDIF(NOT CMAKE_CXX_LINK_EXECUTABLE)
diff --git a/Modules/CMakeDetermineCCompiler.cmake b/Modules/CMakeDetermineCCompiler.cmake
index 7f793d396fab546adf7351f38cc7435b315f79a0..032aa49ea58f3ee65851f5b439dd2cf166f8dfda 100644
--- a/Modules/CMakeDetermineCCompiler.cmake
+++ b/Modules/CMakeDetermineCCompiler.cmake
@@ -13,12 +13,12 @@ ENDIF(NOT CMAKE_RANLIB)
 
 # test to see if the c compiler is gnu
 EXEC_PROGRAM(${CMAKE_C_COMPILER} ARGS -E ${CMAKE_ROOT}/Modules/CMakeTestGNU.c OUTPUT_VARIABLE CMAKE_COMPILER_OUTPUT RETURN_VALUE CMAKE_COMPILER_RETURN)
-
 IF(NOT CMAKE_COMPILER_RETURN)
    IF(${CMAKE_COMPILER_OUTPUT} MATCHES ".*THIS_IS_GNU.*" )
       SET(CMAKE_COMPILER_IS_GNUGCC 1)
    ENDIF(${CMAKE_COMPILER_OUTPUT} MATCHES ".*THIS_IS_GNU.*" )
 ENDIF(NOT CMAKE_COMPILER_RETURN)
 
+# configure variables set in this file for fast reload later on
 CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeCCompiler.cmake.in 
                ${PROJECT_BINARY_DIR}/CMakeCCompiler.cmake)
diff --git a/Modules/CMakeDetermineCXXCompiler.cmake b/Modules/CMakeDetermineCXXCompiler.cmake
index 2f0a029bfe4e21cf26d390d8314af317ba302a64..373d866ae51bde6b5e502811355d200a9b215219 100644
--- a/Modules/CMakeDetermineCXXCompiler.cmake
+++ b/Modules/CMakeDetermineCXXCompiler.cmake
@@ -7,11 +7,12 @@ GET_FILENAME_COMPONENT(CMAKE_CXX_COMPILER ${CMAKE_CXX_COMPILER_FULLPATH} NAME_WE
 
 # test to see if the cxx compiler is gnu
 EXEC_PROGRAM(${CMAKE_CXX_COMPILER} ARGS -E ${CMAKE_ROOT}/Modules/CMakeTestGNU.c OUTPUT_VARIABLE CMAKE_COMPILER_OUTPUT RETURN_VALUE CMAKE_COMPILER_RETURN)
-
 IF(NOT CMAKE_COMPILER_RETURN)
    IF(${CMAKE_COMPILER_OUTPUT} MATCHES ".*THIS_IS_GNU.*" )
       SET(CMAKE_COMPILER_IS_GNUGXX 1)
    ENDIF(${CMAKE_COMPILER_OUTPUT} MATCHES ".*THIS_IS_GNU.*" )
 ENDIF(NOT CMAKE_COMPILER_RETURN)
 
-SET(CMAKE_CXX_AR ${CMAKE_AR})
+# configure all variables set in this file
+CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeCXXCompiler.cmake.in 
+               ${PROJECT_BINARY_DIR}/CMakeCXXCompiler.cmake)
diff --git a/Modules/CMakeDetermineSystem.cmake b/Modules/CMakeDetermineSystem.cmake
index c169daf325a8c8916b9b57eb6c8cc5f6ab32b165..addbe470233a2eca11cfb63e5beb392ea57020b7 100644
--- a/Modules/CMakeDetermineSystem.cmake
+++ b/Modules/CMakeDetermineSystem.cmake
@@ -59,6 +59,7 @@ SET(CMAKE_SYSTEM  ${CMAKE_SYSTEM_NAME})
 IF(CMAKE_SYSTEM_VERSION)
   SET(CMAKE_SYSTEM ${CMAKE_SYSTEM}-${CMAKE_SYSTEM_VERSION})
 ENDIF(CMAKE_SYSTEM_VERSION)
-MESSAGE(${PROJECT_BIN_DIR}/CMakeSystem.cmake)
+
+# configure variables set in this file for fast reload
 CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeSystem.cmake.in 
                ${PROJECT_BINARY_DIR}/CMakeSystem.cmake)
diff --git a/Modules/CMakeSystemSpecificInformation.cmake b/Modules/CMakeSystemSpecificInformation.cmake
index 12203fb2ca9a6dfce909dba4c529d0e7f7b2c989..101af5463e22d19e872cf3513c6e9c276e95c8fb 100644
--- a/Modules/CMakeSystemSpecificInformation.cmake
+++ b/Modules/CMakeSystemSpecificInformation.cmake
@@ -49,7 +49,8 @@ IF(CMAKE_C_COMPILER)
   IF(CMAKE_COMPILER_IS_GNUGCC)
      SET(CMAKE_BASE_NAME gcc)
   ENDIF(CMAKE_COMPILER_IS_GNUGCC)
-  SET(CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE ${CMAKE_ROOT}/Modules/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}.cmake)
+  SET(CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE 
+      ${CMAKE_ROOT}/Modules/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}.cmake)
   INCLUDE(${CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE} OPTIONAL)
 ENDIF(CMAKE_C_COMPILER)
 IF(CMAKE_CXX_COMPILER)
@@ -58,7 +59,8 @@ IF(CMAKE_CXX_COMPILER)
   IF(CMAKE_COMPILER_IS_GNUGXX)
      SET(CMAKE_BASE_NAME g++)
   ENDIF(CMAKE_COMPILER_IS_GNUGXX)
-  SET(CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE ${CMAKE_ROOT}/Modules/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}.cmake)
+  SET(CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE
+      ${CMAKE_ROOT}/Modules/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}.cmake)
   INCLUDE(${CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE} OPTIONAL)
 ENDIF(CMAKE_CXX_COMPILER)