diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7e852de768bef7b741280c411684305a791b1c1a..0b67d2b4b2e5450128bd96d2c63e3b4c69842d16 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -37,6 +37,41 @@
 #      SET(KWSYS_HEADER_ROOT ${PROJECT_BINARY_DIR})
 #      INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR})
 #
+#  KWSYS_IOS_FORCE_OLD = Force use of old non-ANSI C++ streams even if
+#                        new streams are available.  This may be used
+#                        by projects that cannot configure their
+#                        streams library.
+#    Example:
+#
+#      SET(KWSYS_IOS_FORCE_OLD 1)
+#
+#
+# Optional settings to setup install rules work in one of two ways.
+# The modern way utilizes the CMake 2.4 INSTALL command.  Settings
+# for this mode are as follows:
+#
+#  KWSYS_INSTALL_BIN_DIR     = The installation target directories into
+#  KWSYS_INSTALL_LIB_DIR       which the libraries and headers from
+#  KWSYS_INSTALL_INCLUDE_DIR   kwsys should be installed by a "make install".
+#                              The values should be specified relative to
+#                              the installation prefix and NOT start with '/'.
+#
+#  KWSYS_INSTALL_COMPONENT_NAME_RUNTIME     = Name of runtime and development
+#  KWSYS_INSTALL_COMPONENT_NAME_DEVELOPMENT   installation components.
+#                                             If not given the install rules
+#                                             will not be in any component.
+#
+#    Example:
+#
+#      SET(KWSYS_INSTALL_BIN_DIR bin)
+#      SET(KWSYS_INSTALL_LIB_DIR lib)
+#      SET(KWSYS_INSTALL_INCLUDE_DIR include)
+#      SET(KWSYS_INSTALL_COMPONENT_NAME_RUNTIME Runtime)
+#      SET(KWSYS_INSTALL_COMPONENT_NAME_DEVELOPMENT Development)
+#
+# The old way uses the original CMake INSTALL_* commands.  Settings
+# for this mode are as follows:
+#
 #  KWSYS_LIBRARY_INSTALL_DIR = The installation target directories into
 #  KWSYS_HEADER_INSTALL_DIR    which the libraries and headers from
 #                              kwsys should be installed by a "make install".
@@ -47,14 +82,11 @@
 #      SET(KWSYS_LIBRARY_INSTALL_DIR /lib)
 #      SET(KWSYS_HEADER_INSTALL_DIR /include)
 #
-#  KWSYS_IOS_FORCE_OLD = Force use of old non-ANSI C++ streams even if
-#                        new streams are available.  This may be used
-#                        by projects that cannot configure their
-#                        streams library.
-#    Example:
-#
-#      SET(KWSYS_IOS_FORCE_OLD 1)
-#
+# The modern way will be used whenever the INSTALL command is
+# available.  If the settings are not available the old names will be
+# used to construct them.  The old way will be used whenever the
+# INSTALL command is not available.  If the settings are not available
+# the new names will be used to construct them.
 
 # Once configured, kwsys should be used as follows from C or C++ code:
 #
@@ -113,6 +145,87 @@ ENDIF(KWSYS_STANDALONE)
 # Do full dependency headers.
 INCLUDE_REGULAR_EXPRESSION("^.*$")
 
