diff --git a/boostcpp.jam b/boostcpp.jam
index 0d43c5d..bb34a7b 100644
--- a/boostcpp.jam
+++ b/boostcpp.jam
@@ -596,27 +596,32 @@ rule declare-targets ( all-libraries * : headers * )
     declare_top_level_targets $(libraries) : $(headers) ;
 }
 
+# Returns the properties identifying the toolset. We'll use them
+# below to configure checks. These are essentially same as in
+# configure.builds, except we don't use address-model and
+# architecture - as we're trying to detect them here.
+# 
+rule toolset-properties ( properties * )
+{
+    local toolset = [ property.select <toolset> : $(properties) ] ;
+    local toolset-version-property = "<toolset-$(toolset:G=):version>" ;
+    return [ property.select <target-os> <toolset> $(toolset-version-property) : $(properties) ] ;
+}
+
 feature.feature deduced-address-model : 32 64 : propagated optional composite hidden ;
 feature.compose <deduced-address-model>32 : <address-model>32 ;
 feature.compose <deduced-address-model>64 : <address-model>64 ; 
 
 rule deduce-address-model ( properties * )
 {
-    local result = [ property.select <address-model> : $(properties) ] ;
-    if $(result)
+    properties = [ toolset-properties $(properties) ] ;
+    if [ configure.builds /boost/architecture//32 : $(properties) : 32-bit ]
     {
-        return $(result) [ property.select <deduced-address-model> : $(properties) ] ;
+        return <deduced-address-model>32 ;
     }
-    else
+    else if [ configure.builds /boost/architecture//64 : $(properties) : 64-bit ]
     {
-        if [ configure.builds /boost/architecture//32 : $(properties) : 32-bit ]
-        {
-            return <deduced-address-model>32 ;
-        }
-        else if [ configure.builds /boost/architecture//64 : $(properties) : 64-bit ]
-        {
-            return <deduced-address-model>64 ;
-        }
+        return <deduced-address-model>64 ;
     }
 }
 
@@ -634,37 +639,30 @@ for a in $(deducable-architectures)
 
 rule deduce-architecture ( properties * )
 {
-    local result = [ property.select <architecture> : $(properties) ] ;
-    if $(result)
+    properties = [ toolset-properties $(properties) ] ;
+    if [ configure.builds /boost/architecture//arm : $(properties) : arm ]
     {
-        return $(result) [ property.select <deduced-architecture> : $(properties) ] ;
+        return <deduced-architecture>arm ;
     }
-    else
+    else if [ configure.builds /boost/architecture//mips1 : $(properties) : mips1 ]
     {
-        if [ configure.builds /boost/architecture//arm : $(properties) : arm ]
-        {
-            return <deduced-architecture>arm ;
-        }
-        else if [ configure.builds /boost/architecture//mips1 : $(properties) : mips1 ]
-        {
-            return <deduced-architecture>mips1 ;
-        }
-        else if [ configure.builds /boost/architecture//power : $(properties) : power ]
-        {
-            return <deduced-architecture>power ;
-        }
-        else if [ configure.builds /boost/architecture//sparc : $(properties) : sparc ]
-        {
-            return <deduced-architecture>sparc ;
-        }
-        else if [ configure.builds /boost/architecture//x86 : $(properties) : x86 ]
-        {
-            return <deduced-architecture>x86 ;
-        }
-        else if [ configure.builds /boost/architecture//combined : $(properties) : combined ]
-        {
-            return <deduced-architecture>combined ;
-        }
+        return <deduced-architecture>mips1 ;
+    }
+    else if [ configure.builds /boost/architecture//power : $(properties) : power ]
+    {
+        return <deduced-architecture>power ;
+    }
+    else if [ configure.builds /boost/architecture//sparc : $(properties) : sparc ]
+    {
+        return <deduced-architecture>sparc ;
+    }
+    else if [ configure.builds /boost/architecture//x86 : $(properties) : x86 ]
+    {
+        return <deduced-architecture>x86 ;
+    }
+    else if [ configure.builds /boost/architecture//combined : $(properties) : combined ]
+    {
+        return <deduced-architecture>combined ;
     }
 }
 

