diff --git a/gcc-stlport-tools.jam b/gcc-stlport-tools.jam
index 6fd4fe8e3..cd699ceed 100644
--- a/gcc-stlport-tools.jam
+++ b/gcc-stlport-tools.jam
@@ -7,6 +7,9 @@
# this is simply an extension to the gcc toolset.
extends-toolset gcc ;
+# singleton variables...
+set-as-singleton STLPORT_INCLUDE_DIRECTORY STLPORT_LIB_DIRECTORY STLPORT_ROOT ;
+
if $(NT)
{
GCC_STLPORT_LIB_ID = cygwin ;
diff --git a/gcc-tools.jam b/gcc-tools.jam
index 720749921..0cc0151f9 100644
--- a/gcc-tools.jam
+++ b/gcc-tools.jam
@@ -43,6 +43,9 @@
# Similar to GXX, the name by which gcc is invoked for "C"
# language targets.
+# singleton variables...
+set-as-singleton GCC_ROOT_DIRECTORY GCC_BIN_DIRECTORY GCC_INCLUDE_DIRECTORY GCC_STDLIB_DIRECTORY ;
+
GCC_BIN_DIRECTORY ?= $(GCC_ROOT_DIRECTORY)/bin/ ;
GCC_BIN_DIRECTORY ?= "" ; # Don't clobber tool names if GCC_ROOT_DIRECTORY not set
GCC_INCLUDE_DIRECTORY ?= $(GCC_ROOT_DIRECTORY)/include ;
diff --git a/intel-win32-tools.jam b/intel-win32-tools.jam
index 313018403..5f2fae7ff 100644
--- a/intel-win32-tools.jam
+++ b/intel-win32-tools.jam
@@ -10,6 +10,9 @@
# program as the column heading for HTML tables. Must not include version number.
#//Intel
C++
+# singleton variables...
+set-as-singleton INTELC ;
+
# compute INTEL tool path. You can either use the environment variable
# setup that comes with the Intel compiler, or you can set the
# INTEL_PATH or INTELC (in order to respect FTJam setup) environment
diff --git a/metrowerks-tools.jam b/metrowerks-tools.jam
index b61416d7a..472dc82a0 100644
--- a/metrowerks-tools.jam
+++ b/metrowerks-tools.jam
@@ -19,6 +19,9 @@
# program as the column heading for HTML tables. Must not include version number.
#//Metro-
werks
Code-
Warrior
+# singleton variables...
+set-as-singleton METROWERKS_ROOT METROWERKS_INCLUDE_ROOT CWFOLDER ;
+
# Get these variable set on the targets so that we can re-use the
# build actions for other toolsets using this one as a base.
flags metrowerks METROWERKS_SETUP ;
@@ -67,8 +70,7 @@ flags metrowerks NEEDLIBS ;
flags metrowerks FINDLIBS ;
# How will we find metrowerks standard headers?
-# If the user specified METROWERKS_INCLUDE_ROOT, use that
-# Otherwise, if he specified METROWERKS_ROOT, use that
+# If the user specified METROWERKS_ROOT, use that
# Otherwise, look at the "standard" environment variable CWFOLDER
METROWERKS_INCLUDE_ROOT = $(METROWERKS_ROOT) ;
METROWERKS_INCLUDE_ROOT ?= $(CWFOLDER) ;
diff --git a/mingw-tools.jam b/mingw-tools.jam
index a9a7682e3..030d51713 100644
--- a/mingw-tools.jam
+++ b/mingw-tools.jam
@@ -4,6 +4,9 @@
# "as is" without express or implied warranty, and with no claim as
# to its suitability for any purpose.
+# singleton variables...
+set-as-singleton MINGW_ROOT_DIRECTORY MINGW_BIN_DIRECTORY MINGW_INCLUDE_DIRECTORY MINGW_STDLIB_DIRECTORY ;
+
# compute directories for invoking MINGW
MINGW_BIN_DIRECTORY ?= $(MINGW_ROOT_DIRECTORY)$(SLASH)bin$(SLASH) ;
MINGW_BIN_DIRECTORY ?= "" ; # Don't clobber tool names if MINGW_ROOT_DIRECTORY not set
diff --git a/mipspro-tools.jam b/mipspro-tools.jam
index 9aa5e6762..7ac68bf83 100644
--- a/mipspro-tools.jam
+++ b/mipspro-tools.jam
@@ -1,5 +1,8 @@
# This file was originally based on gcc-tools.jam by David Abrahams.
+# singleton variables...
+set-as-singleton MIPSPRO_ROOT_DIRECTORY MIPSPRO_BIN_DIRECTORY MIPSPRO_INCLUDE_DIRECTORY MIPSPRO_C++INCLUDE_DIRECTORY MIPSPRO_STDLIB_DIRECTORY ;
+
# compute directories for invoking MIPSPRO
MIPSPRO_ROOT_DIRECTORY ?= "/usr" ;
MIPSPRO_BIN_DIRECTORY ?= "$(MIPSPRO_ROOT_DIRECTORY)/bin" ;
diff --git a/msvc-tools.jam b/msvc-tools.jam
index 09030cd09..ad1bf4425 100644
--- a/msvc-tools.jam
+++ b/msvc-tools.jam
@@ -10,6 +10,9 @@
# program as the column heading for HTML tables. Must not include version number.
#//Micro-
soft
VC++
+# singleton variables...
+set-as-singleton MSVCDir VISUALC MSVC_ROOT VC_TOOL_PATH VC_SETUP ;
+
# Get these variable set on the targets so that we can re-use the
# build actions for other toolsets using this one as a base.
flags msvc VC_TOOL_PATH ;
diff --git a/v1/gcc-stlport-tools.jam b/v1/gcc-stlport-tools.jam
index 6fd4fe8e3..cd699ceed 100644
--- a/v1/gcc-stlport-tools.jam
+++ b/v1/gcc-stlport-tools.jam
@@ -7,6 +7,9 @@
# this is simply an extension to the gcc toolset.
extends-toolset gcc ;
+# singleton variables...
+set-as-singleton STLPORT_INCLUDE_DIRECTORY STLPORT_LIB_DIRECTORY STLPORT_ROOT ;
+
if $(NT)
{
GCC_STLPORT_LIB_ID = cygwin ;
diff --git a/v1/gcc-tools.jam b/v1/gcc-tools.jam
index 720749921..0cc0151f9 100644
--- a/v1/gcc-tools.jam
+++ b/v1/gcc-tools.jam
@@ -43,6 +43,9 @@
# Similar to GXX, the name by which gcc is invoked for "C"
# language targets.
+# singleton variables...
+set-as-singleton GCC_ROOT_DIRECTORY GCC_BIN_DIRECTORY GCC_INCLUDE_DIRECTORY GCC_STDLIB_DIRECTORY ;
+
GCC_BIN_DIRECTORY ?= $(GCC_ROOT_DIRECTORY)/bin/ ;
GCC_BIN_DIRECTORY ?= "" ; # Don't clobber tool names if GCC_ROOT_DIRECTORY not set
GCC_INCLUDE_DIRECTORY ?= $(GCC_ROOT_DIRECTORY)/include ;
diff --git a/v1/intel-win32-tools.jam b/v1/intel-win32-tools.jam
index 313018403..5f2fae7ff 100644
--- a/v1/intel-win32-tools.jam
+++ b/v1/intel-win32-tools.jam
@@ -10,6 +10,9 @@
# program as the column heading for HTML tables. Must not include version number.
#//Intel
C++
+# singleton variables...
+set-as-singleton INTELC ;
+
# compute INTEL tool path. You can either use the environment variable
# setup that comes with the Intel compiler, or you can set the
# INTEL_PATH or INTELC (in order to respect FTJam setup) environment
diff --git a/v1/metrowerks-tools.jam b/v1/metrowerks-tools.jam
index b61416d7a..472dc82a0 100644
--- a/v1/metrowerks-tools.jam
+++ b/v1/metrowerks-tools.jam
@@ -19,6 +19,9 @@
# program as the column heading for HTML tables. Must not include version number.
#//Metro-
werks
Code-
Warrior
+# singleton variables...
+set-as-singleton METROWERKS_ROOT METROWERKS_INCLUDE_ROOT CWFOLDER ;
+
# Get these variable set on the targets so that we can re-use the
# build actions for other toolsets using this one as a base.
flags metrowerks METROWERKS_SETUP ;
@@ -67,8 +70,7 @@ flags metrowerks NEEDLIBS ;
flags metrowerks FINDLIBS ;
# How will we find metrowerks standard headers?
-# If the user specified METROWERKS_INCLUDE_ROOT, use that
-# Otherwise, if he specified METROWERKS_ROOT, use that
+# If the user specified METROWERKS_ROOT, use that
# Otherwise, look at the "standard" environment variable CWFOLDER
METROWERKS_INCLUDE_ROOT = $(METROWERKS_ROOT) ;
METROWERKS_INCLUDE_ROOT ?= $(CWFOLDER) ;
diff --git a/v1/mingw-tools.jam b/v1/mingw-tools.jam
index a9a7682e3..030d51713 100644
--- a/v1/mingw-tools.jam
+++ b/v1/mingw-tools.jam
@@ -4,6 +4,9 @@
# "as is" without express or implied warranty, and with no claim as
# to its suitability for any purpose.
+# singleton variables...
+set-as-singleton MINGW_ROOT_DIRECTORY MINGW_BIN_DIRECTORY MINGW_INCLUDE_DIRECTORY MINGW_STDLIB_DIRECTORY ;
+
# compute directories for invoking MINGW
MINGW_BIN_DIRECTORY ?= $(MINGW_ROOT_DIRECTORY)$(SLASH)bin$(SLASH) ;
MINGW_BIN_DIRECTORY ?= "" ; # Don't clobber tool names if MINGW_ROOT_DIRECTORY not set
diff --git a/v1/mipspro-tools.jam b/v1/mipspro-tools.jam
index 9aa5e6762..7ac68bf83 100644
--- a/v1/mipspro-tools.jam
+++ b/v1/mipspro-tools.jam
@@ -1,5 +1,8 @@
# This file was originally based on gcc-tools.jam by David Abrahams.
+# singleton variables...
+set-as-singleton MIPSPRO_ROOT_DIRECTORY MIPSPRO_BIN_DIRECTORY MIPSPRO_INCLUDE_DIRECTORY MIPSPRO_C++INCLUDE_DIRECTORY MIPSPRO_STDLIB_DIRECTORY ;
+
# compute directories for invoking MIPSPRO
MIPSPRO_ROOT_DIRECTORY ?= "/usr" ;
MIPSPRO_BIN_DIRECTORY ?= "$(MIPSPRO_ROOT_DIRECTORY)/bin" ;
diff --git a/v1/msvc-tools.jam b/v1/msvc-tools.jam
index 09030cd09..ad1bf4425 100644
--- a/v1/msvc-tools.jam
+++ b/v1/msvc-tools.jam
@@ -10,6 +10,9 @@
# program as the column heading for HTML tables. Must not include version number.
#//Micro-
soft
VC++
+# singleton variables...
+set-as-singleton MSVCDir VISUALC MSVC_ROOT VC_TOOL_PATH VC_SETUP ;
+
# Get these variable set on the targets so that we can re-use the
# build actions for other toolsets using this one as a base.
flags msvc VC_TOOL_PATH ;
diff --git a/v1/vc7-tools.jam b/v1/vc7-tools.jam
index 996c63c27..0fde7cfc0 100644
--- a/v1/vc7-tools.jam
+++ b/v1/vc7-tools.jam
@@ -1,5 +1,8 @@
extends-toolset msvc ;
+# singleton variables...
+set-as-singleton VC7_ROOT ;
+
if ! $(MSVCDir)
{
VC7_ROOT ?= "C:\\Program Files\\Microsoft Visual Studio .NET\\VC7" ;
diff --git a/vc7-tools.jam b/vc7-tools.jam
index 996c63c27..0fde7cfc0 100644
--- a/vc7-tools.jam
+++ b/vc7-tools.jam
@@ -1,5 +1,8 @@
extends-toolset msvc ;
+# singleton variables...
+set-as-singleton VC7_ROOT ;
+
if ! $(MSVCDir)
{
VC7_ROOT ?= "C:\\Program Files\\Microsoft Visual Studio .NET\\VC7" ;