Index: VcConfigurationBase.cs
===================================================================
--- VcConfigurationBase.cs	(revision 118)
+++ VcConfigurationBase.cs	(working copy)
@@ -115,10 +115,23 @@
                     "UsePrecompiledHeader");
                 if (usePCHString == null) {
                     return UsePrecompiledHeader.Unspecified;
+                }
+                int intVal = int.Parse(usePCHString, CultureInfo.InvariantCulture);
+
+                if (this.Project.ProductVersion >= ProductVersion.Whidbey)
+                {
+                    switch(intVal)
+                    {
+                        case 0 :
+                            return UsePrecompiledHeader.No;
+                        case 1:
+                            return UsePrecompiledHeader.Create;
+                        case 2:
+                            return UsePrecompiledHeader.Use;
+                    }                    
                 }
 
-                return (UsePrecompiledHeader) Enum.ToObject(typeof(UsePrecompiledHeader), 
-                    int.Parse(usePCHString, CultureInfo.InvariantCulture));
+                return (UsePrecompiledHeader) Enum.ToObject(typeof(UsePrecompiledHeader), intVal);
             }
         }
 
Index: VcProject.cs
===================================================================
--- VcProject.cs	(revision 118)
+++ VcProject.cs	(working copy)
@@ -707,13 +707,30 @@
                         addOptionsLine = reader.ReadLine();
                     }
                 }
+            }
+
+            //exception handling stuff
+            string exceptionHandling = fileConfig.GetToolSetting(VcConfigurationBase.CLCompilerTool, "ExceptionHandling");
+            if (exceptionHandling == null)
+            {
+                if (ProductVersion >= ProductVersion.Whidbey) exceptionHandling = "2";
+                else exceptionHandling = "false";
+            }
+            else exceptionHandling = exceptionHandling.ToLower();
+            switch(exceptionHandling)
+            {
+                case "0":
+                case "false":
+                    break;
+                case "1":
+                case "true":
+                    clTask.Arguments.Add(new Argument("/EHsc"));
+                    break;
+                case "2":
+                    clTask.Arguments.Add(new Argument("/EHa"));
+                    break;
             }
 
-            string exceptionHandling = fileConfig.GetToolSetting(VcConfigurationBase.CLCompilerTool, "ExceptionHandling");
-            if (exceptionHandling == null || string.Compare(exceptionHandling, "true", true, CultureInfo.InvariantCulture) == 0) {
-                clTask.Arguments.Add(new Argument("/EHsc"));
-            }
-
             string browseInformation = fileConfig.GetToolSetting(VcConfigurationBase.CLCompilerTool, "BrowseInformation");
             if (!StringUtils.IsNullOrEmpty(browseInformation) && browseInformation != "0") {
                 // determine file name of browse information file
@@ -1825,14 +1842,17 @@
                 return false;
             }
 
-            try {
-                GetProductVersion(docElement);
-                // no need to perform version check here as this is done in 
-                // GetProductVersion
-            } catch {
-                // product version could not be determined or is not supported
-                return false;
-            }
+            //MAL 2007/12/20
+            //this is double check - really needed? In addition, when version check fails, it gives odd error.
+            //2nd check is made in DetermineProductVersion (called from ProjectBase constructor)
+            //try {
+            //    GetProductVersion(docElement);
+            //    // no need to perform version check here as this is done in 
+            //    // GetProductVersion
+            //} catch {
+            //    // product version could not be determined or is not supported
+            //    return false;
+            //}
 
             return true;
         }
@@ -1879,7 +1899,9 @@
             // check if we're dealing with a valid version number
             Version productVersion = null;
             try {
-                productVersion = new Version(productVersionAttribute.Value);
+                string ver = productVersionAttribute.Value;
+                ver=ver.Replace(',', '.'); //Whidbey (8,00) and Orcas (9,00) are using comma instead of point
+                productVersion = new Version(ver);
             } catch (Exception ex) {
                 throw new BuildException(string.Format(CultureInfo.InvariantCulture,
                     "The value of the \"Version\" attribute ({0}) is not a valid"
@@ -1887,17 +1909,23 @@
                     Location.UnknownLocation, ex);
             }
 
-            if (productVersion.Major == 7) {
-                switch (productVersion.Minor) {
-                    case 0:
-                        return ProductVersion.Rainier;
-                    case 10:
-                        return ProductVersion.Everett;
-                }
+            switch(productVersion.Major) {
+                case 7:
+                    switch (productVersion.Minor) {
+                        case 0:
+                            return ProductVersion.Rainier;
+                        case 10:
+                            return ProductVersion.Everett;
+                    }
+                    break;
+                case 8:
+                    return ProductVersion.Whidbey;
+                case 9:
+                    return ProductVersion.Orcas;
             } 
 
             throw new BuildException(string.Format(CultureInfo.InvariantCulture,
-                "Visual Studio version \"{0\" is not supported.",
+                "Visual Studio version \"{0}\" is not supported.",
                 productVersion.ToString()), Location.UnknownLocation);
         }
 
Index: VcProjectConfiguration.cs
===================================================================
--- VcProjectConfiguration.cs	(revision 118)
+++ VcProjectConfiguration.cs	(working copy)
@@ -59,7 +59,20 @@
 
             string managedExtentions = GetXmlAttributeValue(elem, "ManagedExtensions");
             if (managedExtentions != null) {
-                _managedExtensions = string.Compare(managedExtentions.Trim(), "true", true, CultureInfo.InvariantCulture) == 0;
+                switch(managedExtentions.ToLower())
+                {
+                    case "false":
+                    case "0":
+                        _managedExtensions = false;
+                        break;
+                    case "true":
+                    case "1":
+                        _managedExtensions = true;
+                        break;
+                    default:
+                        throw new BuildException(String.Format("ManagedExtensions '{0}' is not supported yet.",managedExtentions));
+                }
+                
             }
 
             // get configuration type
