edit: $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/ironruby-tags/critical_tags.txt;C966724
File: critical_tags.txt
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/ironruby-tags/critical_tags.txt;C966724  (server)    8/13/2009 12:00 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/ironruby-tags/critical_tags.txt;mmmsg
@@ -23,9 +23,7 @@
 core\array\hash_tags.txt:0:critical:Array#hash properly handles recursive arrays
 core\array\hash_tags.txt:0:critical:Array#hash properly handles recursive arrays
 core\array\intersection_tags.txt:0:critical:Array#& properly handles recursive arrays
-core\array\join_tags.txt:0:critical:Array#join raises a NoMethodError if an element does not respond to #to_s 
 core\array\join_tags.txt:0:critical:Array#join does not separates elements when the passed separator is nil
-core\array\multiply_tags.txt:0:critical:Array#* raises a NoMethodError if an element does not respond to #to_s
 core\array\union_tags.txt:0:critical:Array#| properly handles recursive arrays
 core\array\uniq_tags.txt:0:critical:Array#uniq properly handles recursive arrays
 core\array\uniq_tags.txt:0:critical:Array#uniq! properly handles recursive arrays
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/KernelOps.cs;C1055652
File: KernelOps.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/KernelOps.cs;C1055652  (server)    8/13/2009 10:56 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/KernelOps.cs;mmmsg
@@ -1150,24 +1150,19 @@
         /// </summary>
         [RubyMethod("inspect")]
         public static MutableString/*!*/ Inspect(UnaryOpStorage/*!*/ inspectStorage, ConversionStorage<MutableString>/*!*/ tosConversion,
-            object self)
-        {
+            object self) {
 
             var context = tosConversion.Context;
-            if (context.HasInstanceVariables(self))
-            {
+            if (context.HasInstanceVariables(self)) {
                 return RubyUtils.InspectObject(inspectStorage, tosConversion, self);
-            }
-            else
-            {
+            } else {
                 var site = tosConversion.GetSite(ConvertToSAction.Make(context));
                 return site.Target(site, self);
             }
         }
 
         [RubyMethod("to_a")]
-        public static RubyArray/*!*/ ToA(RubyContext/*!*/ context, object self)
-        {
+        public static RubyArray/*!*/ ToA(RubyContext/*!*/ context, object self) {
             RubyArray result = new RubyArray();
             result.Add(self);
             return context.TaintObjectBy(result, self);
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;C1044096
File: RubyClass.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;C1044096  (server)    8/13/2009 11:42 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;mmmsg
@@ -99,7 +99,7 @@
         #region Dynamic Sites
 
         private CallSite<Func<CallSite, object, object>> _inspectSite;
-        private CallSite<Func<CallSite, object, MutableString>> _stringConversionSite;
+        private CallSite<Func<CallSite, object, MutableString>> _inspectResultConversionSite;
         private CallSite<Func<CallSite, object, object, object>> _eqlSite;
         private CallSite<Func<CallSite, object, object>> _hashSite;
         private CallSite<Func<CallSite, object, object>> _toStringSite;
@@ -113,8 +113,8 @@
             get { return RubyUtils.GetCallSite(ref _newSite, Context, "new", 1); }
         }
         
-        public CallSite<Func<CallSite, object, MutableString>>/*!*/ StringConversionSite {
-            get { return RubyUtils.GetCallSite(ref _stringConversionSite, ConvertToSAction.Make(Context)); } 
+        public CallSite<Func<CallSite, object, MutableString>>/*!*/ InspectResultConversionSite {
+            get { return RubyUtils.GetCallSite(ref _inspectResultConversionSite, ConvertToSAction.Make(Context)); } 
         }
 
         public CallSite<Func<CallSite, object, object, object>>/*!*/ EqualsSite {
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs;C1055652
File: RubyContext.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs;C1055652  (server)    8/13/2009 11:21 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs;mmmsg
@@ -1507,25 +1507,12 @@
         public MutableString/*!*/ Inspect(object obj) {
             RubyClass cls = GetClassOf(obj);
             var inspect = cls.InspectSite;
-            var toS = cls.StringConversionSite;
+            var toS = cls.InspectResultConversionSite;
             return toS.Target(toS, inspect.Target(inspect, obj));
         }
 
         #endregion
 
-        internal string InspectEnsuringClassName(object self) {
-            if (self == null) {
-                return "nil:NilClass";
-            } else {
-                string strObject = Inspect(self).ConvertToString();
-                if (!strObject.StartsWith("#")) {
-                    strObject += ":" + GetClassName(self);
-                }
-                return strObject;
-            }
-        }
-
-
         #region Global Variables: General access (thread-safe)
 
         public object GetGlobalVariable(string/*!*/ name) {
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExceptions.cs;C1055652
File: RubyExceptions.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExceptions.cs;C1055652  (server)    8/13/2009 11:28 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExceptions.cs;mmmsg
@@ -20,6 +20,7 @@
 using System.Security;
 using IronRuby.Builtins;
 using Microsoft.Scripting.Utils;
+using IronRuby.Runtime.Calls;
 
 namespace IronRuby.Runtime {
     /// <summary>
@@ -143,10 +144,33 @@
             return FormatMethodMissingMessage(context, self, name, "undefined method `{0}' for {1}");
         }
 
-        internal static string/*!*/ FormatMethodMissingMessage(RubyContext/*!*/ context, object self, string/*!*/ name, string/*!*/ message) {
+        [ThreadStatic]
+        private static bool _disableMethodMissingMessageFormatting;
+
+        internal static string/*!*/ FormatMethodMissingMessage(RubyContext/*!*/ context, object obj, string/*!*/ name, string/*!*/ message) {
             Assert.NotNull(name);
-            string strObject = context.InspectEnsuringClassName(self);
-            return String.Format(message, name, strObject);
+
+            string str;
+            if (obj == null) {
+                str = "nil:NilClass";
+            } else if (_disableMethodMissingMessageFormatting) {
+                str = RubyUtils.ObjectToMutableString(context, obj).ToString();
+            } else {
+                _disableMethodMissingMessageFormatting = true;
+                try {
+                    str = context.Inspect(obj).ConvertToString();
+                    if (!str.StartsWith("#")) {
+                        str += ":" + context.GetClassName(obj);
+                    }
+                } catch (Exception) {
+                    // MRI: swallows all exceptions
+                    str = RubyUtils.ObjectToMutableString(context, obj).ToString();
+                } finally {
+                    _disableMethodMissingMessageFormatting = false;
+                }
+            }
+            
+            return String.Format(message, name, str);
         }
 
         #endregion
===================================================================