+# Choose which kind of install commands to use.
+IF(COMMAND INSTALL)
+  # Use new KWSYS_INSTALL_*_DIR variable names to control installation.
+  # Take defaults from the old names.  Note that there was no old name
+  # for the bin dir, so we take the old lib dir name so DLLs will be
+  # installed in a compatible way for old code.
+  IF(NOT KWSYS_INSTALL_INCLUDE_DIR)
+    STRING(REGEX REPLACE "^/" "" KWSYS_INSTALL_INCLUDE_DIR
+      "${KWSYS_HEADER_INSTALL_DIR}")
+  ENDIF(NOT KWSYS_INSTALL_INCLUDE_DIR)
+  IF(NOT KWSYS_INSTALL_LIB_DIR)
+    STRING(REGEX REPLACE "^/" "" KWSYS_INSTALL_LIB_DIR
+      "${KWSYS_LIBRARY_INSTALL_DIR}")
+  ENDIF(NOT KWSYS_INSTALL_LIB_DIR)
+  IF(NOT KWSYS_INSTALL_BIN_DIR)
+    STRING(REGEX REPLACE "^/" "" KWSYS_INSTALL_BIN_DIR
+      "${KWSYS_LIBRARY_INSTALL_DIR}")
+  ENDIF(NOT KWSYS_INSTALL_BIN_DIR)
+
+  # Setup library install rules.
+  SET(KWSYS_INSTALL_LIBRARY_RULE)
+  IF(KWSYS_INSTALL_LIB_DIR)
+    # Install the shared library to the lib directory.
+    SET(KWSYS_INSTALL_LIBRARY_RULE ${KWSYS_INSTALL_LIBRARY_RULE}
+      LIBRARY DESTINATION ${KWSYS_INSTALL_LIB_DIR}
+      )
+    # Assign the shared library to the runtime component.
+    IF(KWSYS_INSTALL_COMPONENT_NAME_RUNTIME)
+      SET(KWSYS_INSTALL_LIBRARY_RULE ${KWSYS_INSTALL_LIBRARY_RULE}
+        COMPONENT ${KWSYS_INSTALL_COMPONENT_NAME_RUNTIME}
+        )
+    ENDIF(KWSYS_INSTALL_COMPONENT_NAME_RUNTIME)
+
+    # Install the archive to the lib directory.
+    SET(KWSYS_INSTALL_LIBRARY_RULE ${KWSYS_INSTALL_LIBRARY_RULE}
+      ARCHIVE DESTINATION ${KWSYS_INSTALL_LIB_DIR}
+      )
+    # Assign the archive to the development component.
+    IF(KWSYS_INSTALL_COMPONENT_NAME_DEVELOPMENT)
+      SET(KWSYS_INSTALL_LIBRARY_RULE ${KWSYS_INSTALL_LIBRARY_RULE}
+        COMPONENT ${KWSYS_INSTALL_COMPONENT_NAME_DEVELOPMENT}
+        )
+    ENDIF(KWSYS_INSTALL_COMPONENT_NAME_DEVELOPMENT)
+  ENDIF(KWSYS_INSTALL_LIB_DIR)
+  IF(KWSYS_INSTALL_BIN_DIR)
+    # Install the runtime library to the bin directory.
+    SET(KWSYS_INSTALL_LIBRARY_RULE ${KWSYS_INSTALL_LIBRARY_RULE}
+      RUNTIME DESTINATION ${KWSYS_INSTALL_BIN_DIR}
+      )
+    # Assign the runtime library to the runtime component.
+    IF(KWSYS_INSTALL_COMPONENT_NAME_RUNTIME)
+      SET(KWSYS_INSTALL_LIBRARY_RULE ${KWSYS_INSTALL_LIBRARY_RULE}
+        COMPONENT ${KWSYS_INSTALL_COMPONENT_NAME_RUNTIME}
+        )
+    ENDIF(KWSYS_INSTALL_COMPONENT_NAME_RUNTIME)
+  ENDIF(KWSYS_INSTALL_BIN_DIR)
+
+  # Do not support old KWSYS_*_INSTALL_DIR variable names.
+  SET(KWSYS_HEADER_INSTALL_DIR)
+  SET(KWSYS_LIBRARY_INSTALL_DIR)
+
+ELSE(COMMAND INSTALL)
+  # Use old KWSYS_*_INSTALL_DIR variable names.
+  # Take defaults from the new names.
+  IF(KWSYS_INSTALL_LIB_DIR)
+    IF(NOT KWSYS_LIBRARY_INSTALL_DIR)
+      SET(KWSYS_LIBRARY_INSTALL_DIR "/${KWSYS_INSTALL_LIB_DIR}")
+    ENDIF(NOT KWSYS_LIBRARY_INSTALL_DIR)
+  ENDIF(KWSYS_INSTALL_LIB_DIR)
+  IF(KWSYS_INSTALL_INCLUDE_DIR)
+    IF(NOT KWSYS_HEADER_INSTALL_DIR)
+      SET(KWSYS_HEADER_INSTALL_DIR "/${KWSYS_INSTALL_INCLUDE_DIR}")
+    ENDIF(NOT KWSYS_HEADER_INSTALL_DIR)
+  ENDIF(KWSYS_INSTALL_INCLUDE_DIR)
+
+  # Do not support new KWSYS_INSTALL_*_DIR variable names.
+  SET(KWSYS_INSTALL_BIN_DIR)
+  SET(KWSYS_INSTALL_INCLUDE_DIR)
+  SET(KWSYS_INSTALL_LIB_DIR)
+ENDIF(COMMAND INSTALL)
+
 # Work-around for CMake 1.6.7 bug in custom command dependencies when
 # there is no executable output path.
 IF(NOT EXECUTABLE_OUTPUT_PATH)
@@ -369,6 +482,10 @@ FOREACH(header algorithm deque iterator list map numeric queue set stack string
     CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/kwsys_stl_${header}.hxx.in
                    ${KWSYS_HEADER_DIR}/stl/${header}.hxx
                    @ONLY IMMEDIATE)
+    IF(KWSYS_INSTALL_INCLUDE_DIR)
+      INSTALL(FILES ${KWSYS_HEADER_DIR}/stl/${header}.hxx
+        DESTINATION ${KWSYS_INSTALL_INCLUDE_DIR}/${KWSYS_NAMESPACE}/stl)
+    ENDIF(KWSYS_INSTALL_INCLUDE_DIR)
     IF(KWSYS_HEADER_INSTALL_DIR)
       INSTALL_FILES(${KWSYS_HEADER_INSTALL_DIR}/${KWSYS_NAMESPACE}/stl
         FILES ${KWSYS_HEADER_DIR}/stl/${header}.hxx)
@@ -381,6 +498,10 @@ FOREACH(header algorithm deque iterator list map numeric queue set stack string
                  @ONLY IMMEDIATE)
 
   # Create an install target for the header wrapper.
+  IF(KWSYS_INSTALL_INCLUDE_DIR)
+    INSTALL(FILES ${KWSYS_HEADER_DIR}/stl/${header}
+      DESTINATION ${KWSYS_INSTALL_INCLUDE_DIR}/${KWSYS_NAMESPACE}/stl)
+  ENDIF(KWSYS_INSTALL_INCLUDE_DIR)
   IF(KWSYS_HEADER_INSTALL_DIR)
     INSTALL_FILES(${KWSYS_HEADER_INSTALL_DIR}/${KWSYS_NAMESPACE}/stl
       FILES ${KWSYS_HEADER_DIR}/stl/${header})
@@ -402,6 +523,10 @@ FOREACH(header iostream fstream sstream iosfwd)
                  @ONLY IMMEDIATE)
 
   # Create an install target for the header wrapper.
+  IF(KWSYS_INSTALL_INCLUDE_DIR)
+    INSTALL(FILES ${KWSYS_HEADER_DIR}/ios/${header}
+      DESTINATION ${KWSYS_INSTALL_INCLUDE_DIR}/${KWSYS_NAMESPACE}/ios)
+  ENDIF(KWSYS_INSTALL_INCLUDE_DIR)
   IF(KWSYS_HEADER_INSTALL_DIR)
     INSTALL_FILES(${KWSYS_HEADER_INSTALL_DIR}/${KWSYS_NAMESPACE}/ios
       FILES ${KWSYS_HEADER_DIR}/ios/${header})
@@ -481,6 +606,10 @@ FOREACH(c ${KWSYS_CLASSES})
                  @ONLY IMMEDIATE)
 
   # Create an install target for the header.
+  IF(KWSYS_INSTALL_INCLUDE_DIR)
+    INSTALL(FILES ${KWSYS_HEADER_DIR}/${c}.hxx
+      DESTINATION ${KWSYS_INSTALL_INCLUDE_DIR}/${KWSYS_NAMESPACE})
+  ENDIF(KWSYS_INSTALL_INCLUDE_DIR)
   IF(KWSYS_HEADER_INSTALL_DIR)
     INSTALL_FILES(${KWSYS_HEADER_INSTALL_DIR}/${KWSYS_NAMESPACE}
                   FILES  ${KWSYS_HEADER_DIR}/${c}.hxx)
@@ -494,6 +623,10 @@ FOREACH(h ${KWSYS_H_FILES})
                  @ONLY IMMEDIATE)
 
   # Create an install target for the header.
+  IF(KWSYS_INSTALL_INCLUDE_DIR)
+    INSTALL(FILES ${KWSYS_HEADER_DIR}/${h}.h
+      DESTINATION ${KWSYS_INSTALL_INCLUDE_DIR}/${KWSYS_NAMESPACE})
+  ENDIF(KWSYS_INSTALL_INCLUDE_DIR)
   IF(KWSYS_HEADER_INSTALL_DIR)
     INSTALL_FILES(${KWSYS_HEADER_INSTALL_DIR}/${KWSYS_NAMESPACE}
                   FILES  ${KWSYS_HEADER_DIR}/${h}.h)
@@ -507,6 +640,10 @@ FOREACH(h ${KWSYS_HXX_FILES})
                  @ONLY IMMEDIATE)
 
   # Create an install target for the header.
+  IF(KWSYS_INSTALL_INCLUDE_DIR)
+    INSTALL(FILES ${KWSYS_HEADER_DIR}/${h}.hxx
+      DESTINATION ${KWSYS_INSTALL_INCLUDE_DIR}/${KWSYS_NAMESPACE})
+  ENDIF(KWSYS_INSTALL_INCLUDE_DIR)
   IF(KWSYS_HEADER_INSTALL_DIR)
     INSTALL_FILES(${KWSYS_HEADER_INSTALL_DIR}/${KWSYS_NAMESPACE}
                   FILES  ${KWSYS_HEADER_DIR}/${h}.hxx)
@@ -532,15 +669,11 @@ IF(KWSYS_C_SRCS OR KWSYS_CXX_SRCS)
   ENDIF(KWSYS_PROPERTIES_CXX)
 
   # Create an install target for the library.
+  IF(KWSYS_INSTALL_LIBRARY_RULE)
+    INSTALL(TARGETS ${KWSYS_NAMESPACE} ${KWSYS_INSTALL_LIBRARY_RULE})
+  ENDIF(KWSYS_INSTALL_LIBRARY_RULE)
   IF(KWSYS_LIBRARY_INSTALL_DIR)
-    IF(VTK_INSTALL_HAS_CMAKE_24)
-      INSTALL(TARGETS ${KWSYS_NAMESPACE}
-        RUNTIME DESTINATION ${VTK_INSTALL_BIN_DIR_CM24} COMPONENT Runtime
-        LIBRARY DESTINATION ${VTK_INSTALL_LIB_DIR_CM24} COMPONENT Runtime
-        ARCHIVE DESTINATION ${VTK_INSTALL_LIB_DIR_CM24} COMPONENT Development)
-    ELSE(VTK_INSTALL_HAS_CMAKE_24)
-      INSTALL_TARGETS(${KWSYS_LIBRARY_INSTALL_DIR} ${KWSYS_NAMESPACE})
-    ENDIF(VTK_INSTALL_HAS_CMAKE_24)
+    INSTALL_TARGETS(${KWSYS_LIBRARY_INSTALL_DIR} ${KWSYS_NAMESPACE})
   ENDIF(KWSYS_LIBRARY_INSTALL_DIR)
 ENDIF(KWSYS_C_SRCS OR KWSYS_CXX_SRCS)
 
@@ -556,6 +689,9 @@ IF(KWSYS_ENABLE_C AND KWSYS_C_SRCS)
   ENDIF(KWSYS_PROPERTIES_C)
 
   # Create an install target for the library.
+  IF(KWSYS_INSTALL_LIBRARY_RULE)
+    INSTALL(TARGETS ${KWSYS_NAMESPACE}_c ${KWSYS_INSTALL_LIBRARY_RULE})
+  ENDIF(KWSYS_INSTALL_LIBRARY_RULE)
   IF(KWSYS_LIBRARY_INSTALL_DIR)
     INSTALL_TARGETS(${KWSYS_LIBRARY_INSTALL_DIR} ${KWSYS_NAMESPACE}_c)
   ENDIF(KWSYS_LIBRARY_INSTALL_DIR)