<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>Merlin/Main/Languages/Ruby/Licenses/CHANGELOG.txt</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Licenses/LICENSE.CPL.txt</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Licenses/LICENSE.MSPL.html</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Licenses/LICENSE.Ruby.txt</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Licenses/README.txt</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Conversions/CompositeConversionAction.cs</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Conversions/ConvertToSAction.cs</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Conversions/Converter.Generated.cs</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Conversions/Converter.Generator.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Conversions/Converter.cs</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Conversions/GenericConversionAction.cs</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Conversions/ProtocolConversionAction.cs</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.FlowControl.cs</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Ruby4.sln</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/flagenumeration/and_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/flagenumeration/complement_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/flagenumeration/or_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/flagenumeration/xor_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/abs_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/ceil_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/coerce_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/comparison_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/divide_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/divmod_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/equal_value_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/exponent_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/finite_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/floor_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/gt_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/gte_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/hash_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/induced_from_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/infinite_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/lt_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/lte_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/minus_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/modulo_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/multiply_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/nan_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/plus_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/round_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/to_f_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/to_i_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/to_int_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/to_s_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/truncate_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/float/zero_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/abs_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/and_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/append_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/comparison_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/complement_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/div_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/divide_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/divmod_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/element_reference_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/equal_value_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/exponent_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/gt_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/gte_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/lt_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/lte_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/minus_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/modulo_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/multiply_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/or_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/plus_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/quo_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/right_shift_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/to_f_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/to_s_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/uminus_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/xor_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/integer/zero_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/multidimensionalarray/element_reference_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/multidimensionalarray/element_set_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/ActualName_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/Equals_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/GetHashCode_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/HasMangledName_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/MangledName_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/clr_name_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/clr_to_ruby_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/comparison_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/dump_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/equal_value_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/inspect_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/mangle_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/ruby_name_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/ruby_to_clr_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/to_s_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/to_str_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/to_sym_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/name/unmangle_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/profile_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/Clear_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/ContainsName_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/ContainsVariable_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/Dict_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/GetAllItems_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/GetAllKeys_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/GetExtension_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/GetVariable_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/IsVisible_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/Items_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/Keys_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/Parent_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/SetExtension_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/SetName_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/SetObjectName_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/SetVariable_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/TryGetName_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/TryGetObjectName_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/TryGetVariable_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/TryRemoveObjectName_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/scope/TryRemoveVariable_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/case_compare_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/comparison_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/dump_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/empty_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/encoding_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/equal_value_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/hex_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/inspect_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/intern_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/modulo_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/multiply_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/oct_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/plus_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/size_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/to_clr_string_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/to_f_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/to_i_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/to_s_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/to_str_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/clr/string/to_sym_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/configuration_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/create_engine_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/create_ruby_setup_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/create_runtime_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/get_engine_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/get_execution_context_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/globals_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/load_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/loaded_assemblies_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/loaded_scripts_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/require_file_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/IronRuby/require_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/method/invocation/internal_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Runtime/Microsoft.Scripting/Runtime/IConvertibleMetaObject.cs</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -33,6 +33,17 @@ describe &quot;Kernel.rand&quot; do
       (rand(100) &lt; 100).should == true
     end
   end
+
+  it &quot;returns different values each time&quot; do
+    result = false
+    5.times do
+      #this tests for caching the callsite when on the same line. Repeated 5
+      #times for the random chance that the two numbers are equal
+      a = [rand(100), rand(100)]
+      result |= (a[0] != a[1])
+    end
+    result.should == true
+  end
 end
 
 describe &quot;Kernel#rand&quot; do</diff>
      <filename>Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/rubyspec/core/kernel/rand_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,9 @@
 &#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;Project ToolsVersion=&quot;3.5&quot; DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot;&gt;
+&lt;Project ToolsVersion=&quot;4.0&quot; DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.30729&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{ED82A346-1CD9-4CB0-9C00-4CDD4CF577CF}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Library&lt;/OutputType&gt;
@@ -140,4 +140,4 @@
   &lt;Import Project=&quot;$(MSBuildBinPath)\Microsoft.CSharp.targets&quot; Condition=&quot; '$(SilverlightTreeBuild)' != 'true' &quot; /&gt;
   &lt;Import Project=&quot;..\..\silverlight.build.targets&quot; Condition=&quot; '$(SilverlightTreeBuild)' == 'true' &quot; /&gt;
   &lt;Import Condition=&quot; '$(Golden)' == 'True'&quot; Project=&quot;..\..\External\Build\Microsoft.VersionNumber.targets&quot; /&gt;
-&lt;/Project&gt;
+&lt;/Project&gt;
\ No newline at end of file</diff>
      <filename>Merlin/Main/Debugging/Microsoft.Scripting.Debugging/Microsoft.Scripting.Debugging.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,9 @@
 &#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;Project ToolsVersion=&quot;3.5&quot; DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot;&gt;
+&lt;Project ToolsVersion=&quot;4.0&quot; DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.30729&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{7D07B0CE-FFA3-4402-BFF2-5F42B4267D2A}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Exe&lt;/OutputType&gt;
@@ -23,6 +23,7 @@
     &lt;SignedDir Condition=&quot;'$(SignAssembly)' == 'true'&quot;&gt;Signed&lt;/SignedDir&gt;
     &lt;SignedDir Condition=&quot;$(SignAssembly) != true&quot;&gt;Unsigned&lt;/SignedDir&gt;
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
+    &lt;TargetFrameworkVersion&gt;v3.5&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' &quot;&gt;
     &lt;DebugSymbols&gt;true&lt;/DebugSymbols&gt;</diff>
      <filename>Merlin/Main/Hosts/SilverLight/Chiron/Chiron.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,9 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.21022&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{C86A7A7B-3086-4136-9B56-17E8DCB38C8D}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Library&lt;/OutputType&gt;
@@ -19,6 +20,7 @@
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
     &lt;SilverlightBuild&gt;true&lt;/SilverlightBuild&gt;
     &lt;SilverlightPath Condition=&quot;$(SilverlightPath) == ''&quot;&gt;..\..\..\Utilities\Silverlight\x86ret\&lt;/SilverlightPath&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'Silverlight Debug|AnyCPU' &quot;&gt;
     &lt;DebugSymbols&gt;true&lt;/DebugSymbols&gt;
@@ -127,4 +129,4 @@
     &lt;PostBuildEvent&gt;
     &lt;/PostBuildEvent&gt;
   &lt;/PropertyGroup&gt;
-&lt;/Project&gt;
+&lt;/Project&gt;
\ No newline at end of file</diff>
      <filename>Merlin/Main/Hosts/SilverLight/Microsoft.Scripting.SilverLight/Microsoft.Scripting.Silverlight.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,9 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.30729&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{155CE436-1669-4A48-8095-410F2430237F}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Library&lt;/OutputType&gt;
@@ -13,7 +14,6 @@
     &lt;SccLocalPath&gt;SAK&lt;/SccLocalPath&gt;
     &lt;SccAuxPath&gt;SAK&lt;/SccAuxPath&gt;
     &lt;SccProvider&gt;SAK&lt;/SccProvider&gt;
-    &lt;OldToolsVersion&gt;2.0&lt;/OldToolsVersion&gt;
     &lt;WarningsNotAsErrors&gt;618,1685&lt;/WarningsNotAsErrors&gt;
     &lt;AssemblyOriginatorKeyFile&gt;..\..\..\Support\MSSharedLibKey.snk&lt;/AssemblyOriginatorKeyFile&gt;
     &lt;SignAssembly Condition=&quot;'$(SignAssembly)' == '' And Exists('$(AssemblyOriginatorKeyFile)')&quot;&gt;true&lt;/SignAssembly&gt;
@@ -21,6 +21,7 @@
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
     &lt;SilverlightPath Condition=&quot;'$(SilverlightPath)' == ''&quot;&gt;..\..\..\Utilities\Silverlight\x86ret\&lt;/SilverlightPath&gt;
     &lt;BaseAddress&gt;885063680&lt;/BaseAddress&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)' == 'Debug' &quot;&gt;
     &lt;DebugSymbols&gt;true&lt;/DebugSymbols&gt;</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPython.Modules/IronPython.Modules.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,9 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.30729&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{95289EA9-5778-489D-AB48-F81F2CE2DA32}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Library&lt;/OutputType&gt;
@@ -13,7 +14,6 @@
     &lt;SccLocalPath&gt;SAK&lt;/SccLocalPath&gt;
     &lt;SccAuxPath&gt;SAK&lt;/SccAuxPath&gt;
     &lt;SccProvider&gt;SAK&lt;/SccProvider&gt;
-    &lt;OldToolsVersion&gt;2.0&lt;/OldToolsVersion&gt;
     &lt;TreatWarningsAsErrors&gt;true&lt;/TreatWarningsAsErrors&gt;
     &lt;WarningsNotAsErrors&gt;618,1685&lt;/WarningsNotAsErrors&gt;
     &lt;AssemblyOriginatorKeyFile&gt;..\..\..\Support\MSSharedLibKey.snk&lt;/AssemblyOriginatorKeyFile&gt;
@@ -22,6 +22,7 @@
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
     &lt;SilverlightPath Condition=&quot;$(SilverlightPath) == ''&quot;&gt;..\..\..\Utilities\Silverlight\x86ret\&lt;/SilverlightPath&gt;
     &lt;BaseAddress&gt;879755264&lt;/BaseAddress&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)' == 'Debug' &quot;&gt;
     &lt;DebugSymbols&gt;true&lt;/DebugSymbols&gt;</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPython/IronPython.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -34,7 +34,7 @@ namespace IronPython.Runtime.Binding {
     using Ast = System.Linq.Expressions.Expression;
     using AstUtils = Microsoft.Scripting.Ast.Utils;
 
-    class MetaPythonFunction : MetaPythonObject, IPythonInvokable, IPythonOperable, IPythonConvertible, IInferableInvokable {
+    class MetaPythonFunction : MetaPythonObject, IPythonInvokable, IPythonOperable, IPythonConvertible, IInferableInvokable, IConvertibleMetaObject {
         public MetaPythonFunction(Expression/*!*/ expression, BindingRestrictions/*!*/ restrictions, PythonFunction/*!*/ value)
             : base(expression, BindingRestrictions.Empty, value) {
             Assert.NotNull(value);
@@ -930,5 +930,13 @@ namespace IronPython.Runtime.Binding {
         }
 
         #endregion
+
+        #region IConvertibleMetaObject Members
+
+        bool IConvertibleMetaObject.CanConvertTo(Type/*!*/ type, bool @explicit) {
+            return type.IsSubclassOf(typeof(Delegate));
+        }
+
+        #endregion
     }
 }</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPython/Runtime/Binding/MetaPythonFunction.cs</filename>
    </modified>
    <modified>
      <diff>@@ -75,7 +75,7 @@ namespace IronPython.Runtime.Binding {
             }
         }
 
-        public override bool CanConvertFrom(Type fromType, ParameterWrapper toParameter, NarrowingLevel level) {
+        public override bool CanConvertFrom(Type fromType, DynamicMetaObject fromArg, ParameterWrapper toParameter, NarrowingLevel level) {
             if ((fromType == typeof(List) || fromType.IsSubclassOf(typeof(List)))) {
                 if (toParameter.Type.IsGenericType &amp;&amp;
                     toParameter.Type.GetGenericTypeDefinition() == typeof(IList&lt;&gt;) &amp;&amp;
@@ -98,7 +98,7 @@ namespace IronPython.Runtime.Binding {
                 }
             }
 
-            return base.CanConvertFrom(fromType, toParameter, level);
+            return base.CanConvertFrom(fromType, fromArg, toParameter, level);
         }
 
         protected override BitArray MapSpecialParameters(ParameterMapping/*!*/ mapping) {</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPython/Runtime/Binding/PythonOverloadResolver.cs</filename>
    </modified>
    <modified>
      <diff>@@ -60,11 +60,6 @@ internal sealed class PythonConsoleHost : ConsoleHost {
             Environment.SetEnvironmentVariable(&quot;TERM&quot;, &quot;dumb&quot;);
         }
 
-        if (typeof(DynamicMethod).GetConstructor(new Type[] { typeof(string), typeof(Type), typeof(Type[]), typeof(bool) }) == null) {
-            Console.WriteLine(&quot;IronPython requires .NET 2.0 SP1 or later to run.&quot;);
-            Environment.Exit(1);
-        }
-
         return new PythonConsoleHost().Run(args);
     }
 }
\ No newline at end of file</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPythonConsole/Console.cs</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,9 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.30729&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{811AC32C-11F3-4ED8-92A7-A7E39C2BB704}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Exe&lt;/OutputType&gt;
@@ -14,7 +15,6 @@
     &lt;SccAuxPath&gt;SAK&lt;/SccAuxPath&gt;
     &lt;SccProvider&gt;SAK&lt;/SccProvider&gt;
     &lt;ApplicationIcon&gt;ipy.ico&lt;/ApplicationIcon&gt;
-    &lt;OldToolsVersion&gt;2.0&lt;/OldToolsVersion&gt;
     &lt;WarningsNotAsErrors&gt;618,1685&lt;/WarningsNotAsErrors&gt;
     &lt;AssemblyOriginatorKeyFile&gt;..\..\..\Support\MSSharedLibKey.snk&lt;/AssemblyOriginatorKeyFile&gt;
     &lt;SignAssembly Condition=&quot;'$(SignAssembly)' == '' And Exists('$(AssemblyOriginatorKeyFile)')&quot;&gt;true&lt;/SignAssembly&gt;
@@ -23,6 +23,7 @@
     &lt;SignedDir Condition=&quot;$(SignAssembly) != true&quot;&gt;Unsigned&lt;/SignedDir&gt;
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
     &lt;PlatformTarget&gt;x86&lt;/PlatformTarget&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' &quot;&gt;
     &lt;DebugSymbols&gt;true&lt;/DebugSymbols&gt;</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPythonConsole/IronPythonConsole.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,9 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.30729&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{F1D861C5-D9D5-4CDA-968B-8275F5D9F6D2}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Exe&lt;/OutputType&gt;
@@ -14,7 +15,6 @@
     &lt;SccAuxPath&gt;SAK&lt;/SccAuxPath&gt;
     &lt;SccProvider&gt;SAK&lt;/SccProvider&gt;
     &lt;ApplicationIcon&gt;..\IronPythonConsole\ipy.ico&lt;/ApplicationIcon&gt;
-    &lt;OldToolsVersion&gt;2.0&lt;/OldToolsVersion&gt;
     &lt;WarningsNotAsErrors&gt;618,1685&lt;/WarningsNotAsErrors&gt;
     &lt;AssemblyOriginatorKeyFile&gt;..\..\..\Support\MSSharedLibKey.snk&lt;/AssemblyOriginatorKeyFile&gt;
     &lt;SignAssembly Condition=&quot;'$(SignAssembly)' == '' And Exists('$(AssemblyOriginatorKeyFile)')&quot;&gt;true&lt;/SignAssembly&gt;
@@ -22,6 +22,7 @@
     &lt;SignedDir Condition=&quot;'$(SignAssembly)' == 'true'&quot;&gt;Signed&lt;/SignedDir&gt;
     &lt;SignedDir Condition=&quot;$(SignAssembly) != true&quot;&gt;Unsigned&lt;/SignedDir&gt;
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' &quot;&gt;
     &lt;DebugSymbols&gt;true&lt;/DebugSymbols&gt;</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPythonConsoleAny/IronPythonConsoleAny.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -252,6 +252,12 @@ namespace IronPythonTest.BinderTest {
         // generics
         public void M130(Int32 arg) { Flag.Value = 130; }
         public void M130&lt;T&gt;(T arg) { Flag.Value = 230; }
+
+        // narrowing levels and __int__ conversion:
+        // If 2 instances of a Python subclass of C3 that implements __int__ are passed as arguments this 
+        // the first overload should be preferred.
+        public void M140(C3 a, int b) { Flag.Value = 140; }
+        public void M140(int a, int b) { Flag.Value = 240; } 
     }
 
     public interface I1 { void M(); }</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPythonTest/BinderTest.cs</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,9 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.30729&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{B6B42537-07F8-4F6C-A99A-B155CAEB124E}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Library&lt;/OutputType&gt;
@@ -16,12 +17,12 @@
     &lt;StartupObject&gt;
     &lt;/StartupObject&gt;
     &lt;WarningsNotAsErrors&gt;618,1685&lt;/WarningsNotAsErrors&gt;
-    &lt;OldToolsVersion&gt;2.0&lt;/OldToolsVersion&gt;
     &lt;AssemblyOriginatorKeyFile&gt;..\..\..\Support\MSSharedLibKey.snk&lt;/AssemblyOriginatorKeyFile&gt;
     &lt;SignAssembly Condition=&quot;'$(SignAssembly)' == '' And Exists('$(AssemblyOriginatorKeyFile)')&quot;&gt;true&lt;/SignAssembly&gt;
     &lt;SignedSym Condition=&quot;'$(SignAssembly)' == 'true'&quot;&gt;SIGNED&lt;/SignedSym&gt;
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
     &lt;SilverlightPath Condition=&quot;'$(SilverlightPath)' == ''&quot;&gt;..\..\..\Utilities\Silverlight\x86ret\&lt;/SilverlightPath&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' &quot;&gt;
     &lt;DebugSymbols&gt;true&lt;/DebugSymbols&gt;</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPythonTest/IronPythonTest.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,9 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.30729&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{81DA19C7-4FEC-47E7-981B-D9310D549F95}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;WinExe&lt;/OutputType&gt;
@@ -16,7 +17,7 @@
     &lt;SccAuxPath&gt;SAK&lt;/SccAuxPath&gt;
     &lt;SccProvider&gt;SAK&lt;/SccProvider&gt;
     &lt;ApplicationIcon&gt;ipy.ico&lt;/ApplicationIcon&gt;
-    &lt;OldToolsVersion&gt;2.0&lt;/OldToolsVersion&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
     &lt;PublishUrl&gt;publish\&lt;/PublishUrl&gt;
     &lt;Install&gt;true&lt;/Install&gt;
     &lt;InstallFrom&gt;Disk&lt;/InstallFrom&gt;</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPythonWindow/IronPythonWindow.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,8 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.30729&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{7F6F9AB3-9943-4316-BD4C-A10F580BC75C}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;WinExe&lt;/OutputType&gt;
@@ -16,7 +16,7 @@
     &lt;SccAuxPath&gt;SAK&lt;/SccAuxPath&gt;
     &lt;SccProvider&gt;SAK&lt;/SccProvider&gt;
     &lt;ApplicationIcon&gt;..\IronPythonWindow\ipy.ico&lt;/ApplicationIcon&gt;
-    &lt;OldToolsVersion&gt;2.0&lt;/OldToolsVersion&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
     &lt;PublishUrl&gt;publish\&lt;/PublishUrl&gt;
     &lt;Install&gt;true&lt;/Install&gt;
     &lt;InstallFrom&gt;Disk&lt;/InstallFrom&gt;</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPythonWindowAny/IronPythonWindowAny.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,9 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.30718&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{166940A1-2C91-4BD0-B72B-A517FBD8BF0B}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Exe&lt;/OutputType&gt;
@@ -13,12 +14,12 @@
     &lt;SccLocalPath&gt;SAK&lt;/SccLocalPath&gt;
     &lt;SccAuxPath&gt;SAK&lt;/SccAuxPath&gt;
     &lt;SccProvider&gt;SAK&lt;/SccProvider&gt;
-    &lt;OldToolsVersion&gt;2.0&lt;/OldToolsVersion&gt;
     &lt;WarningLevel&gt;4&lt;/WarningLevel&gt;
     &lt;AssemblyOriginatorKeyFile&gt;..\..\..\Support\MSSharedLibKey.snk&lt;/AssemblyOriginatorKeyFile&gt;
     &lt;SignAssembly Condition=&quot;'$(SignAssembly)' == '' And Exists('$(AssemblyOriginatorKeyFile)')&quot;&gt;true&lt;/SignAssembly&gt;
     &lt;SignedSym Condition=&quot;'$(SignAssembly)' == 'true'&quot;&gt;SIGNED&lt;/SignedSym&gt;
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' &quot;&gt;
     &lt;DebugSymbols&gt;true&lt;/DebugSymbols&gt;
@@ -69,4 +70,4 @@
   &lt;Target Name=&quot;AfterBuild&quot;&gt;
   &lt;/Target&gt;
   --&gt;
-&lt;/Project&gt;
+&lt;/Project&gt;
\ No newline at end of file</diff>
      <filename>Merlin/Main/Languages/Ruby/ClassInitGenerator/ClassInitGenerator.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -140,6 +140,10 @@ internal class LibraryDef {
         public IDictionary&lt;string, HiddenMethod&gt;/*!*/ HiddenInstanceMethods = new SortedDictionary&lt;string, HiddenMethod&gt;();
         public IDictionary&lt;string, HiddenMethod&gt;/*!*/ HiddenClassMethods = new SortedDictionary&lt;string, HiddenMethod&gt;();
 
+        // { new_name -&gt; old_name }
+        public IDictionary&lt;string, string&gt;/*!*/ ClassMethodAliases = new SortedDictionary&lt;string, string&gt;();
+        public IDictionary&lt;string, string&gt;/*!*/ InstanceMethodAliases = new SortedDictionary&lt;string, string&gt;();
+
         public List&lt;MethodInfo&gt;/*!*/ Factories = new List&lt;MethodInfo&gt;();
 
         public List&lt;MixinRef&gt;/*!*/ Mixins = new List&lt;MixinRef&gt;();
@@ -206,7 +210,10 @@ internal class LibraryDef {
         }
 
         public bool HasInstanceInitializer {
-            get { return InstanceMethods.Count &gt; 0 || HiddenInstanceMethods.Count &gt; 0 || HasCopyInclusions || IsPrimitive; }
+            get { 
+                return InstanceMethods.Count &gt; 0 || HiddenInstanceMethods.Count &gt; 0 || InstanceMethodAliases.Count &gt; 0
+                    || HasCopyInclusions || IsPrimitive; 
+            }
         }
 
         public bool HasConstantsInitializer {
@@ -214,7 +221,10 @@ internal class LibraryDef {
         }
 
         public bool HasClassInitializer {
-            get { return ClassMethods.Count &gt; 0 || HiddenClassMethods.Count &gt; 0 || HasCopyInclusions || IsPrimitive; }
+            get { 
+                return ClassMethods.Count &gt; 0 || HiddenClassMethods.Count &gt; 0 || ClassMethodAliases.Count &gt; 0 
+                    || HasCopyInclusions || IsPrimitive; 
+            }
         }
 
         public const string/*!*/ ObjectClassRef = &quot;Context.ObjectClass&quot;;
@@ -396,21 +406,35 @@ internal class LibraryDef {
 
                 // hidden CLR methods:
                 foreach (HideMethodAttribute method in trait.GetCustomAttributes(typeof(HideMethodAttribute), false)) {
-                    // TODO: warning, method already removed, method not found ...
-                    if (method.IsStatic) {
-                        def.HiddenClassMethods[method.Name] = HiddenMethod.ClrInvisible;
+                    var dict = (method.IsStatic) ? def.HiddenClassMethods : def.HiddenInstanceMethods;
+                    if (dict.ContainsKey(method.Name)) {
+                        LogError(&quot;Method {0} is already hidden/removed&quot;, method.Name);
                     } else {
-                        def.HiddenInstanceMethods[method.Name] = HiddenMethod.ClrInvisible;
+                        dict.Add(method.Name, HiddenMethod.ClrInvisible);
                     }
                 }
 
                 // undefined methods:
                 foreach (UndefineMethodAttribute method in trait.GetCustomAttributes(typeof(UndefineMethodAttribute), false)) {
-                    // TODO: warning, method already removed, method not found ...
-                    if (method.IsStatic) {
-                        def.HiddenClassMethods[method.Name] = HiddenMethod.Undefined;
+                    var dict = (method.IsStatic) ? def.HiddenClassMethods : def.HiddenInstanceMethods;
+                    if (dict.ContainsKey(method.Name)) {
+                        LogError(&quot;Method {0} is already hidden/removed&quot;, method.Name);
+                    } else {
+                        dict.Add(method.Name, HiddenMethod.Undefined);
+                    }
+                }
+
+                // aliased methods:
+                foreach (AliasMethodAttribute method in trait.GetCustomAttributes(typeof(AliasMethodAttribute), false)) {
+                    var aliasDict = (method.IsStatic) ? def.ClassMethodAliases : def.InstanceMethodAliases;
+                    var hiddenDict = (method.IsStatic) ? def.HiddenClassMethods : def.HiddenInstanceMethods;
+
+                    if (hiddenDict.ContainsKey(method.NewName)) {
+                        LogError(&quot;Cannot alias hidden/removed method {0}&quot;, method.NewName);
+                    } else if (aliasDict.ContainsKey(method.NewName)) {
+                        LogError(&quot;Duplicate method alias {0} {1}&quot;, method.NewName, method.OldName);
                     } else {
-                        def.HiddenInstanceMethods[method.Name] = HiddenMethod.Undefined;
+                        aliasDict.Add(method.NewName, method.OldName);
                     }
                 }
             }
@@ -421,6 +445,10 @@ internal class LibraryDef {
         // declaring modules, build configurations:
         foreach (ModuleDef def in _moduleDefs.Values) {
             if (!def.IsExtension) {
+                if (def.Extends.IsGenericTypeDefinition) {
+                    LogError(&quot;Only extension modules or classes can be generic type definitions '{0}'&quot;, def.QualifiedName);
+                }
+
                 // finds the inner most Ruby module def containing this module def:
                 ModuleDef declaringDef = GetDeclaringModuleDef(def);
                 if (declaringDef != null) {
@@ -497,6 +525,10 @@ internal class LibraryDef {
                 } else if (!mixin.Copy) {
                     // define a module ref-variable for the type of the mixin:
                     mixin.Module.RefName = MakeModuleReference(mixin.Module.Type);
+                } else {
+                    LogError(&quot;Cannot copy-include a mixin not defined in this library ('{0}' includes '{1}')&quot;, 
+                        def.QualifiedName, mixin.Module.Type
+                    );
                 }
             }
         }
@@ -1102,6 +1134,7 @@ internal class LibraryDef {
             GenerateIncludedTraitLoaders(moduleDef, isInstance);
             GenerateHiddenMethods(isInstance ? moduleDef.HiddenInstanceMethods : moduleDef.HiddenClassMethods);
             GenerateMethods(moduleDef.Trait, isInstance ? moduleDef.InstanceMethods : moduleDef.ClassMethods);
+            GenerateMethodAliases(isInstance ? moduleDef.InstanceMethodAliases : moduleDef.ClassMethodAliases);
 
             _output.Indent--;
             _output.WriteLine(&quot;}&quot;);
@@ -1177,6 +1210,12 @@ internal class LibraryDef {
         }
     }
 
+    private void GenerateMethodAliases(IDictionary&lt;string, string&gt;/*!*/ aliases) {
+        foreach (var alias in aliases) {
+            _output.WriteLine(&quot;module.AddMethodAlias(\&quot;{0}\&quot;, \&quot;{1}\&quot;);&quot;, alias.Key, alias.Value);
+        }
+    }
+
     private void GenerateMethods(Type/*!*/ type, IDictionary&lt;string, MethodDef&gt;/*!*/ methods) {
         foreach (MethodDef def in methods.Values) {
             if (def.BuildConfig != null) {</diff>
      <filename>Merlin/Main/Languages/Ruby/ClassInitGenerator/Libraries/LibraryDef.cs</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,9 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.30729&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{D6AB587D-A888-4B98-85AC-F15E36F53838}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Exe&lt;/OutputType&gt;
@@ -22,6 +23,7 @@
     &lt;SignedDir Condition=&quot;$(SignAssembly) != true&quot;&gt;Unsigned&lt;/SignedDir&gt;
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
     &lt;PlatformTarget&gt;x86&lt;/PlatformTarget&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' &quot;&gt;
     &lt;DebugSymbols&gt;true&lt;/DebugSymbols&gt;</diff>
      <filename>Merlin/Main/Languages/Ruby/Console/Ruby.Console.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,8 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.30729&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{6EE7A428-D803-41BC-8248-1297C3ACE369}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Exe&lt;/OutputType&gt;
@@ -21,6 +21,7 @@
     &lt;SignedDir Condition=&quot;'$(SignAssembly)' == 'true'&quot;&gt;Signed&lt;/SignedDir&gt;
     &lt;SignedDir Condition=&quot;$(SignAssembly) != true&quot;&gt;Unsigned&lt;/SignedDir&gt;
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' &quot;&gt;
     &lt;DebugSymbols&gt;true&lt;/DebugSymbols&gt;</diff>
      <filename>Merlin/Main/Languages/Ruby/Console/Ruby.ConsoleAny.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,9 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.21022&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{8103D91B-89D8-4A18-9A40-426992602EA2}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Exe&lt;/OutputType&gt;
@@ -23,6 +24,7 @@
     &lt;SignedDir Condition=&quot;'$(SignAssembly)' == 'true'&quot;&gt;Signed&lt;/SignedDir&gt;
     &lt;SignedDir Condition=&quot;$(SignAssembly) != true&quot;&gt;Unsigned&lt;/SignedDir&gt;
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' &quot;&gt;
     &lt;DebugSymbols&gt;true&lt;/DebugSymbols&gt;</diff>
      <filename>Merlin/Main/Languages/Ruby/IronRuby.Tests/IronRuby.Tests.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -51,7 +51,8 @@ namespace IronRuby.Tests {
 
                 OverloadResolution_Block1,
                 OverloadResolution_ParamArrays1,
-                AmbiguousMatch,
+                OverloadResolution_Numeric1,
+                AmbiguousMatch1,
                 Interpreter1,
                 Interpreter2,
                 Interpreter3,
@@ -406,6 +407,7 @@ namespace IronRuby.Tests {
                 ClrConstructor4,
                 ClrPrimitiveNumericTypes1,
                 ClrArrays1,
+                ClrArrays2,
                 ClrChar1,
                 ClrOperators1,
                 ClrOperators2,
@@ -617,7 +619,6 @@ namespace IronRuby.Tests {
                 Dlr_Convertible,
                 Dlr_Indexable,
                 Dlr_Number,
-                Dlr_Enumerable,
                 Dlr_Comparable,
                 Dlr_RubyObjects,
                 Dlr_Methods,</diff>
      <filename>Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs</filename>
    </modified>
    <modified>
      <diff>@@ -1251,6 +1251,47 @@ p C[Fixnum, Fixnum]
 InteropTests::Generics1::D[String]
 InteropTests::Generics1::C[Fixnum, Fixnum]
 &quot;);
+
+            TestOutput(@&quot;
+include InteropTests::Generics1
+p C[0]
+p C[1]
+p C[2]
+C[30] rescue p $!
+p C[1][Fixnum]
+p C[Fixnum][]
+p C[Fixnum][0]
+C[Fixnum][Fixnum] rescue p $!
+C[Fixnum][1] rescue p $!
+&quot;, @&quot;
+InteropTests::Generics1::C
+InteropTests::Generics1::C[T]
+InteropTests::Generics1::C[T, S]
+#&lt;ArgumentError: Type group `C' does not contain a type of generic arity 30&gt;
+InteropTests::Generics1::C[Fixnum]
+InteropTests::Generics1::C[Fixnum]
+InteropTests::Generics1::C[Fixnum]
+#&lt;ArgumentError: `InteropTests::Generics1::C[Fixnum]' is not a generic type definition&gt;
+#&lt;ArgumentError: `InteropTests::Generics1::C[Fixnum]' is not a generic type definition&gt;
+&quot;);
+            
+            // C&lt;T&gt; instantiations are subclasses of C&lt;&gt;:
+            TestOutput(@&quot;
+include InteropTests::Generics1
+C[1].class_eval do
+  def foo
+    p self.class
+  end
+end
+
+C[Fixnum].new.foo
+C[String].new.foo
+p C[Float].ancestors[0..2]
+&quot;, @&quot;
+InteropTests::Generics1::C[Fixnum]
+InteropTests::Generics1::C[String]
+[InteropTests::Generics1::C[Float], InteropTests::Generics1::C[T], Object]
+&quot;);
         }
 
         public class ClassWithNestedGenericTypes1 {
@@ -1984,16 +2025,15 @@ init
         /// Shelveset &quot;Numerics-MetaOpsWithNarrowing&quot; contains prototype implementation of the narrowing.
         /// &lt;/summary&gt;
         public void ClrPrimitiveNumericTypes1() {
-            AssertOutput(delegate() {
-                CompilerTest(@&quot;
+            TestOutput(@&quot;
 [System::Byte, System::SByte, System::UInt16, System::Int16, System::UInt32, System::Int64, System::UInt64, System::Single].each_with_index do |t,i|
   p t.ancestors
   p t.new(i).class
   p x = t.new(i) + 1, x.class   
   p t.new(i).size rescue puts 'no size method'
 end
-&quot;);
-            }, @&quot;
+&quot;,
+@&quot;
 [System::Byte, Integer, Precision, Numeric, Comparable, Object, Kernel]
 System::Byte
 1
@@ -2039,8 +2079,7 @@ no size method
 
         public void ClrArrays1() {
             Context.SetGlobalConstant(&quot;A2&quot;, Context.GetClass(typeof(int[,])));
-            AssertOutput(delegate() {
-                CompilerTest(@&quot;
+            TestOutput(@&quot;
 # multi-dim array:
 a2 = A2.new(2,4)
 a2[0,1] = 123
@@ -2051,11 +2090,7 @@ p System::Array[Fixnum].new(10) { |i| i + 1 }
 p System::Array[Fixnum].new(3)
 p System::Array[Fixnum].new([1,2,3])
 p System::Array[Fixnum].new(3, 12)
-
-# TODO: conversions:
-# p System::Array[System::Char].new(3, 'x')
-&quot;);
-            }, @&quot;
+&quot;, @&quot;
 123
 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
 [0, 0, 0]
@@ -2063,14 +2098,41 @@ p System::Array[Fixnum].new(3, 12)
 [12, 12, 12]
 &quot;);
         }
-        
+
+        public void ClrArrays2() {
+            TestOutput(@&quot;
+class C
+  def to_str
+    'c'
+  end
+end
+
+a = System::Array[System::String].new(3)
+a[0] = 'x'
+a[1] = C.new
+a[2] = :z
+
+# TODO: params array parameter of 'p' binds to the vector if passed alone
+p a,
+  System::Array[System::String].new(3, C.new),
+  System::Array[System::String].new([C.new, C.new]),
+  System::Array[System::Byte].new(3) { |x| x },
+  System::Array[System::Byte].new(3, 1)
+&quot;, @&quot;
+['x', 'c', 'z']
+['c', 'c', 'c']
+['c', 'c']
+[0 (Byte), 1 (Byte), 2 (Byte)]
+[1 (Byte), 1 (Byte), 1 (Byte)]
+&quot;);
+        }
+
         public void ClrChar1() {
-            AssertOutput(delegate() {
-                CompilerTest(@&quot;
+            TestOutput(@&quot;
 p System::Char.ancestors
 p System::String.ancestors
 
-a = System::Array[System::Char].new([System::Char.new('a'), System::Char.new('b')])  # TODO: implicit conversion
+a = System::Array[System::Char].new(['a', 'b'])
 p System::Char.new(a)
 
 x = System::Char.new('foo')
@@ -2079,8 +2141,7 @@ p x.index('f')
 p x + 'oo'
 p x == 'f'
 p System::Char.new('9').to_i
-&quot;);
-            }, @&quot;
+&quot;, @&quot;
 [System::Char, IronRuby::Clr::String, Enumerable, Comparable, System::ValueType, Object, Kernel]
 [System::String, IronRuby::Clr::String, Enumerable, Comparable, Object, Kernel]
 'a'
@@ -2232,6 +2293,10 @@ false
                 return d;
             }
 
+            public Delegate Delegate(int bogusOverload) {
+                return new Func&lt;object, object&gt;((x) =&gt; x);
+            }
+
             public int Foo(int a) {
                 return a + 1;
             }
@@ -2240,22 +2305,10 @@ false
                 return (int)a;
             }
 
-            public int FixnumDefaultProtocol([DefaultProtocol]int a) {
-                return a + 2;
-            }
-
             public string Bool([Optional]bool a) {
                 return a ? &quot;T&quot; : &quot;F&quot;;
             }
 
-            public int ListOrString(IList a) {
-                return a.Count;
-            }
-
-            public int ListOrString([DefaultProtocol]MutableString str) {
-                return 0;
-            }
-
             public int ListAndStrings(IList a, MutableString str1) {
                 return a.Count + str1.GetCharCount();
             }
@@ -2322,16 +2375,16 @@ p Inst.Double(2.0), Inst.Double(4), Inst.Double(System::Byte.new(8)), Inst.Doubl
             
             // primitive numerics:
             TestOutput(@&quot;
-p Inst.numerics(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
+p(*Inst.numerics(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11))
 &quot;, @&quot;
-1
-2
-3
-4
+1 (Byte)
+2 (SByte)
+3 (Int16)
+4 (UInt16)
 5
-6
-7
-8
+6 (UInt32)
+7 (Int64)
+8 (UInt64)
 9
 (10+0j)
 Convertible(11)
@@ -2348,13 +2401,11 @@ class C
     'xxx'
   end
 end
-p Inst.ListOrString(C.new)
 p Inst.ListAndStrings(C.new, C.new)
-p Inst.FixnumDefaultProtocol(Conv)
+p Inst.Foo(Conv)
 &quot;, @&quot;
-0
 8
-13
+12
 &quot;);
             
             // protocol conversions:
@@ -2372,11 +2423,15 @@ p Inst.Foo(a) rescue p $!
 101
 &quot;);
             // meta-object conversions:
-            TestOutput(@&quot;
-p Inst.delegate(Proc.new { |x| x + 1 }).invoke(123)
-&quot;, @&quot;
-124
-&quot;);
+            var r1 = Engine.Execute&lt;int&gt;(&quot;Inst.delegate(Proc.new { |x| x + 1 }).invoke(123)&quot;);
+            Assert(r1 == 124);
+
+            // foreign meta-object conversion:
+            var py = Runtime.GetEngine(&quot;python&quot;);
+            var scope = Runtime.CreateScope();
+            py.Execute(@&quot;def foo(x): return x + 2&quot;, scope);
+            var r2 = Engine.Execute&lt;int&gt;(@&quot;Inst.delegate(foo).invoke(123)&quot;, scope);
+            Assert(r2 == 125);
         }
 
         #endregion</diff>
      <filename>Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/ClrTests.cs</filename>
    </modified>
    <modified>
      <diff>@@ -216,7 +216,7 @@ namespace IronRuby.Tests {
 
         }
 
-        internal static T Invoke&lt;T&gt;(object obj, T fallbackResult) {
+        internal static T Convert&lt;T&gt;(object obj, T fallbackResult) {
             var site = CallSite&lt;Func&lt;CallSite, object, T&gt;&gt;.Create(new MyConvertBinder(typeof(T), fallbackResult));
             return site.Target(site, obj);
         }
@@ -386,27 +386,6 @@ end
 self.misc = Miscellaneous.new
 
 #------------------------------------------------------------------------------
-class Convertible
-    def initialize v
-        @val = v
-    end
-    
-    def to_i
-        @val.to_i
-    end
-    
-    def to_f
-        @val.to_f
-    end
-    
-    def to_str
-        @val.to_str
-    end
-end
-
-self.convertible = Convertible.new('0')
-
-#------------------------------------------------------------------------------
 class Indexable
     def initialize a=nil
         if a then
@@ -494,20 +473,6 @@ class Helpers
 end
 
 #------------------------------------------------------------------------------
-class RubyEnumerable
-    include Enumerable
-    def initialize a
-        @array = a
-    end
-    
-    def each
-        @array.each {|elem| yield elem }
-    end
-end
-
-self.ruby_enumerable = RubyEnumerable.new([1,2,3])
-
-#------------------------------------------------------------------------------
 class RubyComparable
     include Comparable
     def initialize val
@@ -596,11 +561,6 @@ class SanityTest
         assert_equal main.misc.ruby_callable_called, true
         assert_equal main.misc.ToString(), 'to_s'
         
-        # main.convertible
-        assert_error lambda { System::GC.Collect(main.convertible) }, TypeError # convert to int - Bug!!!!!!!!!!
-        assert_equal System::Exception.new(main.convertible).class, Exception
-        # need to convert to float
-        
         # main.indexable
         assert_equal main.indexable[2], 2
         main.indexable[10] = 100
@@ -613,9 +573,6 @@ class SanityTest
         assert_equal((main.number * 2), 200)
         assert_equal((main.number / 2), 50)
         
-        # RubyEnumerable
-        assert_equal main.ruby_enumerable.min, 1
-        
         # RubyComparable
         assert_equal((main.ruby_comparable == 100), true)
         assert_equal((main.ruby_comparable &gt; 100), false)
@@ -725,13 +682,38 @@ end
             AreEqual(MyInvokeMemberBinder.Invoke(misc_class, &quot;ToString&quot;), &quot;FallbackInvokeMember&quot;);
         }
 
-        // TODO: conversions
         public void Dlr_Convertible() {
-            var scope = CreateInteropScope();
-            object convertible = scope.GetVariable(&quot;convertible&quot;);
-            AreEqualBug(MyConvertBinder.Invoke&lt;int&gt;(convertible, -1234), 0, -1234);
-            AreEqualBug(MyConvertBinder.Invoke&lt;string&gt;(convertible, &quot;FallbackConvert&quot;), &quot;0&quot;, &quot;FallbackConvert&quot;);
-            AreEqualBug(MyConvertBinder.Invoke&lt;float&gt;(convertible, -1234.0f), 0.0, -1234.0f);
+            Engine.Execute(@&quot;
+class C
+  def to_int
+    1
+  end
+  
+  def to_f
+    2.0
+  end
+  
+  def to_str
+    'str'
+  end
+
+  def each
+    [1,2,3].each {|x| yield x }
+  end
+end
+&quot;);
+            var classC = Runtime.Globals.GetVariable(&quot;C&quot;);
+            var c = Engine.Operations.CreateInstance(classC);
+
+            // TODO:
+            //AreEqual(MyConvertBinder.Convert&lt;int&gt;(c, 10), 1);
+            //AreEqual(MyConvertBinder.Convert&lt;byte&gt;(c, 10), 1);
+            //AreEqual(MyConvertBinder.Convert&lt;string&gt;(c, &quot;FallbackConvert&quot;), &quot;str&quot;);
+            //AreEqual(MyConvertBinder.Convert&lt;double&gt;(c, -8.0), 2.0);
+            //AreEqual(MyConvertBinder.Convert&lt;float&gt;(c, -8.0f), 2.0f);
+            //IEnumerable e = MyConvertBinder.Convert&lt;IEnumerable&gt;(c, null)
+            //Assert(e != null);
+            //new List&lt;object&gt;(e);
         }
 
         public void Dlr_Indexable() {
@@ -754,16 +736,6 @@ end
             AreEqual(MyUnaryOperationBinder.Invoke(ExpressionType.OnesComplement, one_hundred), ~100);
         }
 
-        // TODO: conversion to IEnumerable
-        public void Dlr_Enumerable() {
-            var scope = CreateInteropScope();
-            object ruby_enumerable = scope.GetVariable(&quot;ruby_enumerable&quot;);
-            IEnumerable e = MyConvertBinder.Invoke&lt;IEnumerable&gt;(ruby_enumerable, null);
-            AreEqualBug(e != null, true, false);
-            IEnumerable&lt;object&gt; e2 = MyConvertBinder.Invoke&lt;IEnumerable&lt;object&gt;&gt;(ruby_enumerable, null);
-            AreEqualBug(e2 != null, true, false);
-        }
-
         public void Dlr_Comparable() {
             var scope = CreateInteropScope();
             object ruby_comparable = scope.GetVariable(&quot;ruby_comparable&quot;);</diff>
      <filename>Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/DlrInteropTests.cs</filename>
    </modified>
    <modified>
      <diff>@@ -20,6 +20,9 @@ using System.Reflection;
 using IronRuby.Builtins;
 using IronRuby.Runtime;
 using IronRuby.Runtime.Calls;
+using Microsoft.Scripting;
+using Microsoft.Scripting.Actions.Calls;
+using Microsoft.Scripting.Math;
 using Microsoft.Scripting.Runtime;
 using Ast = System.Linq.Expressions.Expression;
 
@@ -36,6 +39,10 @@ namespace IronRuby.Tests {
             return Array.ConvertAll(type.GetMember(name, BindingFlags.Public | BindingFlags.Static), (mi) =&gt; (MethodInfo)mi);
         }
 
+        private static MethodInfo/*!*/[]/*!*/ GetInstanceMethods(Type/*!*/ type, string/*!*/ name) {
+            return Array.ConvertAll(type.GetMember(name, BindingFlags.Public | BindingFlags.Instance), (mi) =&gt; (MethodInfo)mi);
+        }
+
         #region Block
 
         public class OverloadsWithBlock {
@@ -81,10 +88,10 @@ namespace IronRuby.Tests {
 
             var metaBuilder = new MetaObjectBuilder(null);
             for (int i = 0; i &lt; arguments.Length; i++) {
-                RubyOverloadResolver parameterBinder;
+                RubyOverloadResolver resolver;
                 var bindingTarget = RubyMethodGroupInfo.ResolveOverload(
                     metaBuilder, arguments[i], &quot;times&quot;, GetStaticMethods(typeof(OverloadsWithBlock), &quot;Times*&quot;), SelfCallConvention.SelfIsParameter,
-                    false, out parameterBinder
+                    false, out resolver
                 );
 
                 Assert(bindingTarget.Success);
@@ -92,6 +99,95 @@ namespace IronRuby.Tests {
             }
         }
 
+        public class Overloads1 {
+            public class X {
+            }
+
+            public void F1(int a) { }
+            public void F2(BigInteger a) { }
+            public void F3(double a) { }
+
+            public void G1([DefaultProtocol]int a) { }
+            public void G2(BigInteger a) { }
+            public void G3(double a) { }
+
+            public void I1(int a) { }
+            public void I2([NotNull]MutableString a) { }
+            public void I3([DefaultProtocol]Union&lt;int, MutableString&gt; a) { }
+
+            public void J1(int a) { }
+            public void J2([NotNull]BigInteger a) { }
+            public void J3([DefaultProtocol]IntegerValue a) { }
+
+            // This is rather useless overload combination:
+            // If DP parameter behaved exaclty like object it would be ambiguous.
+            // Since we try implicit conversions first, all types but numerics assignable to integer prefer K1.
+            // Therefore [DP] is irrelevant here.
+            public void K1(object a) { }
+            public void K2([DefaultProtocol]int a) { }
+
+            // level 0: no overload applicable
+            // level 1: {L1, L3} applicable, MutableString &lt;-/-&gt; SymbolId
+            public void L1(SymbolId a, [DefaultProtocol, NotNull]string b) { }
+            public void L2([NotNull]string a, [DefaultProtocol, NotNull]string b) { }
+            public void L3([DefaultProtocol]MutableString a, [DefaultProtocol, NotNull]string b) { }
+        }
+
+        public void OverloadResolution_Numeric1() {
+            var metaBuilder = new MetaObjectBuilder(null);
+            Context.ObjectClass.SetConstant(&quot;X&quot;, Context.GetClass(typeof(Overloads1.X)));
+
+            var c = Engine.Execute(@&quot;class C &lt; X; new; end&quot;);
+            var sym = SymbolTable.StringToId(&quot;x&quot;);
+            var ms = MutableString.Create(&quot;x&quot;);
+
+            var cases = new[] {
+                // F
+                new { Args = new[] { MO(1) }, Overloads = &quot;F*&quot;, Result = &quot;F1&quot; },
+                new { Args = new[] { MO((byte)1) }, Overloads = &quot;F*&quot;, Result = &quot;F1&quot; },
+                new { Args = new[] { MO(1L) }, Overloads = &quot;F*&quot;, Result = &quot;F2&quot; },
+                new { Args = new[] { MO(1.2F) }, Overloads = &quot;F*&quot;, Result = &quot;F3&quot; },
+
+                // G
+                new { Args = new[] { MO(1) }, Overloads = &quot;G*&quot;, Result = &quot;G1&quot; },
+                new { Args = new[] { MO((byte)1) }, Overloads = &quot;G*&quot;, Result = &quot;G1&quot; },
+                new { Args = new[] { MO(1L) }, Overloads = &quot;G*&quot;, Result = &quot;G2&quot; },
+                new { Args = new[] { MO(1.2F) }, Overloads = &quot;G*&quot;, Result = &quot;G3&quot; },
+                new { Args = new[] { MO(c) }, Overloads = &quot;G*&quot;, Result = &quot;G1&quot; },
+
+                // I
+                new { Args = new[] { MO(c) }, Overloads = &quot;I*&quot;, Result = &quot;I3&quot; },
+
+                // J
+                new { Args = new[] { MO(1) }, Overloads = &quot;J*&quot;, Result = &quot;J1&quot; },
+                new { Args = new[] { MO((BigInteger)1000) }, Overloads = &quot;J*&quot;, Result = &quot;J2&quot; },
+                new { Args = new[] { MO((byte)12) }, Overloads = &quot;J*&quot;, Result = &quot;J1&quot; },
+                new { Args = new[] { MO(c) }, Overloads = &quot;J*&quot;, Result = &quot;J3&quot; },
+                new { Args = new[] { MO(1.0) }, Overloads = &quot;J*&quot;, Result = &quot;J3&quot; },
+      
+                // K
+                new { Args = new[] { MO(1) }, Overloads = &quot;K*&quot;, Result = &quot;K2&quot; },
+                new { Args = new[] { MO(c) }, Overloads = &quot;K*&quot;, Result = &quot;K1&quot; },
+                new { Args = new[] { MO(&quot;x&quot;) }, Overloads = &quot;K*&quot;, Result = &quot;K1&quot; },
+
+                // L
+                new { Args = new[] { MO(sym), MO(sym) }, Overloads = &quot;L*&quot;, Result = &quot;L1&quot; },
+                new { Args = new[] { MO(&quot;x&quot;), MO(sym) }, Overloads = &quot;L*&quot;, Result = &quot;L2&quot; },
+                new { Args = new[] { MO(ms), MO(sym) }, Overloads = &quot;L*&quot;, Result = &quot;L3&quot; },
+                new { Args = new[] { MO(null), MO(sym) }, Overloads = &quot;L*&quot;, Result = &quot;L3&quot; },
+                new { Args = new[] { MO(c), MO(sym) }, Overloads = &quot;L*&quot;, Result = &quot;L3&quot; },
+            };
+
+            for (int i = 0; i &lt; cases.Length; i++) {
+                var args = new CallArguments(Context, MO(new Overloads1()), cases[i].Args, RubyCallSignature.Simple(cases[i].Args.Length));
+                var resolver = new RubyOverloadResolver(metaBuilder, args, SelfCallConvention.SelfIsInstance, false);
+                var overloads = GetInstanceMethods(typeof(Overloads1), cases[i].Overloads);
+                var result = resolver.ResolveOverload(i.ToString(), overloads, NarrowingLevel.None, NarrowingLevel.All);
+
+                Assert(result.Success &amp;&amp; result.Method.Name == cases[i].Result);
+            }
+        }
+
         #endregion
 
         #region Param Arrays
@@ -145,12 +241,12 @@ namespace IronRuby.Tests {
                 return 2;
             }
 
-            public static int F(string p) {
+            public static int F(MutableString p) {
                 return 3;
             }
         }
 
-        public void AmbiguousMatch() {
+        public void AmbiguousMatch1() {
             Context.SetGlobalConstant(&quot;C&quot;, Context.GetClass(typeof(AmbiguousOverloads)));
             AssertOutput(() =&gt; CompilerTest(@&quot;
 [1, nil, 'foo'].each do |x| </diff>
      <filename>Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/OverloadResolutionTests.cs</filename>
    </modified>
    <modified>
      <diff>@@ -23,6 +23,7 @@ using System.Text;
 using IronRuby.Compiler;
 using IronRuby.Runtime;
 using IronRuby.Runtime.Calls;
+using IronRuby.Runtime.Conversions;
 using Microsoft.Scripting.Actions;
 using Microsoft.Scripting.Generation;
 using Microsoft.Scripting.Runtime;</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/ArrayOps.cs</filename>
    </modified>
    <modified>
      <diff>@@ -38,7 +38,7 @@ namespace IronRuby.Builtins {
 
         [RubyConstructor]
         public static RubyFile/*!*/ CreateFile(RubyClass/*!*/ self, 
-            [DefaultProtocol]Union&lt;int, MutableString&gt; descriptorOrPath, [Optional, DefaultProtocol]MutableString mode, [Optional]int permission) {
+            [DefaultProtocol, NotNull]Union&lt;int, MutableString&gt; descriptorOrPath, [Optional, DefaultProtocol]MutableString mode, [Optional]int permission) {
 
             if (descriptorOrPath.IsFixnum()) {
                 // TODO: descriptor
@@ -51,7 +51,7 @@ namespace IronRuby.Builtins {
 
         [RubyConstructor]
         public static RubyFile/*!*/ CreateFile(RubyClass/*!*/ self,
-            [DefaultProtocol]Union&lt;int, MutableString&gt; descriptorOrPath, int mode, [Optional]int permission) {
+            [DefaultProtocol, NotNull]Union&lt;int, MutableString&gt; descriptorOrPath, int mode, [Optional]int permission) {
 
             if (descriptorOrPath.IsFixnum()) {
                 // TODO: descriptor
@@ -63,17 +63,17 @@ namespace IronRuby.Builtins {
         }
 
         [RubyConstructor]
-        public static RubyFile/*!*/ CreateFile(RubyClass/*!*/ self, MutableString/*!*/ path) {
+        public static RubyFile/*!*/ CreateFile(RubyClass/*!*/ self, [NotNull]MutableString/*!*/ path) {
             return new RubyFile(self.Context, path.ConvertToString(), &quot;r&quot;);
         }
 
         [RubyConstructor]
-        public static RubyFile/*!*/ CreateFile(RubyClass/*!*/ self, MutableString/*!*/ path, MutableString mode) {
+        public static RubyFile/*!*/ CreateFile(RubyClass/*!*/ self, [NotNull]MutableString/*!*/ path, MutableString mode) {
             return new RubyFile(self.Context, path.ConvertToString(), (mode != null) ? mode.ConvertToString() : &quot;r&quot;);
         }
 
         [RubyConstructor]
-        public static RubyFile/*!*/ CreateFile(RubyClass/*!*/ self, MutableString/*!*/ path, int mode) {
+        public static RubyFile/*!*/ CreateFile(RubyClass/*!*/ self, [NotNull]MutableString/*!*/ path, int mode) {
             return new RubyFile(self.Context, path.ConvertToString(), (RubyFileMode)mode);
         }
 </diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/FileOps.cs</filename>
    </modified>
    <modified>
      <diff>@@ -24,6 +24,7 @@ using System.Threading;
 using IronRuby.Compiler;
 using IronRuby.Runtime;
 using IronRuby.Runtime.Calls;
+using IronRuby.Runtime.Conversions;
 using Microsoft.Scripting;
 using Microsoft.Scripting.Math;
 using Microsoft.Scripting.Runtime;
@@ -565,12 +566,13 @@ namespace IronRuby.Builtins {
             object self, [NotNull]params object[]/*!*/ args) {
 
             var inspect = inspectStorage.GetCallSite(&quot;inspect&quot;);
+            var inspectedArgs = new object[args.Length];
             for (int i = 0; i &lt; args.Length; i++) {
-                args[i] = inspect.Target(inspect, args[i]);
+                inspectedArgs[i] = inspect.Target(inspect, args[i]);
             }
             
             // no dynamic dispatch to &quot;puts&quot;:
-            RubyIOOps.Puts(writeStorage, tosConversion, writeStorage.Context.StandardOutput, args);
+            RubyIOOps.Puts(writeStorage, tosConversion, writeStorage.Context.StandardOutput, inspectedArgs);
         }
 
         [RubyMethod(&quot;print&quot;, RubyMethodAttributes.PrivateInstance)]</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/KernelOps.cs</filename>
    </modified>
    <modified>
      <diff>@@ -986,23 +986,45 @@ namespace IronRuby.Builtins {
 
             if (provided == 1 &amp;&amp; type == typeof(Array)) {
                 return self.Context.GetModule(Protocols.ToType(self.Context, typeArgs[0]).MakeArrayType());
-            } 
+            }
 
-            int required = type.GetGenericArguments().Length;
-            if (required == 0 &amp;&amp; provided &gt; 0) {
-                throw RubyExceptions.CreateArgumentError(String.Format(&quot;'{0}' is not a generic type&quot;, type.FullName));
+            if (!type.IsGenericTypeDefinition) {
+                if (provided &gt; 0) {
+                    throw RubyExceptions.CreateArgumentError(String.Format(&quot;`{0}' is not a generic type definition&quot;, self.Name));
+                }
+                return self;
             }
 
+            int required = type.GetGenericArguments().Length;
             if (required != provided) {
-                throw RubyExceptions.CreateArgumentError(String.Format(&quot;Type '{0}' requires {1} generic type arguments, {2} provided&quot;, type.FullName, required, provided));
+                throw RubyExceptions.CreateArgumentError(String.Format(&quot;Type `{0}' requires {1} generic type arguments, {2} provided&quot;, self.Name, required, provided));
             }
 
-            if (typeArgs.Length &gt; 0) {
-                Type concreteType = type.MakeGenericType(Protocols.ToTypes(self.Context, typeArgs));
-                return self.Context.GetModule(concreteType);
-            } else {
+            Type concreteType = type.MakeGenericType(Protocols.ToTypes(self.Context, typeArgs));
+            return self.Context.GetModule(concreteType);
+        }
+
+        [RubyMethod(&quot;of&quot;)]
+        [RubyMethod(&quot;[]&quot;)]
+        public static RubyModule/*!*/ Of(RubyModule/*!*/ self, int genericArity) {
+            if (self.TypeTracker == null) {
+                throw RubyExceptions.CreateArgumentError(String.Format(&quot;`{0}' is not a type&quot;, self.Name));
+            }
+
+            Type type = self.TypeTracker.Type;
+
+            if (!type.IsGenericTypeDefinition) {
+                if (genericArity &gt; 0) {
+                    throw RubyExceptions.CreateArgumentError(String.Format(&quot;`{0}' is not a generic type definition&quot;, self.Name));
+                }
                 return self;
             }
+            
+            if (type.GetGenericArguments().Length != genericArity) {
+                throw RubyExceptions.CreateArgumentError(String.Format(&quot;`{0}' does not have generic arity {1}&quot;, self.Name, genericArity));
+            }
+
+            return self;
         }
 
         #endregion</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/ModuleOps.cs</filename>
    </modified>
    <modified>
      <diff>@@ -17,11 +17,12 @@ using System;
 using Microsoft.Scripting.Runtime;
 using Microsoft.Scripting.Actions;
 using Microsoft.Scripting.Generation;
-using IronRuby.Runtime;
 using System.Runtime.InteropServices;
 using System.Reflection;
 using System.Runtime.Serialization;
+using IronRuby.Runtime;
 using IronRuby.Runtime.Calls;
+using IronRuby.Runtime.Conversions;
 
 namespace IronRuby.Builtins {
 </diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/Numeric.cs</filename>
    </modified>
    <modified>
      <diff>@@ -27,6 +27,7 @@ using IronRuby.Runtime.Calls;
 using System.Runtime.CompilerServices;
 using Microsoft.Scripting.Generation;
 using IronRuby.Compiler.Generation;
+using IronRuby.Runtime.Conversions;
 
 namespace IronRuby.Builtins {
 </diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/StringFormatter.cs</filename>
    </modified>
    <modified>
      <diff>@@ -39,28 +39,21 @@ namespace IronRuby.Builtins {
         }
 
         [RubyMethod(&quot;new&quot;, RubyMethodAttributes.PublicSingleton)]
-        public static object NewAnonymousStruct(BlockParam block, RubyClass/*!*/ self, int className,
+        public static object NewAnonymousStruct(BlockParam block, RubyClass/*!*/ self, SymbolId firstAttibuteName,
             [DefaultProtocol, NotNull, NotNullItems]params string/*!*/[]/*!*/ attributeNames) {
 
-            return CreateAnonymousWithFirstAttribute(block, self, RubyOps.ConvertFixnumToSymbol(self.Context, className), attributeNames);
+            return CreateAnonymousWithFirstAttribute(block, self, RubyOps.ConvertSymbolIdToSymbol(firstAttibuteName), attributeNames);
         }
 
         [RubyMethod(&quot;new&quot;, RubyMethodAttributes.PublicSingleton)]
-        public static object NewAnonymousStruct(BlockParam block, RubyClass/*!*/ self, SymbolId className,
+        public static object NewAnonymousStruct(BlockParam block, RubyClass/*!*/ self, [NotNull]string/*!*/ firstAttibuteName,
             [DefaultProtocol, NotNull, NotNullItems]params string/*!*/[]/*!*/ attributeNames) {
 
-            return CreateAnonymousWithFirstAttribute(block, self, RubyOps.ConvertSymbolIdToSymbol(className), attributeNames);
+            return CreateAnonymousWithFirstAttribute(block, self, firstAttibuteName, attributeNames);
         }
 
         [RubyMethod(&quot;new&quot;, RubyMethodAttributes.PublicSingleton)]
-        public static object NewAnonymousStruct(BlockParam block, RubyClass/*!*/ self, [NotNull]string/*!*/ className,
-            [DefaultProtocol, NotNull, NotNullItems]params string/*!*/[]/*!*/ attributeNames) {
-
-            return CreateAnonymousWithFirstAttribute(block, self, className, attributeNames);
-        }
-
-        [RubyMethod(&quot;new&quot;, RubyMethodAttributes.PublicSingleton)]
-        public static object NewStruct(BlockParam block, RubyClass/*!*/ self, [DefaultProtocol, Optional]MutableString className,
+        public static object NewStruct(BlockParam block, RubyClass/*!*/ self, [DefaultProtocol]MutableString className,
             [DefaultProtocol, NotNull, NotNullItems]params string/*!*/[]/*!*/ attributeNames) {
 
             if (className == null) {</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/StructOps.cs</filename>
    </modified>
    <modified>
      <diff>@@ -63,14 +63,24 @@ namespace IronRuby.StandardLibrary.Enumerator {
             }
 
             [RubyConstructor]
-            public static Enumerator/*!*/ Create(RubyClass/*!*/ self, object targetObject, [DefaultProtocol, Optional]string targetName, 
+            public static Enumerator/*!*/ Create(RubyClass/*!*/ self, object targetObject) {
+                return Reinitialize(new Enumerator(), targetObject, null, ArrayUtils.EmptyObjects);
+            }
+
+            [RubyConstructor]
+            public static Enumerator/*!*/ Create(RubyClass/*!*/ self, object targetObject, [DefaultProtocol]string targetName,
                 [NotNull]params object[] targetArguments) {
 
                 return Reinitialize(new Enumerator(), targetObject, targetName, targetArguments);
             }
 
             [RubyMethod(&quot;initialize&quot;, RubyMethodAttributes.PrivateInstance)]
-            public static Enumerator/*!*/ Reinitialize(Enumerator/*!*/ self, object targetObject, [DefaultProtocol, Optional]string targetName, 
+            public static Enumerator/*!*/ Reinitialize(Enumerator/*!*/ self, object targetObject) {
+                return Reinitialize(self, targetObject, null, ArrayUtils.EmptyObjects);
+            }
+
+            [RubyMethod(&quot;initialize&quot;, RubyMethodAttributes.PrivateInstance)]
+            public static Enumerator/*!*/ Reinitialize(Enumerator/*!*/ self, object targetObject, [DefaultProtocol]string targetName, 
                 [NotNull]params object[] targetArguments) {
 
                 self._targetObject = targetObject;</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Enumerator/Enumerator.cs</filename>
    </modified>
    <modified>
      <diff>@@ -84,6 +84,11 @@ namespace IronRuby.Builtins {
             }
             throw RubyExceptions.CreateRangeError(String.Format(&quot;Float {0} out of range of {1}&quot;, value, self.Name));
         }
+        
+        [RubyMethod(&quot;inspect&quot;)]
+        public static MutableString/*!*/ Inspect(object/*!*/ self) {
+            return MutableString.CreateMutable().Append(self.ToString()).Append(&quot; (Byte)&quot;);
+        }
     }
     
     public static partial class SByteOps {
@@ -118,6 +123,11 @@ namespace IronRuby.Builtins {
             }
             throw RubyExceptions.CreateRangeError(String.Format(&quot;Float {0} out of range of {1}&quot;, value, self.Name));
         }
+        
+        [RubyMethod(&quot;inspect&quot;)]
+        public static MutableString/*!*/ Inspect(object/*!*/ self) {
+            return MutableString.CreateMutable().Append(self.ToString()).Append(&quot; (SByte)&quot;);
+        }
     }
     
     public static partial class Int16Ops {
@@ -152,6 +162,11 @@ namespace IronRuby.Builtins {
             }
             throw RubyExceptions.CreateRangeError(String.Format(&quot;Float {0} out of range of {1}&quot;, value, self.Name));
         }
+        
+        [RubyMethod(&quot;inspect&quot;)]
+        public static MutableString/*!*/ Inspect(object/*!*/ self) {
+            return MutableString.CreateMutable().Append(self.ToString()).Append(&quot; (Int16)&quot;);
+        }
     }
     
     public static partial class UInt16Ops {
@@ -186,6 +201,11 @@ namespace IronRuby.Builtins {
             }
             throw RubyExceptions.CreateRangeError(String.Format(&quot;Float {0} out of range of {1}&quot;, value, self.Name));
         }
+        
+        [RubyMethod(&quot;inspect&quot;)]
+        public static MutableString/*!*/ Inspect(object/*!*/ self) {
+            return MutableString.CreateMutable().Append(self.ToString()).Append(&quot; (UInt16)&quot;);
+        }
     }
     
     public static partial class UInt32Ops {
@@ -220,6 +240,11 @@ namespace IronRuby.Builtins {
             }
             throw RubyExceptions.CreateRangeError(String.Format(&quot;Float {0} out of range of {1}&quot;, value, self.Name));
         }
+        
+        [RubyMethod(&quot;inspect&quot;)]
+        public static MutableString/*!*/ Inspect(object/*!*/ self) {
+            return MutableString.CreateMutable().Append(self.ToString()).Append(&quot; (UInt32)&quot;);
+        }
     }
     
     public static partial class Int64Ops {
@@ -254,6 +279,11 @@ namespace IronRuby.Builtins {
             }
             throw RubyExceptions.CreateRangeError(String.Format(&quot;Float {0} out of range of {1}&quot;, value, self.Name));
         }
+        
+        [RubyMethod(&quot;inspect&quot;)]
+        public static MutableString/*!*/ Inspect(object/*!*/ self) {
+            return MutableString.CreateMutable().Append(self.ToString()).Append(&quot; (Int64)&quot;);
+        }
     }
     
     public static partial class UInt64Ops {
@@ -288,6 +318,11 @@ namespace IronRuby.Builtins {
             }
             throw RubyExceptions.CreateRangeError(String.Format(&quot;Float {0} out of range of {1}&quot;, value, self.Name));
         }
+        
+        [RubyMethod(&quot;inspect&quot;)]
+        public static MutableString/*!*/ Inspect(object/*!*/ self) {
+            return MutableString.CreateMutable().Append(self.ToString()).Append(&quot; (UInt64)&quot;);
+        }
     }
 
     // *** END GENERATED CODE ***</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Extensions/ClrInteger.Generated.cs</filename>
    </modified>
    <modified>
      <diff>@@ -63,4 +63,9 @@ public static partial class $SelfOps {
         }
         throw RubyExceptions.CreateRangeError(String.Format(&quot;Float {0} out of range of {1}&quot;, value, self.Name));
     }
+    
+    [RubyMethod(&quot;inspect&quot;)]
+    public static MutableString/*!*/ Inspect(object/*!*/ self) {
+        return MutableString.CreateMutable().Append(self.ToString()).Append(&quot; ($Self)&quot;);
+    }
 }</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Extensions/ClrInteger.Generator.rb</filename>
    </modified>
    <modified>
      <diff>@@ -26,6 +26,7 @@ using Microsoft.Scripting.Runtime;
 using Microsoft.Scripting.Utils;
 using IronRuby.Runtime;
 using IronRuby.Runtime.Calls;
+using IronRuby.Runtime.Conversions;
 
 using EachSite = System.Func&lt;System.Runtime.CompilerServices.CallSite, object, IronRuby.Builtins.Proc, object&gt;;
 
@@ -49,6 +50,14 @@ namespace IronRuby.Builtins {
             return NormalizeIndex(list.Count, index);
         }
 
+        internal static int NormalizeIndexThrowIfNegative(IList/*!*/ list, int index) {
+            index = NormalizeIndex(list.Count, index);
+            if (index &lt; 0) {
+                throw RubyExceptions.CreateIndexError(String.Format(&quot;index {0} out of array&quot;, index));
+            }
+            return index;
+        }
+
         internal static int NormalizeIndex(int count, int index) {
             return index &lt; 0 ? index + count : index;
         }
@@ -217,7 +226,9 @@ namespace IronRuby.Builtins {
         #region *, +, concat
 
         [RubyMethod(&quot;*&quot;)]
-        public static IList/*!*/ Repetition(CallSiteStorage&lt;Func&lt;CallSite, RubyClass, object&gt;&gt;/*!*/ allocateStorage, IList/*!*/ self, int repeat) {
+        public static IList/*!*/ Repetition(CallSiteStorage&lt;Func&lt;CallSite, RubyClass, object&gt;&gt;/*!*/ allocateStorage, 
+            IList/*!*/ self, int repeat) {
+
             if (repeat &lt; 0) {
                 throw RubyExceptions.CreateArgumentError(&quot;negative argument&quot;);
             }
@@ -236,12 +247,16 @@ namespace IronRuby.Builtins {
         }
 
         [RubyMethod(&quot;*&quot;)]
-        public static MutableString Repetition(ConversionStorage&lt;MutableString&gt;/*!*/ tosConversion, IList/*!*/ self, [NotNull]MutableString/*!*/ separator) {
+        public static MutableString Repetition(ConversionStorage&lt;MutableString&gt;/*!*/ tosConversion, 
+            IList/*!*/ self, [NotNull]MutableString/*!*/ separator) {
             return Join(tosConversion, self, separator);
         }
 
         [RubyMethod(&quot;*&quot;)]
-        public static object Repetition(CallSiteStorage&lt;Func&lt;CallSite, RubyClass, object&gt;&gt;/*!*/ allocateStorage, ConversionStorage&lt;MutableString&gt;/*!*/ tosConversion, IList/*!*/ self, [DefaultProtocol]Union&lt;MutableString, int&gt; repeat) {
+        public static object Repetition(
+            CallSiteStorage&lt;Func&lt;CallSite, RubyClass, object&gt;&gt;/*!*/ allocateStorage, 
+            ConversionStorage&lt;MutableString&gt;/*!*/ tosConversion, 
+            IList/*!*/ self, [DefaultProtocol, NotNull]Union&lt;MutableString, int&gt; repeat) {
 
             if (repeat.IsFixnum()) {
                 return Repetition(allocateStorage, self, repeat.Fixnum());
@@ -451,15 +466,21 @@ namespace IronRuby.Builtins {
         }
 
         [RubyMethod(&quot;[]=&quot;)]
-        public static object SetElement(IList/*!*/ self, [DefaultProtocol]int index, object value) {
-            index = NormalizeIndex(self, index);
+        public static object SetElement(RubyArray/*!*/ self, [DefaultProtocol]int index, object value) {
+            index = NormalizeIndexThrowIfNegative(self, index);
 
-            if (index &lt; 0) {
-                throw RubyExceptions.CreateIndexError(String.Format(&quot;index {0} out of array&quot;, index));
+            if (index &gt;= self.Count) {
+                self.AddMultiple(index + 1 - self.Count, null);
             }
 
+            return self[index] = value;
+        }
+
+        [RubyMethod(&quot;[]=&quot;)]
+        public static object SetElement(IList/*!*/ self, [DefaultProtocol]int index, object value) {
+            index = NormalizeIndexThrowIfNegative(self, index);
+
             if (index &lt; self.Count) {
-                // TODO: conversions
                 self[index] = value;
             } else {
                 ExpandList(self, index);
@@ -475,10 +496,7 @@ namespace IronRuby.Builtins {
                 throw RubyExceptions.CreateIndexError(String.Format(&quot;negative length ({0})&quot;, length));
             }
 
-            index = NormalizeIndex(self, index);
-            if (index &lt; 0) {
-                throw RubyExceptions.CreateIndexError(String.Format(&quot;index {0} out of array&quot;, index));
-            }
+            index = NormalizeIndexThrowIfNegative(self, index);
 
             if (value == null) {
                 DeleteItems(self, index, length);</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Extensions/IListOps.cs</filename>
    </modified>
    <modified>
      <diff>@@ -26,39 +26,6 @@ namespace IronRuby.Builtins {
     /// &lt;/summary&gt;
     [RubyModule(&quot;MultiDimensionalArray&quot;, DefineIn = typeof(IronRubyOps.ClrOps), Extends = typeof(MultiDimensionalArray), Restrictions = ModuleRestrictions.None)]
     public static class MultiDimensionalArrayOps {
-        [RubyMethod(&quot;[]=&quot;)]
-        public static object SetElement(Array/*!*/ self, int index1, int index2, object value) {
-            self.SetValue(value, index1, index2);
-            return value;
-        }
-
-        [RubyMethod(&quot;[]=&quot;)]
-        public static object SetElement(Array/*!*/ self, int index1, int index2, int index3, object value) {
-            self.SetValue(value, index1, index2, index3);
-            return value;
-        }
-
-        // TODO: params array in the middle of parameters -&gt; needs special attribute or a meta-implementation (meta-impl could call 
-        // T[...].Get()/Set() directly).
-        [RubyMethod(&quot;[]=&quot;)]
-        public static object SetElement(Array/*!*/ self, /*params*/ int[] indices, object value) {
-            self.SetValue(value, indices);
-            return value;
-        }
-
-        [RubyMethod(&quot;[]&quot;)]
-        public static object GetElement(Array/*!*/ self, int index1, int index2) {
-            return self.GetValue(index1, index2);
-        }
-
-        [RubyMethod(&quot;[]&quot;)]
-        public static object GetElement(Array/*!*/ self, int index1, int index2, int index3) {
-            return self.GetValue(index1, index2, index3);
-        }
-
-        [RubyMethod(&quot;[]&quot;)]
-        public static object GetElement(Array/*!*/ self, int[] indices) {
-            return self.GetValue(indices);
-        }
+        // [], []= methods are mapped to Get/Set methods
     }
 }</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Extensions/MultiDimensionalArrayOps.cs</filename>
    </modified>
    <modified>
      <diff>@@ -29,5 +29,10 @@ namespace IronRuby.Builtins {
         public static float Create(RubyClass/*!*/ self, [DefaultProtocol]double value) {
             return (float)value;
         }
+
+        [RubyMethod(&quot;inspect&quot;)]
+        public static MutableString/*!*/ Inspect(object/*!*/ self) {
+            return MutableString.CreateMutable().Append(self.ToString()).Append(&quot; (Single)&quot;);
+        }
     }
 }</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Extensions/SingleOps.cs</filename>
    </modified>
    <modified>
      <diff>@@ -50,6 +50,17 @@ namespace IronRuby.Builtins {
             return context.GetModule(concreteType);
         }
 
+        [RubyMethod(&quot;of&quot;)]
+        [RubyMethod(&quot;[]&quot;)]
+        public static RubyModule/*!*/ Of(RubyContext/*!*/ context, TypeGroup/*!*/ self, int genericArity) {
+            TypeTracker tracker = self.GetTypeForArity(genericArity);
+            if (tracker == null) {
+                throw RubyExceptions.CreateArgumentError(String.Format(&quot;Type group `{0}' does not contain a type of generic arity {1}&quot;, self.Name, genericArity));
+            }
+
+            return context.GetModule(tracker.Type);
+        }
+
         [RubyMethod(&quot;each&quot;)]
         public static object EachType(RubyContext/*!*/ context, BlockParam/*!*/ block, TypeGroup/*!*/ self) {
             if (block == null) {</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Extensions/TypeGroupOps.cs</filename>
    </modified>
    <modified>
      <diff>@@ -56,7 +56,7 @@ namespace IronRuby.Builtins {
             IronRuby.Builtins.RubyModule def20 = DefineModule(&quot;IronRuby::Clr::FlagEnumeration&quot;, typeof(IronRuby.Builtins.FlagEnumeration), 0x00000000, LoadIronRuby__Clr__FlagEnumeration_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
             IronRuby.Builtins.RubyModule def4 = DefineModule(&quot;IronRuby::Clr::Float&quot;, typeof(IronRuby.Builtins.ClrFloat), 0x00000103, LoadIronRuby__Clr__Float_Instance, LoadIronRuby__Clr__Float_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
             IronRuby.Builtins.RubyModule def5 = DefineModule(&quot;IronRuby::Clr::Integer&quot;, typeof(IronRuby.Builtins.ClrInteger), 0x00000103, LoadIronRuby__Clr__Integer_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyModule def23 = DefineModule(&quot;IronRuby::Clr::MultiDimensionalArray&quot;, typeof(IronRuby.Builtins.MultiDimensionalArray), 0x00000000, LoadIronRuby__Clr__MultiDimensionalArray_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyModule def23 = DefineModule(&quot;IronRuby::Clr::MultiDimensionalArray&quot;, typeof(IronRuby.Builtins.MultiDimensionalArray), 0x00000000, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
             IronRuby.Builtins.RubyModule def6 = DefineModule(&quot;IronRuby::Clr::String&quot;, typeof(IronRuby.Builtins.ClrString), 0x00000103, LoadIronRuby__Clr__String_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
             // Skipped primitive: Kernel
             DefineGlobalModule(&quot;Marshal&quot;, typeof(IronRuby.Builtins.RubyMarshal), 0x00000103, null, LoadMarshal_Class, LoadMarshal_Constants, IronRuby.Builtins.RubyModule.EmptyArray);
@@ -2384,21 +2384,6 @@ namespace IronRuby.Builtins {
             
         }
         
-        private static void LoadIronRuby__Clr__MultiDimensionalArray_Instance(IronRuby.Builtins.RubyModule/*!*/ module) {
-            module.DefineLibraryMethod(&quot;[]&quot;, 0x51, 
-                new System.Func&lt;System.Array, System.Int32, System.Int32, System.Object&gt;(IronRuby.Builtins.MultiDimensionalArrayOps.GetElement), 
-                new System.Func&lt;System.Array, System.Int32, System.Int32, System.Int32, System.Object&gt;(IronRuby.Builtins.MultiDimensionalArrayOps.GetElement), 
-                new System.Func&lt;System.Array, System.Int32[], System.Object&gt;(IronRuby.Builtins.MultiDimensionalArrayOps.GetElement)
-            );
-            
-            module.DefineLibraryMethod(&quot;[]=&quot;, 0x51, 
-                new System.Func&lt;System.Array, System.Int32, System.Int32, System.Object, System.Object&gt;(IronRuby.Builtins.MultiDimensionalArrayOps.SetElement), 
-                new System.Func&lt;System.Array, System.Int32, System.Int32, System.Int32, System.Object, System.Object&gt;(IronRuby.Builtins.MultiDimensionalArrayOps.SetElement), 
-                new System.Func&lt;System.Array, System.Int32[], System.Object, System.Object&gt;(IronRuby.Builtins.MultiDimensionalArrayOps.SetElement)
-            );
-            
-        }
-        
         private static void LoadIronRuby__Clr__Name_Instance(IronRuby.Builtins.RubyModule/*!*/ module) {
             module.DefineLibraryMethod(&quot;&lt;=&gt;&quot;, 0x51, 
                 new System.Func&lt;IronRuby.Runtime.ClrName, System.String, System.Int32&gt;(IronRuby.Builtins.ClrNameOps.Compare), 
@@ -3581,7 +3566,8 @@ namespace IronRuby.Builtins {
         
         private static void LoadMicrosoft__Scripting__Actions__TypeGroup_Instance(IronRuby.Builtins.RubyModule/*!*/ module) {
             module.DefineLibraryMethod(&quot;[]&quot;, 0x51, 
-                new System.Func&lt;IronRuby.Runtime.RubyContext, Microsoft.Scripting.Actions.TypeGroup, System.Object[], IronRuby.Builtins.RubyModule&gt;(IronRuby.Builtins.TypeGroupOps.Of)
+                new System.Func&lt;IronRuby.Runtime.RubyContext, Microsoft.Scripting.Actions.TypeGroup, System.Object[], IronRuby.Builtins.RubyModule&gt;(IronRuby.Builtins.TypeGroupOps.Of), 
+                new System.Func&lt;IronRuby.Runtime.RubyContext, Microsoft.Scripting.Actions.TypeGroup, System.Int32, IronRuby.Builtins.RubyModule&gt;(IronRuby.Builtins.TypeGroupOps.Of)
             );
             
             module.DefineLibraryMethod(&quot;clr_constructor&quot;, 0x51, 
@@ -3615,7 +3601,8 @@ namespace IronRuby.Builtins {
             );
             
             module.DefineLibraryMethod(&quot;of&quot;, 0x51, 
-                new System.Func&lt;IronRuby.Runtime.RubyContext, Microsoft.Scripting.Actions.TypeGroup, System.Object[], IronRuby.Builtins.RubyModule&gt;(IronRuby.Builtins.TypeGroupOps.Of)
+                new System.Func&lt;IronRuby.Runtime.RubyContext, Microsoft.Scripting.Actions.TypeGroup, System.Object[], IronRuby.Builtins.RubyModule&gt;(IronRuby.Builtins.TypeGroupOps.Of), 
+                new System.Func&lt;IronRuby.Runtime.RubyContext, Microsoft.Scripting.Actions.TypeGroup, System.Int32, IronRuby.Builtins.RubyModule&gt;(IronRuby.Builtins.TypeGroupOps.Of)
             );
             
             module.DefineLibraryMethod(&quot;superclass&quot;, 0x51, 
@@ -3641,7 +3628,8 @@ namespace IronRuby.Builtins {
         
         private static void LoadModule_Instance(IronRuby.Builtins.RubyModule/*!*/ module) {
             module.DefineLibraryMethod(&quot;[]&quot;, 0x51, 
-                new System.Func&lt;IronRuby.Builtins.RubyModule, System.Object[], IronRuby.Builtins.RubyModule&gt;(IronRuby.Builtins.ModuleOps.Of)
+                new System.Func&lt;IronRuby.Builtins.RubyModule, System.Object[], IronRuby.Builtins.RubyModule&gt;(IronRuby.Builtins.ModuleOps.Of), 
+                new System.Func&lt;IronRuby.Builtins.RubyModule, System.Int32, IronRuby.Builtins.RubyModule&gt;(IronRuby.Builtins.ModuleOps.Of)
             );
             
             module.DefineLibraryMethod(&quot;&lt;&quot;, 0x51, 
@@ -3844,7 +3832,8 @@ namespace IronRuby.Builtins {
             );
             
             module.DefineLibraryMethod(&quot;of&quot;, 0x51, 
-                new System.Func&lt;IronRuby.Builtins.RubyModule, System.Object[], IronRuby.Builtins.RubyModule&gt;(IronRuby.Builtins.ModuleOps.Of)
+                new System.Func&lt;IronRuby.Builtins.RubyModule, System.Object[], IronRuby.Builtins.RubyModule&gt;(IronRuby.Builtins.ModuleOps.Of), 
+                new System.Func&lt;IronRuby.Builtins.RubyModule, System.Int32, IronRuby.Builtins.RubyModule&gt;(IronRuby.Builtins.ModuleOps.Of)
             );
             
             module.DefineLibraryMethod(&quot;private&quot;, 0x52, 
@@ -4941,7 +4930,6 @@ namespace IronRuby.Builtins {
         
         private static void LoadStruct_Class(IronRuby.Builtins.RubyModule/*!*/ module) {
             module.DefineLibraryMethod(&quot;new&quot;, 0x61, 
-                new System.Func&lt;IronRuby.Runtime.BlockParam, IronRuby.Builtins.RubyClass, System.Int32, System.String[], System.Object&gt;(IronRuby.Builtins.RubyStructOps.NewAnonymousStruct), 
                 new System.Func&lt;IronRuby.Runtime.BlockParam, IronRuby.Builtins.RubyClass, Microsoft.Scripting.SymbolId, System.String[], System.Object&gt;(IronRuby.Builtins.RubyStructOps.NewAnonymousStruct), 
                 new System.Func&lt;IronRuby.Runtime.BlockParam, IronRuby.Builtins.RubyClass, System.String, System.String[], System.Object&gt;(IronRuby.Builtins.RubyStructOps.NewAnonymousStruct), 
                 new System.Func&lt;IronRuby.Runtime.BlockParam, IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, System.String[], System.Object&gt;(IronRuby.Builtins.RubyStructOps.NewStruct)
@@ -4990,6 +4978,10 @@ namespace IronRuby.Builtins {
         
         private static void LoadSystem__Byte_Instance(IronRuby.Builtins.RubyModule/*!*/ module) {
             LoadIronRuby__Clr__Integer_Instance(module);
+            module.DefineLibraryMethod(&quot;inspect&quot;, 0x51, 
+                new System.Func&lt;System.Object, IronRuby.Builtins.MutableString&gt;(IronRuby.Builtins.ByteOps.Inspect)
+            );
+            
             module.DefineLibraryMethod(&quot;size&quot;, 0x51, 
                 new System.Func&lt;System.Byte, System.Int32&gt;(IronRuby.Builtins.ByteOps.Size)
             );
@@ -5213,6 +5205,7 @@ namespace IronRuby.Builtins {
             );
             
             module.DefineLibraryMethod(&quot;[]=&quot;, 0x51, 
+                new System.Func&lt;IronRuby.Builtins.RubyArray, System.Int32, System.Object, System.Object&gt;(IronRuby.Builtins.IListOps.SetElement), 
                 new System.Func&lt;System.Collections.IList, System.Int32, System.Object, System.Object&gt;(IronRuby.Builtins.IListOps.SetElement), 
                 new System.Func&lt;IronRuby.Runtime.ConversionStorage&lt;System.Collections.IList&gt;, System.Collections.IList, System.Int32, System.Int32, System.Object, System.Object&gt;(IronRuby.Builtins.IListOps.SetElement), 
                 new System.Func&lt;IronRuby.Runtime.ConversionStorage&lt;System.Collections.IList&gt;, IronRuby.Runtime.ConversionStorage&lt;System.Int32&gt;, System.Collections.IList, IronRuby.Builtins.Range, System.Object, System.Object&gt;(IronRuby.Builtins.IListOps.SetElement)
@@ -5486,6 +5479,10 @@ namespace IronRuby.Builtins {
         
         private static void LoadSystem__Int16_Instance(IronRuby.Builtins.RubyModule/*!*/ module) {
             LoadIronRuby__Clr__Integer_Instance(module);
+            module.DefineLibraryMethod(&quot;inspect&quot;, 0x51, 
+                new System.Func&lt;System.Object, IronRuby.Builtins.MutableString&gt;(IronRuby.Builtins.Int16Ops.Inspect)
+            );
+            
             module.DefineLibraryMethod(&quot;size&quot;, 0x51, 
                 new System.Func&lt;System.Int16, System.Int32&gt;(IronRuby.Builtins.Int16Ops.Size)
             );
@@ -5503,6 +5500,10 @@ namespace IronRuby.Builtins {
         
         private static void LoadSystem__Int64_Instance(IronRuby.Builtins.RubyModule/*!*/ module) {
             LoadIronRuby__Clr__BigInteger_Instance(module);
+            module.DefineLibraryMethod(&quot;inspect&quot;, 0x51, 
+                new System.Func&lt;System.Object, IronRuby.Builtins.MutableString&gt;(IronRuby.Builtins.Int64Ops.Inspect)
+            );
+            
             module.DefineLibraryMethod(&quot;size&quot;, 0x51, 
                 new System.Func&lt;System.Int64, System.Int32&gt;(IronRuby.Builtins.Int64Ops.Size)
             );
@@ -5520,6 +5521,10 @@ namespace IronRuby.Builtins {
         
         private static void LoadSystem__SByte_Instance(IronRuby.Builtins.RubyModule/*!*/ module) {
             LoadIronRuby__Clr__Integer_Instance(module);
+            module.DefineLibraryMethod(&quot;inspect&quot;, 0x51, 
+                new System.Func&lt;System.Object, IronRuby.Builtins.MutableString&gt;(IronRuby.Builtins.SByteOps.Inspect)
+            );
+            
             module.DefineLibraryMethod(&quot;size&quot;, 0x51, 
                 new System.Func&lt;System.SByte, System.Int32&gt;(IronRuby.Builtins.SByteOps.Size)
             );
@@ -5537,6 +5542,10 @@ namespace IronRuby.Builtins {
         
         private static void LoadSystem__Single_Instance(IronRuby.Builtins.RubyModule/*!*/ module) {
             LoadIronRuby__Clr__Float_Instance(module);
+            module.DefineLibraryMethod(&quot;inspect&quot;, 0x51, 
+                new System.Func&lt;System.Object, IronRuby.Builtins.MutableString&gt;(IronRuby.Builtins.SingleOps.Inspect)
+            );
+            
         }
         
         private static void LoadSystem__Single_Class(IronRuby.Builtins.RubyModule/*!*/ module) {
@@ -5556,6 +5565,10 @@ namespace IronRuby.Builtins {
         
         private static void LoadSystem__UInt16_Instance(IronRuby.Builtins.RubyModule/*!*/ module) {
             LoadIronRuby__Clr__Integer_Instance(module);
+            module.DefineLibraryMethod(&quot;inspect&quot;, 0x51, 
+                new System.Func&lt;System.Object, IronRuby.Builtins.MutableString&gt;(IronRuby.Builtins.UInt16Ops.Inspect)
+            );
+            
             module.DefineLibraryMethod(&quot;size&quot;, 0x51, 
                 new System.Func&lt;System.UInt16, System.Int32&gt;(IronRuby.Builtins.UInt16Ops.Size)
             );
@@ -5573,6 +5586,10 @@ namespace IronRuby.Builtins {
         
         private static void LoadSystem__UInt32_Instance(IronRuby.Builtins.RubyModule/*!*/ module) {
             LoadIronRuby__Clr__BigInteger_Instance(module);
+            module.DefineLibraryMethod(&quot;inspect&quot;, 0x51, 
+                new System.Func&lt;System.Object, IronRuby.Builtins.MutableString&gt;(IronRuby.Builtins.UInt32Ops.Inspect)
+            );
+            
             module.DefineLibraryMethod(&quot;size&quot;, 0x51, 
                 new System.Func&lt;System.UInt32, System.Int32&gt;(IronRuby.Builtins.UInt32Ops.Size)
             );
@@ -5590,6 +5607,10 @@ namespace IronRuby.Builtins {
         
         private static void LoadSystem__UInt64_Instance(IronRuby.Builtins.RubyModule/*!*/ module) {
             LoadIronRuby__Clr__BigInteger_Instance(module);
+            module.DefineLibraryMethod(&quot;inspect&quot;, 0x51, 
+                new System.Func&lt;System.Object, IronRuby.Builtins.MutableString&gt;(IronRuby.Builtins.UInt64Ops.Inspect)
+            );
+            
             module.DefineLibraryMethod(&quot;size&quot;, 0x51, 
                 new System.Func&lt;System.UInt64, System.Int32&gt;(IronRuby.Builtins.UInt64Ops.Size)
             );
@@ -7636,6 +7657,7 @@ namespace IronRuby.StandardLibrary.Enumerator {
             IronRuby.Builtins.RubyModule def1 = DefineGlobalModule(&quot;Enumerable&quot;, typeof(IronRuby.Builtins.Enumerable), 0x00000003, LoadEnumerable_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
             ExtendModule(typeof(IronRuby.Builtins.Kernel), LoadIronRuby__Builtins__Kernel_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
             IronRuby.Builtins.RubyClass def2 = DefineClass(&quot;Enumerable::Enumerator&quot;, typeof(IronRuby.StandardLibrary.Enumerator.Enumerable.Enumerator), 0x00000103, classRef0, LoadEnumerable__Enumerator_Instance, null, null, new IronRuby.Builtins.RubyModule[] {def1}, 
+                new System.Func&lt;IronRuby.Builtins.RubyClass, System.Object, IronRuby.StandardLibrary.Enumerator.Enumerable.Enumerator&gt;(IronRuby.StandardLibrary.Enumerator.Enumerable.Enumerator.Create), 
                 new System.Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.String, System.Object[], IronRuby.StandardLibrary.Enumerator.Enumerable.Enumerator&gt;(IronRuby.StandardLibrary.Enumerator.Enumerable.Enumerator.Create)
             );
             def1.SetConstant(&quot;Enumerator&quot;, def2);
@@ -7670,6 +7692,7 @@ namespace IronRuby.StandardLibrary.Enumerator {
             );
             
             module.DefineLibraryMethod(&quot;initialize&quot;, 0x12, 
+                new System.Func&lt;IronRuby.StandardLibrary.Enumerator.Enumerable.Enumerator, System.Object, IronRuby.StandardLibrary.Enumerator.Enumerable.Enumerator&gt;(IronRuby.StandardLibrary.Enumerator.Enumerable.Enumerator.Reinitialize), 
                 new System.Func&lt;IronRuby.StandardLibrary.Enumerator.Enumerable.Enumerator, System.Object, System.String, System.Object[], IronRuby.StandardLibrary.Enumerator.Enumerable.Enumerator&gt;(IronRuby.StandardLibrary.Enumerator.Enumerable.Enumerator.Reinitialize)
             );
             </diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializers.Generated.cs</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,9 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.30729&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{77323B06-15A2-4CF4-8A7A-86EAA2B66498}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Library&lt;/OutputType&gt;
@@ -22,6 +23,7 @@
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
     &lt;BaseAddress&gt;891289600&lt;/BaseAddress&gt;
     &lt;SilverlightPath Condition=&quot;$(SilverlightPath) == ''&quot;&gt;..\..\..\Utilities\Silverlight\x86ret\&lt;/SilverlightPath&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' &quot;&gt;
     &lt;DebugSymbols&gt;true&lt;/DebugSymbols&gt;
@@ -195,4 +197,4 @@
   &lt;/Target&gt;
   &lt;Target Name=&quot;AfterBuild&quot;&gt;
   &lt;/Target&gt;
-&lt;/Project&gt;
\ No newline at end of file
+&lt;/Project&gt;</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/IronRuby.Libraries.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -623,17 +623,24 @@ namespace IronRuby.Builtins {
         }
 
         // used by auto-conversions
-        [Obsolete(&quot;Do not use in code&quot;)]
-        public static implicit operator string(MutableString/*!*/ self) {
+        public static explicit operator string(MutableString/*!*/ self) {
             return self._content.ConvertToString();
         }
 
         // used by auto-conversions
-        [Obsolete(&quot;Do not use in code&quot;)]
-        public static implicit operator byte[](MutableString/*!*/ self) {
+        public static explicit operator byte[](MutableString/*!*/ self) {
             return self._content.ConvertToBytes();
         }
 
+        // used by auto-conversions
+        public static explicit operator char(MutableString/*!*/ self) {
+            try {
+                return self.GetChar(0);
+            } catch (IndexOutOfRangeException) {
+                throw RubyExceptions.CreateTypeConversionError(&quot;String&quot;, &quot;System::Char&quot;);
+            }
+        }
+
         #endregion
 
         #region Comparisons (read-only) (TODO: Encodings)</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Builtins/MutableString.cs</filename>
    </modified>
    <modified>
      <diff>@@ -33,7 +33,7 @@ namespace IronRuby.Builtins {
             return new Meta(parameter, BindingRestrictions.Empty, this);
         }
 
-        internal sealed class Meta : RubyMetaObject&lt;Proc&gt; {
+        internal sealed class Meta : RubyMetaObject&lt;Proc&gt;, IConvertibleMetaObject {
             public override RubyContext/*!*/ Context {
                 get { return Value.LocalScope.RubyContext; }
             }
@@ -47,6 +47,10 @@ namespace IronRuby.Builtins {
             }
 
             // Conversion to a delegate.
+            public bool CanConvertTo(Type/*!*/ type, bool @explicit) {
+                return typeof(Delegate).IsAssignableFrom(type);
+            }
+
             public override DynamicMetaObject/*!*/ BindConvert(ConvertBinder/*!*/ binder) {
                 return InteropBinder.TryBindCovertToDelegate(this, binder, Methods.CreateDelegateFromProc)
                     ?? base.BindConvert(binder);</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Builtins/Proc.Meta.cs</filename>
    </modified>
    <modified>
      <diff>@@ -21,6 +21,7 @@ using IronRuby.Runtime;
 using Microsoft.Scripting;
 using Microsoft.Scripting.Utils;
 using IronRuby.Runtime.Calls;
+using IronRuby.Runtime.Conversions;
 
 namespace IronRuby.Builtins {
 </diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyArray.cs</filename>
    </modified>
    <modified>
      <diff>@@ -32,6 +32,7 @@ using Microsoft.Scripting.Utils;
 using Ast = System.Linq.Expressions.Expression;
 using AstUtils = Microsoft.Scripting.Ast.Utils;
 using Microsoft.Scripting.Generation;
+using IronRuby.Runtime.Conversions;
 
 namespace IronRuby.Builtins {
     public sealed partial class RubyClass : RubyModule, IDuplicable {
@@ -250,7 +251,7 @@ namespace IronRuby.Builtins {
                 Interlocked.Exchange(ref _underlyingSystemType, 
                     RubyTypeDispenser.GetOrCreateType(
                         _superClass.GetUnderlyingSystemType(), 
-                        GetClrInterfaces(),
+                        GetImplementedInterfaces(),
                         _superClass != null &amp;&amp; (_superClass.Restrictions &amp; ModuleRestrictions.NoOverrides) != 0
                     )
                 );
@@ -747,12 +748,19 @@ namespace IronRuby.Builtins {
                     return true;
                 }
             } else if (name == &quot;[]&quot; || name == &quot;[]=&quot;) {
-                object[] attrs = type.GetCustomAttributes(typeof(DefaultMemberAttribute), false);
-                if (attrs.Length == 1) {
-                    // default indexer accessor:
+                if (type.IsArray &amp;&amp; !_isSingletonClass) {
                     bool isSetter = name.Length == 3;
-                    if (TryGetClrProperty(type, bindingFlags, isSetter, name, ((DefaultMemberAttribute)attrs[0]).MemberName, null, out method)) {
-                        return true;
+                    TryGetClrMethod(type, bindingFlags, false, name, null, isSetter ? &quot;Set&quot; : &quot;Get&quot;, null, out method);
+                    Debug.Assert(method != null);
+                    return true;
+                } else {
+                    object[] attrs = type.GetCustomAttributes(typeof(DefaultMemberAttribute), false);
+                    if (attrs.Length == 1) {
+                        // default indexer accessor:
+                        bool isSetter = name.Length == 3;
+                        if (TryGetClrProperty(type, bindingFlags, isSetter, name, ((DefaultMemberAttribute)attrs[0]).MemberName, null, out method)) {
+                            return true;
+                        }
                     }
                 }
             } else if (name.LastCharacter() == '=') {
@@ -1249,7 +1257,7 @@ namespace IronRuby.Builtins {
                     BuildDelegateConstructorCall(metaBuilder, args, type);
                     return;
                 } else if (type.IsArray &amp;&amp; type.GetArrayRank() == 1) {
-                    constructionOverloads = ClrVectorFactories;
+                    constructionOverloads = GetClrVectorFactories();
                 } else if (_structInfo != null) {
                     constructionOverloads = new MethodBase[] { Methods.CreateStructInstance };
                 } else if (_factories.Length != 0) {
@@ -1386,16 +1394,19 @@ namespace IronRuby.Builtins {
             }
         }
 
-        private MethodBase/*!*/[]/*!*/ ClrVectorFactories {
-            get {
-                if (_clrVectorFactories == null) {
-                    _clrVectorFactories = new[] { Methods.CreateVector, Methods.CreateVectorWithValues };
-                }
-                return _clrVectorFactories;
+        private MethodBase/*!*/[]/*!*/ GetClrVectorFactories() {
+            if (_clrVectorFactories == null) {
+                Type elementType = GetUnderlyingSystemType().GetElementType();
+                _clrVectorFactories = new[] { 
+                    Methods.CreateVector.MakeGenericMethod(elementType), 
+                    Methods.CreateVectorWithValues.MakeGenericMethod(elementType) 
+                };
             }
+            return _clrVectorFactories;
         }
 
-        private static MethodBase[] _clrVectorFactories;
+        // thread-safe (the latest write wins):
+        private MethodBase[] _clrVectorFactories;
 
         #endregion
     }</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs</filename>
    </modified>
    <modified>
      <diff>@@ -1669,8 +1669,8 @@ namespace IronRuby.Builtins {
 
         private bool TryGetClrMember(string/*!*/ name, bool virtualLookup, out RubyMemberInfo method) {
             // Skip hidden CLR overloads.
-            // Skip lookup on types that are not visible or interfaces.
-            if (_typeTracker != null &amp;&amp; !_typeTracker.Type.IsInterface) {
+            // Skip lookup on types that are not visible, that are interfaces or generic type definitions.
+            if (_typeTracker != null &amp;&amp; !_typeTracker.Type.IsInterface &amp;&amp; !_typeTracker.Type.IsGenericTypeDefinition) {
                 // Note: Do not allow mangling for CLR virtual lookups - we want to match the overridden name exactly as is, 
                 // so that it corresponds to the base method call the override stub performs.
                 bool tryUnmangle = !virtualLookup &amp;&amp; (_restrictions &amp; ModuleRestrictions.NoNameMangling) == 0;
@@ -1904,14 +1904,6 @@ namespace IronRuby.Builtins {
 
             foreach (RubyModule module in expanded) {
                 if (module.IsInterface) {
-                    // Can't include generic interfaces
-                    if (module.TypeTracker.Type.ContainsGenericParameters) {
-                        throw RubyExceptions.CreateTypeError(String.Format(
-                            &quot;{0}: cannot extend with open generic instantiation {1}. Only closed instantiations are supported.&quot;,
-                            Name, module.Name
-                            ));
-                    }
-
                     if (!CanIncludeClrInterface) {
                         bool alreadyIncluded = false;
                         foreach (RubyModule includedModule in _mixins) {
@@ -2006,11 +1998,11 @@ namespace IronRuby.Builtins {
             get { return true; }
         }
 
-        internal List&lt;Type&gt; GetClrInterfaces() {
+        internal List&lt;Type&gt; GetImplementedInterfaces() {
             List&lt;Type&gt; interfaces = new List&lt;Type&gt;();
             using (Context.ClassHierarchyLocker()) {
                 foreach (RubyModule m in _mixins) {
-                    if (m.IsInterface &amp;&amp; !interfaces.Contains(m.TypeTracker.Type)) {
+                    if (m.IsInterface &amp;&amp; !m.TypeTracker.Type.IsGenericTypeDefinition &amp;&amp; !interfaces.Contains(m.TypeTracker.Type)) {
                         interfaces.Add(m.TypeTracker.Type);
                     }
                 }</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyModule.cs</filename>
    </modified>
    <modified>
      <diff>@@ -17,6 +17,7 @@ using Microsoft.Scripting;
 using Microsoft.Scripting.Utils;
 using IronRuby.Builtins;
 using IronRuby.Runtime.Calls;
+using IronRuby.Runtime.Conversions;
 using MSA = System.Linq.Expressions;
 
 namespace IronRuby.Compiler.Ast {</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/BlockReference.cs</filename>
    </modified>
    <modified>
      <diff>@@ -13,7 +13,9 @@
  *
  * ***************************************************************************/
 
-using System.Collections.Generic;
+using System.Diagnostics;
+using IronRuby.Runtime;
+using IronRuby.Runtime.Conversions;
 using Microsoft.Scripting;
 using Microsoft.Scripting.Ast;
 using Microsoft.Scripting.Utils;
@@ -22,10 +24,6 @@ using MSA = System.Linq.Expressions;
 
 namespace IronRuby.Compiler.Ast {
     using Ast = System.Linq.Expressions.Expression;
-    using System.Diagnostics;
-    using IronRuby.Runtime.Calls;
-    using System.Collections;
-    using IronRuby.Runtime;
 
     // rescue type
     //   statements</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Clauses/RescueClause.cs</filename>
    </modified>
    <modified>
      <diff>@@ -20,12 +20,13 @@ using Microsoft.Scripting.Actions;
 using Microsoft.Scripting.Utils;
 using IronRuby.Builtins;
 using IronRuby.Runtime;
+using IronRuby.Runtime.Calls;
+using IronRuby.Runtime.Conversions;
 using AstUtils = Microsoft.Scripting.Ast.Utils;
 using MSA = System.Linq.Expressions;
 
 namespace IronRuby.Compiler.Ast {
     using Ast = System.Linq.Expressions.Expression;
-    using IronRuby.Runtime.Calls;
 
     public partial class MatchExpression : Expression {
         private readonly RegularExpression/*!*/ _regex;</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/MatchExpression.cs</filename>
    </modified>
    <modified>
      <diff>@@ -22,12 +22,13 @@ using IronRuby.Runtime;
 using IronRuby.Runtime.Calls;
 using Microsoft.Scripting;
 using Microsoft.Scripting.Utils;
+using System.Diagnostics;
+using IronRuby.Runtime.Conversions;
 using AstUtils = Microsoft.Scripting.Ast.Utils;
 
 namespace IronRuby.Compiler.Ast {
     using Ast = System.Linq.Expressions.Expression;
     using MSA = System.Linq.Expressions;
-    using System.Diagnostics;
 
     public enum StringKind {
         Mutable,</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/StringConstructor.cs</filename>
    </modified>
    <modified>
      <diff>@@ -25,6 +25,7 @@ using Microsoft.Scripting.Utils;
 using IronRuby.Builtins;
 using IronRuby.Runtime;
 using IronRuby.Runtime.Calls;
+using IronRuby.Runtime.Conversions;
 using MSA = System.Linq.Expressions;
 using AstUtils = Microsoft.Scripting.Ast.Utils;
 </diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/SourceUnitTree.cs</filename>
    </modified>
    <modified>
      <diff>@@ -416,7 +416,7 @@ namespace IronRuby.Compiler.Generation {
         }
 
         private void DefineDynamicObjectImplementation() {
-            _tb.AddInterfaceImplementation(typeof(IDynamicMetaObjectProvider));
+            _tb.AddInterfaceImplementation(typeof(IRubyDynamicMetaObjectProvider));
 
             // MetaObject! IDynamicMetaObjectProvider.GetMetaObject(Expression! parameter) {
             //   return RubyOps.GetMetaObject(this, parameter);</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Compiler/Generation/RubyTypeBuilder.cs</filename>
    </modified>
    <modified>
      <diff>@@ -24,6 +24,7 @@ using IronRuby.Builtins;
 using IronRuby.Runtime;
 using IronRuby.Runtime.Calls;
 using System.Linq.Expressions;
+using IronRuby.Runtime.Conversions;
 
 namespace IronRuby.Compiler.Generation {
     public class RubyTypeEmitter : ClsTypeEmitter {</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Compiler/Generation/RubyTypeEmitter.cs</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Ruby.Build.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,9 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.30729&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{7F6984B4-EE6D-4E6F-ABB1-E210D7DC4FDD}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Library&lt;/OutputType&gt;
@@ -22,6 +23,7 @@
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
     &lt;BaseAddress&gt;887095296&lt;/BaseAddress&gt;
     &lt;SilverlightPath Condition=&quot;$(SilverlightPath) == ''&quot;&gt;..\..\..\Utilities\Silverlight\x86ret\&lt;/SilverlightPath&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'FxCop|AnyCPU' &quot;&gt;
     &lt;DebugType&gt;pdbonly&lt;/DebugType&gt;
@@ -32,7 +34,8 @@
     &lt;WarningLevel&gt;4&lt;/WarningLevel&gt;
     &lt;TreatWarningsAsErrors&gt;true&lt;/TreatWarningsAsErrors&gt;
     &lt;RunCodeAnalysis&gt;true&lt;/RunCodeAnalysis&gt;
-    &lt;CodeAnalysisRules&gt;-Microsoft.Usage#CA2209;-!Microsoft.Design#CA1012;-!Microsoft.Design#CA2210;-!Microsoft.Design#CA1040;-!Microsoft.Design#CA1005;-!Microsoft.Design#CA1020;-!Microsoft.Design#CA1021;-!Microsoft.Design#CA1010;-!Microsoft.Design#CA1011;-!Microsoft.Design#CA1009;-!Microsoft.Design#CA1050;-!Microsoft.Design#CA1026;-!Microsoft.Design#CA1019;-!Microsoft.Design#CA1031;-!Microsoft.Design#CA1047;-!Microsoft.Design#CA1000;-!Microsoft.Design#CA1048;-!Microsoft.Design#CA1051;-!Microsoft.Design#CA1002;-!Microsoft.Design#CA1061;-!Microsoft.Design#CA1006;-!Microsoft.Design#CA1046;-!Microsoft.Design#CA1045;-!Microsoft.Design#CA1065;-!Microsoft.Design#CA1038;-!Microsoft.Design#CA1008;-!Microsoft.Design#CA1028;-!Microsoft.Design#CA1064;-!Microsoft.Design#CA1004;-!Microsoft.Design#CA1035;-!Microsoft.Design#CA1063;-!Microsoft.Design#CA1032;-!Microsoft.Design#CA1023;-!Microsoft.Design#CA1033;-!Microsoft.Design#CA1039;-!Microsoft.Design#CA1016;-!Microsoft.Design#CA1014;-!Microsoft.Design#CA1017;-!Microsoft.Design#CA1018;-!Microsoft.Design#CA1027;-!Microsoft.Design#CA1059;-!Microsoft.Design#CA1060;-!Microsoft.Design#CA1034;-!Microsoft.Design#CA1013;-!Microsoft.Design#CA1036;-!Microsoft.Design#CA1044;-!Microsoft.Design#CA1041;-!Microsoft.Design#CA1025;-!Microsoft.Design#CA1052;-!Microsoft.Design#CA1053;-!Microsoft.Design#CA1057;-!Microsoft.Design#CA1058;-!Microsoft.Design#CA1001;-!Microsoft.Design#CA1049;-!Microsoft.Design#CA1054;-!Microsoft.Design#CA1056;-!Microsoft.Design#CA1055;-!Microsoft.Design#CA1030;-!Microsoft.Design#CA1003;-!Microsoft.Design#CA1007;-!Microsoft.Design#CA1043;-!Microsoft.Design#CA1024;-!Microsoft.Globalization#CA1301;-!Microsoft.Globalization#CA1302;-!Microsoft.Globalization#CA1308;-!Microsoft.Globalization#CA1306;-!Microsoft.Globalization#CA1304;-!Microsoft.Globalization#CA1305;-!Microsoft.Globalization#CA2101;-!Microsoft.Globalization#CA1300;-!Microsoft.Globalization#CA1307;-!Microsoft.Globalization#CA1309;-!Microsoft.Interoperability#CA1403;-!Microsoft.Interoperability#CA1406;-!Microsoft.Interoperability#CA1413;-!Microsoft.Interoperability#CA1402;-!Microsoft.Interoperability#CA1407;-!Microsoft.Interoperability#CA1404;-!Microsoft.Interoperability#CA1410;-!Microsoft.Interoperability#CA1411;-!Microsoft.Interoperability#CA1405;-!Microsoft.Interoperability#CA1409;-!Microsoft.Interoperability#CA1415;-!Microsoft.Interoperability#CA1408;-!Microsoft.Interoperability#CA1414;-!Microsoft.Interoperability#CA1412;-!Microsoft.Interoperability#CA1400;-!Microsoft.Interoperability#CA1401;-!Microsoft.Maintainability#CA1506;-!Microsoft.Maintainability#CA1502;-!Microsoft.Maintainability#CA1501;-!Microsoft.Maintainability#CA1505;-!Microsoft.Maintainability#CA1504;-!Microsoft.Maintainability#CA1500;-!Microsoft.Mobility#CA1600;-!Microsoft.Mobility#CA1601;-!Microsoft.Naming#CA1702;-!Microsoft.Naming#CA1700;-!Microsoft.Naming#CA1712;-!Microsoft.Naming#CA1713;-!Microsoft.Naming#CA1714;-!Microsoft.Naming#CA1709;-!Microsoft.Naming#CA1704;-!Microsoft.Naming#CA1708;-!Microsoft.Naming#CA1715;-!Microsoft.Naming#CA1710;-!Microsoft.Naming#CA1720;-!Microsoft.Naming#CA1707;-!Microsoft.Naming#CA1722;-!Microsoft.Naming#CA1711;-!Microsoft.Naming#CA1716;-!Microsoft.Naming#CA1717;-!Microsoft.Naming#CA1725;-!Microsoft.Naming#CA1719;-!Microsoft.Naming#CA1721;-!Microsoft.Naming#CA1701;-!Microsoft.Naming#CA1703;-!Microsoft.Naming#CA1724;-!Microsoft.Naming#CA1726;-!Microsoft.Performance#CA1809;-!Microsoft.Performance#CA1811;-!Microsoft.Performance#CA1812;-!Microsoft.Performance#CA1813;+!Microsoft.Performance#CA1823;-!Microsoft.Performance#CA1800;-!Microsoft.Performance#CA1805;-!Microsoft.Performance#CA1810;+!Microsoft.Performance#CA1824;-!Microsoft.Performance#CA1822;-!Microsoft.Performance#CA1815;-!Microsoft.Performance#CA1814;-!Microsoft.Performance#CA1819;-!Microsoft.Performance#CA1821;-!Microsoft.Performance#CA1804;-!Microsoft.Performance#CA1820;-!Microsoft.Performance#CA1802;+!Microsoft.Portability#CA1903;+!Microsoft.Portability#CA1901;+!Microsoft.Portability#CA1900;+!Microsoft.Reliability#CA2001;+!Microsoft.Reliability#CA2002;+!Microsoft.Reliability#CA2003;+!Microsoft.Reliability#CA2004;+!Microsoft.Reliability#CA2006;+!Microsoft.Security#CA2116;+!Microsoft.Security#CA2117;+!Microsoft.Security#CA2105;+!Microsoft.Security#CA2115;+!Microsoft.Security#CA2102;-!Microsoft.Security#CA2104;+!Microsoft.Security#CA2122;+!Microsoft.Security#CA2114;+!Microsoft.Security#CA2123;+!Microsoft.Security#CA2111;+!Microsoft.Security#CA2108;+!Microsoft.Security#CA2107;+!Microsoft.Security#CA2103;+!Microsoft.Security#CA2118;+!Microsoft.Security#CA2109;+!Microsoft.Security#CA2119;+!Microsoft.Security#CA2106;+!Microsoft.Security#CA2112;+!Microsoft.Security#CA2120;+!Microsoft.Security#CA2121;+!Microsoft.Security#CA2126;+!Microsoft.Security#CA2124;+!Microsoft.Security#CA2127;+!Microsoft.Security#CA2128;+!Microsoft.Security#CA2129;-!Microsoft.Usage#CA2243;-!Microsoft.Usage#CA2236;-!Microsoft.Usage#CA1816;-!Microsoft.Usage#CA2227;-!Microsoft.Usage#CA2213;-!Microsoft.Usage#CA2216;-!Microsoft.Usage#CA2214;-!Microsoft.Usage#CA2222;-!Microsoft.Usage#CA1806;-!Microsoft.Usage#CA2217;-!Microsoft.Usage#CA2212;-!Microsoft.Usage#CA2219;-!Microsoft.Usage#CA2201;-!Microsoft.Usage#CA2228;-!Microsoft.Usage#CA2221;-!Microsoft.Usage#CA2220;-!Microsoft.Usage#CA2240;-!Microsoft.Usage#CA2229;-!Microsoft.Usage#CA2238;-!Microsoft.Usage#CA2207;-!Microsoft.Usage#CA2208;-!Microsoft.Usage#CA2235;-!Microsoft.Usage#CA2237;-!Microsoft.Usage#CA2232;-!Microsoft.Usage#CA2223;-!Microsoft.Usage#CA2211;-!Microsoft.Usage#CA2233;-!Microsoft.Usage#CA2225;-!Microsoft.Usage#CA2226;-!Microsoft.Usage#CA2231;-!Microsoft.Usage#CA2224;-!Microsoft.Usage#CA2218;-!Microsoft.Usage#CA2234;-!Microsoft.Usage#CA2239;-!Microsoft.Usage#CA2200;-!Microsoft.Usage#CA1801;-!Microsoft.Usage#CA2242;-!Microsoft.Usage#CA2205;-!Microsoft.Usage#CA2230&lt;/CodeAnalysisRules&gt;
+    &lt;CodeAnalysisRules&gt;-Microsoft.Usage#CA2209;-!Microsoft.Design#CA1012;-!Microsoft.Design#CA2210;-!Microsoft.Design#CA1040;-!Microsoft.Design#CA1005;-!Microsoft.Design#CA1020;-!Microsoft.Design#CA1021;-!Microsoft.Design#CA1010;-!Microsoft.Design#CA1011;-!Microsoft.Design#CA1009;-!Microsoft.Design#CA1050;-!Microsoft.Design#CA1026;-!Microsoft.Design#CA1019;-!Microsoft.Design#CA1031;-!Microsoft.Design#CA1047;-!Microsoft.Design#CA1000;-!Microsoft.Design#CA1048;-!Microsoft.Design#CA1051;-!Microsoft.Design#CA1002;-!Microsoft.Design#CA1061;-!Microsoft.Design#CA1006;-!Microsoft.Design#CA1046;-!Microsoft.Design#CA1045;-!Microsoft.Design#CA1065;-!Microsoft.Design#CA1038;-!Microsoft.Design#CA1008;-!Microsoft.Design#CA1028;-!Microsoft.Design#CA1064;-!Microsoft.Design#CA1004;-!Microsoft.Design#CA1035;-!Microsoft.Design#CA1063;-!Microsoft.Design#CA1032;-!Microsoft.Design#CA1023;-!Microsoft.Design#CA1033;-!Microsoft.Design#CA1039;-!Microsoft.Design#CA1016;-!Microsoft.Design#CA1014;-!Microsoft.Design#CA1017;-!Microsoft.Design#CA1018;-!Microsoft.Design#CA1027;-!Microsoft.Design#CA1059;-!Microsoft.Design#CA1060;-!Microsoft.Design#CA1034;-!Microsoft.Design#CA1013;-!Microsoft.Design#CA1036;-!Microsoft.Design#CA1044;-!Microsoft.Design#CA1041;-!Microsoft.Design#CA1025;-!Microsoft.Design#CA1052;-!Microsoft.Design#CA1053;-!Microsoft.Design#CA1057;-!Microsoft.Design#CA1058;-!Microsoft.Design#CA1001;-!Microsoft.Design#CA1049;-!Microsoft.Design#CA1054;-!Microsoft.Design#CA1056;-!Microsoft.Design#CA1055;-!Microsoft.Design#CA1030;-!Microsoft.Design#CA1003;-!Microsoft.Design#CA1007;-!Microsoft.Design#CA1043;-!Microsoft.Design#CA1024;-!Microsoft.Globalization#CA1301;-!Microsoft.Globalization#CA1302;-!Microsoft.Globalization#CA1308;-!Microsoft.Globalization#CA1306;-!Microsoft.Globalization#CA1304;-!Microsoft.Globalization#CA1305;-!Microsoft.Globalization#CA2101;-!Microsoft.Globalization#CA1300;-!Microsoft.Globalization#CA1307;-!Microsoft.Globalization#CA1309;-!Microsoft.Interoperability#CA1403;-!Microsoft.Interoperability#CA1406;-!Microsoft.Interoperability#CA1413;-!Microsoft.Interoperability#CA1402;-!Microsoft.Interoperability#CA1407;-!Microsoft.Interoperability#CA1404;-!Microsoft.Interoperability#CA1410;-!Microsoft.Interoperability#CA1411;-!Microsoft.Interoperability#CA1405;-!Microsoft.Interoperability#CA1409;-!Microsoft.Interoperability#CA1415;-!Microsoft.Interoperability#CA1408;-!Microsoft.Interoperability#CA1414;-!Microsoft.Interoperability#CA1412;-!Microsoft.Interoperability#CA1400;-!Microsoft.Interoperability#CA1401;-!Microsoft.Maintainability#CA1506;-!Microsoft.Maintainability#CA1502;-!Microsoft.Maintainability#CA1501;-!Microsoft.Maintainability#CA1505;-!Microsoft.Maintainability#CA1504;-!Microsoft.Maintainability#CA1500;-!Microsoft.Mobility#CA1600;-!Microsoft.Mobility#CA1601;-!Microsoft.Naming#CA1702;-!Microsoft.Naming#CA1700;-!Microsoft.Naming#CA1712;-!Microsoft.Naming#CA1713;-!Microsoft.Naming#CA1714;-!Microsoft.Naming#CA1709;-!Microsoft.Naming#CA1704;-!Microsoft.Naming#CA1708;-!Microsoft.Naming#CA1715;-!Microsoft.Naming#CA1710;-!Microsoft.Naming#CA1720;-!Microsoft.Naming#CA1707;-!Microsoft.Naming#CA1722;-!Microsoft.Naming#CA1711;-!Microsoft.Naming#CA1716;-!Microsoft.Naming#CA1717;-!Microsoft.Naming#CA1725;-!Microsoft.Naming#CA1719;-!Microsoft.Naming#CA1721;-!Microsoft.Naming#CA1701;-!Microsoft.Naming#CA1703;-!Microsoft.Naming#CA1724;-!Microsoft.Naming#CA1726;-!Microsoft.Performance#CA1809;-!Microsoft.Performance#CA1811;-!Microsoft.Performance#CA1812;-!Microsoft.Performance#CA1813;+!Microsoft.Performance#CA1823;-!Microsoft.Performance#CA1800;-!Microsoft.Performance#CA1805;-!Microsoft.Performance#CA1810;+!Microsoft.Performance#CA1824;-!Microsoft.Performance#CA1822;-!Microsoft.Performance#CA1815;-!Microsoft.Performance#CA1814;-!Microsoft.Performance#CA1819;-!Microsoft.Performance#CA1821;-!Microsoft.Performance#CA1804;-!Microsoft.Performance#CA1820;-!Microsoft.Performance#CA1802;+!Microsoft.Portability#CA1903;+!Microsoft.Portability#CA1901;+!Microsoft.Portability#CA1900;+!Microsoft.Reliability#CA2001;+!Microsoft.Reliability#CA2002;+!Microsoft
+.Reliability#CA2003;+!Microsoft.Reliability#CA2004;+!Microsoft.Reliability#CA2006;+!Microsoft.Security#CA2116;+!Microsoft.Security#CA2117;+!Microsoft.Security#CA2105;+!Microsoft.Security#CA2115;+!Microsoft.Security#CA2102;-!Microsoft.Security#CA2104;+!Microsoft.Security#CA2122;+!Microsoft.Security#CA2114;+!Microsoft.Security#CA2123;+!Microsoft.Security#CA2111;+!Microsoft.Security#CA2108;+!Microsoft.Security#CA2107;+!Microsoft.Security#CA2103;+!Microsoft.Security#CA2118;+!Microsoft.Security#CA2109;+!Microsoft.Security#CA2119;+!Microsoft.Security#CA2106;+!Microsoft.Security#CA2112;+!Microsoft.Security#CA2120;+!Microsoft.Security#CA2121;+!Microsoft.Security#CA2126;+!Microsoft.Security#CA2124;+!Microsoft.Security#CA2127;+!Microsoft.Security#CA2128;+!Microsoft.Security#CA2129;-!Microsoft.Usage#CA2243;-!Microsoft.Usage#CA2236;-!Microsoft.Usage#CA1816;-!Microsoft.Usage#CA2227;-!Microsoft.Usage#CA2213;-!Microsoft.Usage#CA2216;-!Microsoft.Usage#CA2214;-!Microsoft.Usage#CA2222;-!Microsoft.Usage#CA1806;-!Microsoft.Usage#CA2217;-!Microsoft.Usage#CA2212;-!Microsoft.Usage#CA2219;-!Microsoft.Usage#CA2201;-!Microsoft.Usage#CA2228;-!Microsoft.Usage#CA2221;-!Microsoft.Usage#CA2220;-!Microsoft.Usage#CA2240;-!Microsoft.Usage#CA2229;-!Microsoft.Usage#CA2238;-!Microsoft.Usage#CA2207;-!Microsoft.Usage#CA2208;-!Microsoft.Usage#CA2235;-!Microsoft.Usage#CA2237;-!Microsoft.Usage#CA2232;-!Microsoft.Usage#CA2223;-!Microsoft.Usage#CA2211;-!Microsoft.Usage#CA2233;-!Microsoft.Usage#CA2225;-!Microsoft.Usage#CA2226;-!Microsoft.Usage#CA2231;-!Microsoft.Usage#CA2224;-!Microsoft.Usage#CA2218;-!Microsoft.Usage#CA2234;-!Microsoft.Usage#CA2239;-!Microsoft.Usage#CA2200;-!Microsoft.Usage#CA1801;-!Microsoft.Usage#CA2242;-!Microsoft.Usage#CA2205;-!Microsoft.Usage#CA2230&lt;/CodeAnalysisRules&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' &quot;&gt;
     &lt;DebugSymbols&gt;true&lt;/DebugSymbols&gt;
@@ -176,10 +179,10 @@
     &lt;Compile Include=&quot;Compiler\Parser\ParserStack.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\BinaryContentProvider.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\CallSiteStorages.cs&quot; /&gt;
-    &lt;Compile Include=&quot;Runtime\Calls\GenericConversionAction.cs&quot; /&gt;
+    &lt;Compile Include=&quot;Runtime\Conversions\GenericConversionAction.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\Calls\MethodDispatcher.Generated.cs&quot; /&gt;
-    &lt;Compile Include=&quot;Runtime\Calls\CompositeConversionAction.cs&quot; /&gt;
-    &lt;Compile Include=&quot;Runtime\Calls\ConvertToSAction.cs&quot; /&gt;
+    &lt;Compile Include=&quot;Runtime\Conversions\CompositeConversionAction.cs&quot; /&gt;
+    &lt;Compile Include=&quot;Runtime\Conversions\ConvertToSAction.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\Calls\InteropBinder.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\Calls\MethodDispatcher.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\Calls\MethodResolutionResult.cs&quot; /&gt;
@@ -219,7 +222,7 @@
     &lt;Compile Include=&quot;Runtime\Calls\BlockDispatcherUnsplatN.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\Calls\CallSiteTracer.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\Calls\MetaObjectBuilder.cs&quot; /&gt;
-    &lt;Compile Include=&quot;Runtime\Calls\ProtocolConversionAction.cs&quot; /&gt;
+    &lt;Compile Include=&quot;Runtime\Conversions\ProtocolConversionAction.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\Calls\RubyCallAction.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\Calls\RubyCallSignature.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\Calls\SuperCallAction.cs&quot; /&gt;
@@ -251,8 +254,8 @@
     &lt;Compile Include=&quot;Runtime\Protocols.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\ReferenceEqualityComparer.cs&quot; /&gt;
     &lt;Compile Include=&quot;Compiler\Ast\Expressions\RangeExpression.cs&quot; /&gt;
-    &lt;Compile Include=&quot;Runtime\Converter.cs&quot; /&gt;
-    &lt;Compile Include=&quot;Runtime\Converter.Generated.cs&quot; /&gt;
+    &lt;Compile Include=&quot;Runtime\Conversions\Converter.cs&quot; /&gt;
+    &lt;Compile Include=&quot;Runtime\Conversions\Converter.Generated.cs&quot; /&gt;
     &lt;Compile Include=&quot;Builtins\Initializer.cs&quot; /&gt;
     &lt;Compile Include=&quot;Compiler\AstGenerator.cs&quot; /&gt;
     &lt;Compile Include=&quot;Compiler\Ast\Arguments.cs&quot; /&gt;
@@ -339,7 +342,6 @@
     &lt;Compile Include=&quot;Runtime\Calls\RubyBinder.cs&quot; /&gt;
     &lt;Compile Include=&quot;Builtins\RubyArray.cs&quot; /&gt;
     &lt;Compile Include=&quot;Builtins\RubyClass.cs&quot; /&gt;
-    &lt;Compile Include=&quot;Runtime\RubyCallTargets.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\Loader.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\Calls\RubyEventInfo.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\RubyExceptionData.cs&quot; /&gt;
@@ -359,7 +361,7 @@
     &lt;Compile Include=&quot;Runtime\RubyScope.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\RubyScriptCode.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\RubyUtils.cs&quot; /&gt;
-    &lt;Compile Include=&quot;Runtime\RuntimeFlowControl.cs&quot; /&gt;
+    &lt;Compile Include=&quot;Runtime\RubyOps.FlowControl.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\RuntimeErrorSink.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\StackUnwinder.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\Key.cs&quot; /&gt;
@@ -377,8 +379,9 @@
     &lt;Compile Include=&quot;RubyCompatibility.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\IOWrapper.cs&quot; /&gt;
     &lt;None Include=&quot;Compiler\Parser\Parser.y&quot; /&gt;
+    &lt;None Include=&quot;Migrated rules for Ruby.ruleset&quot; /&gt;
     &lt;None Include=&quot;Runtime\Calls\MethodDispatcher.Generator.rb&quot; /&gt;
-    &lt;None Include=&quot;Runtime\Converter.Generator.rb&quot; /&gt;
+    &lt;None Include=&quot;Runtime\Conversions\Converter.Generator.rb&quot; /&gt;
   &lt;/ItemGroup&gt;
   &lt;Import Project=&quot;$(MSBuildBinPath)\Microsoft.CSharp.targets&quot; Condition=&quot; $(SilverlightTreeBuild) != 'true' &quot; /&gt;
   &lt;Target Name=&quot;BeforeBuild&quot;&gt;</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Ruby.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -307,6 +307,23 @@ namespace IronRuby.Runtime {
         }
     }
 
+    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = true)]
+    public sealed class AliasMethodAttribute : Attribute {
+        private readonly string/*!*/ _oldName, _newName;
+        private bool _isStatic;
+
+        public string/*!*/ NewName { get { return _newName; } }
+        public string/*!*/ OldName { get { return _oldName; } }
+        public bool IsStatic { get { return _isStatic; } set { _isStatic = value; } }
+
+        public AliasMethodAttribute(string/*!*/ newName, string/*!*/ oldName) {
+            ContractUtils.RequiresNotNull(newName, &quot;newName&quot;);
+            ContractUtils.RequiresNotNull(oldName, &quot;oldName&quot;);
+            _newName = newName;
+            _oldName = oldName;
+        }
+    }
+
     [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
     public sealed class RubyStackTraceHiddenAttribute : Attribute {
     }</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Attributes.cs</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,21 @@
-&#65279;using System;
-using System.Collections.Generic;
-using System.Text;
+&#65279;/* ****************************************************************************
+ *
+ * Copyright (c) Microsoft Corporation. 
+ *
+ * This source code is subject to terms and conditions of the Microsoft Public License. A 
+ * copy of the license can be found in the License.html file at the root of this distribution. If 
+ * you cannot locate the  Microsoft Public License, please send an email to 
+ * ironruby@microsoft.com. By using this source code in any fashion, you are agreeing to be bound 
+ * by the terms of the Microsoft Public License.
+ *
+ * You must not remove this notice, or any other, from this software.
+ *
+ *
+ * ***************************************************************************/
+
+using System.IO;
 using Microsoft.Scripting;
 using Microsoft.Scripting.Utils;
-using System.IO;
 
 namespace IronRuby.Runtime {
     internal sealed class BinaryContentProvider : StreamContentProvider {</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/BinaryContentProvider.cs</filename>
    </modified>
    <modified>
      <diff>@@ -14,25 +14,12 @@
  * ***************************************************************************/
 
 using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq.Expressions;
-using System.Reflection;
-using System.Runtime.Serialization;
-using System.Text;
-using System.Threading;
-using Microsoft.Scripting;
-using Microsoft.Scripting.Actions;
-using Microsoft.Scripting.Runtime;
-using Microsoft.Scripting.Utils;
-using IronRuby.Builtins;
-using IronRuby.Compiler;
-using IronRuby.Runtime.Calls;
-using System.Dynamic;
-using Microsoft.Scripting.Math;
 using System.Runtime.CompilerServices;
-using Microsoft.Scripting.Generation;
 using IronRuby.Compiler.Generation;
+using IronRuby.Runtime.Calls;
+using IronRuby.Runtime.Conversions;
+using Microsoft.Scripting;
+using Microsoft.Scripting.Utils;
 
 namespace IronRuby.Runtime {
 
@@ -98,5 +85,10 @@ namespace IronRuby.Runtime {
         public CallSite&lt;Func&lt;CallSite, object, TResult&gt;&gt;/*!*/ GetSite(RubyConversionAction/*!*/ conversion) {
             return RubyUtils.GetCallSite(ref Site, conversion);
         }
+
+        internal CallSite&lt;Func&lt;CallSite, object, TResult&gt;&gt;/*!*/ GetDefaultConversionSite() {
+            return RubyUtils.GetCallSite(ref Site, ProtocolConversionAction.GetConversionAction(Context, typeof(TResult), true));
+
+        }
     }
 }</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/CallSiteStorages.cs</filename>
    </modified>
    <modified>
      <diff>@@ -596,6 +596,16 @@ namespace IronRuby.Runtime.Calls {
                 );
             }
 
+            public static DynamicMetaObject/*!*/ Bind(DynamicMetaObject/*!*/ context, ConvertBinder/*!*/ binder,
+                DynamicMetaObject/*!*/ target, Func&lt;DynamicMetaObject, DynamicMetaObject, DynamicMetaObject&gt;/*!*/ fallback) {
+
+                // TODO:
+                return null;
+                //return InvokeMember.Bind(context, RubyUtils.MapOperator(binder.Operation), _CallInfo, binder, target, new[] { arg },
+                //    (trgt, args) =&gt; fallback(trgt, args[0])
+                //);
+            }
+
             public override string/*!*/ ToString() {
                 return String.Format(&quot;Interop.Convert({0}, {1}){2}&quot;, 
                     Type.Name, </diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/InteropBinder.cs</filename>
    </modified>
    <modified>
      <diff>@@ -21,6 +21,7 @@ using Microsoft.Scripting.Actions.Calls;
 using Microsoft.Scripting.Utils;
 using System.Threading;
 using System.Diagnostics;
+using IronRuby.Runtime.Conversions;
 
 namespace IronRuby.Runtime.Calls {
     public sealed class RubyBinder : DefaultBinder {
@@ -46,7 +47,7 @@ namespace IronRuby.Runtime.Calls {
         }
 
         public override bool CanConvertFrom(Type/*!*/ fromType, Type/*!*/ toType, bool toNotNullable, NarrowingLevel level) {
-            return Converter.CanConvertFrom(fromType, toType, level, true);
+            return Converter.CanConvertFrom(null, fromType, toType, toNotNullable, level, false, false);
         }
 
         public override Candidate PreferConvert(Type t1, Type t2) {</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyBinder.cs</filename>
    </modified>
    <modified>
      <diff>@@ -22,6 +22,7 @@ using Microsoft.Scripting.Utils;
 using IronRuby.Builtins;
 using IronRuby.Compiler;
 using AstUtils = Microsoft.Scripting.Ast.Utils;
+using IronRuby.Runtime.Conversions;
 
 namespace IronRuby.Runtime.Calls {
     using Ast = System.Linq.Expressions.Expression;</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyFieldInfo.cs</filename>
    </modified>
    <modified>
      <diff>@@ -4,6 +4,7 @@ using System.Text;
 using Microsoft.Scripting.Utils;
 using System.Threading;
 using System.Dynamic;
+using IronRuby.Runtime.Conversions;
 
 namespace IronRuby.Runtime.Calls {
     internal sealed class RubyMetaBinderFactory {</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMetaBinderFactory.cs</filename>
    </modified>
    <modified>
      <diff>@@ -29,7 +29,7 @@ using AstUtils = Microsoft.Scripting.Ast.Utils;
 namespace IronRuby.Runtime.Calls {
     using Ast = System.Linq.Expressions.Expression;
 
-    interface IRubyDynamicMetaObjectProvider : IDynamicMetaObjectProvider {
+    public interface IRubyDynamicMetaObjectProvider : IDynamicMetaObjectProvider {
     }
 
     public abstract class RubyMetaObject : DynamicMetaObject {
@@ -72,6 +72,11 @@ namespace IronRuby.Runtime.Calls {
         public override DynamicMetaObject/*!*/ BindBinaryOperation(BinaryOperationBinder/*!*/ binder, DynamicMetaObject/*!*/ arg) {
             return InteropBinder.BinaryOperation.Bind(CreateMetaContext(), binder, this, arg, binder.FallbackBinaryOperation);
         }
+
+        // TODO:
+        //public override DynamicMetaObject/*!*/ BindConvert(ConvertBinder/*!*/ binder) {
+        //    return InteropBinder.Convert.Bind(CreateMetaContext(), binder, this, binder.FallbackConvert);
+        //}
     }
     
     public abstract class RubyMetaObject&lt;T&gt; : RubyMetaObject {</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMetaObject.cs</filename>
    </modified>
    <modified>
      <diff>@@ -23,6 +23,7 @@ using System.Reflection;
 using System.Text;
 using IronRuby.Builtins;
 using IronRuby.Compiler;
+using IronRuby.Runtime.Conversions;
 using Microsoft.Scripting.Actions.Calls;
 using Microsoft.Scripting.Generation;
 using Microsoft.Scripting.Runtime;
@@ -38,14 +39,11 @@ namespace IronRuby.Runtime.Calls {
 
         //
         // We want to perform Ruby protocol conversions when binding to CLR methods. 
-        // However, Ruby some libraries don't allow protocol conversions on their parameters. 
+        // However, some Ruby libraries don't allow protocol conversions on their parameters. 
         // Hence in libraries protocol conversions should only be performed when DefaultProtocol attribute is present.
         // This flag is set if protocol conversions should be applied on all parameters regardless of DefaultProtocol attribute.
-        //
-        // Note that using DefaultProtocol explicitly is not the same as performing implicit protocol conversions. 
-        // A parameter marked with DP is treated as accepting any type of object for overload resolution purposes. 
-        // On the other hand, implicit protocol conversions are only applied on narrowing level 2. Hence the overload resolution
-        // uses the real parameter types in first 2 steps and only then falls back to dynamic conversions.
+        // This also implies a different narrowing level of the protocol conversions for library methods and other CLR methods 
+        // (see Converter.CanConvertFrom).
         //
         private readonly bool _implicitProtocolConversions;
 
@@ -416,85 +414,70 @@ namespace IronRuby.Runtime.Calls {
 
         #region Step 4: Argument Building, Conversions
 
-        public override bool CanConvertFrom(Type/*!*/ fromType, ParameterWrapper/*!*/ toParameter, NarrowingLevel level) {
-            Type toType = toParameter.Type;
-
-            if (toType == fromType) {
-                return true;
-            }
-
-            if (fromType == typeof(DynamicNull)) {
-                if (toParameter.ProhibitNull) {
-                    return false;
-                }
-
-                if (toType.IsGenericType &amp;&amp; toType.GetGenericTypeDefinition() == typeof(Nullable&lt;&gt;)) {
-                    return true;
-                }
-
-                if (!toType.IsValueType) {
-                    return true;
-                }
-            }
-
-            // blocks:
-            if (fromType == typeof(MissingBlockParam)) {
-                return toType == typeof(BlockParam) &amp;&amp; !toParameter.ProhibitNull;
-            }
-
-            if (fromType == typeof(BlockParam) &amp;&amp; toType == typeof(MissingBlockParam)) {
-                return true;
-            }
-
-            // protocol conversions:
-            if (toParameter.ParameterInfo != null &amp;&amp; toParameter.ParameterInfo.IsDefined(typeof(DefaultProtocolAttribute), false) &amp;&amp;
-                // default protocol doesn't apply on param-array/dict itself, only on the expanded parameters:
-                !toParameter.IsParamsArray) {
-
-                // any type is potentially convertible, except for nil if [NotNull] is used or the target type is a value type:
-                return fromType != typeof(DynamicNull) || !(toParameter.ProhibitNull || toType.IsValueType);
-            }
+        /// &lt;summary&gt;
+        /// Returns true if fromArg of type fromType can be assigned to toParameter with a conversion on given narrowing level.
+        /// &lt;/summary&gt;
+        public override bool CanConvertFrom(Type/*!*/ fromType, DynamicMetaObject fromArg, ParameterWrapper/*!*/ toParameter, NarrowingLevel level) {
+            return Converter.CanConvertFrom(fromArg, fromType, toParameter.Type, toParameter.ProhibitNull, level, 
+                HasExplicitProtocolConversion(toParameter), _implicitProtocolConversions
+            );
+        }
 
-            if (Converter.CanConvertFrom(fromType, toType, level, _implicitProtocolConversions)) {
-                return true;
-            }
+        public override bool CanConvertFrom(ParameterWrapper/*!*/ fromParameter, ParameterWrapper/*!*/ toParameter) {
+            return Converter.CanConvertFrom(null, fromParameter.Type, toParameter.Type, toParameter.ProhibitNull, NarrowingLevel.None, false, false);
+        }
 
-            return false;
+        private bool HasExplicitProtocolConversion(ParameterWrapper/*!*/ parameter) {
+            return
+                parameter.ParameterInfo != null &amp;&amp;
+                parameter.ParameterInfo.IsDefined(typeof(DefaultProtocolAttribute), false) &amp;&amp;
+                !parameter.IsParamsArray; // default protocol doesn't apply on param-array/dict itself, only on the expanded parameters
         }
 
-        public override Candidate SelectBestConversionFor(Type/*!*/ actualType, ParameterWrapper/*!*/ candidateOne, ParameterWrapper/*!*/ candidateTwo, NarrowingLevel level) {
+        public override Candidate SelectBestConversionFor(DynamicMetaObject/*!*/ arg, ParameterWrapper/*!*/ candidateOne, 
+            ParameterWrapper/*!*/ candidateTwo, NarrowingLevel level) {
+
             Type typeOne = candidateOne.Type;
             Type typeTwo = candidateTwo.Type;
+            Type actualType = arg.GetLimitType();
 
+            // if nil is passed as a block argument prefer BlockParam over missing block:
             if (actualType == typeof(DynamicNull)) {
-                // if nil is passed as a block argument prefer BlockParam over missing block;
                 if (typeOne == typeof(BlockParam) &amp;&amp; typeTwo == typeof(MissingBlockParam)) {
+                    Debug.Assert(!candidateOne.ProhibitNull);
                     return Candidate.One;
                 }
 
                 if (typeOne == typeof(MissingBlockParam) &amp;&amp; typeTwo == typeof(BlockParam)) {
+                    Debug.Assert(!candidateTwo.ProhibitNull);
                     return Candidate.Two;
                 }
-            } else {
-                if (actualType == typeOne &amp;&amp; candidateOne.ProhibitNull) {
+            } else if (actualType == typeof(MissingBlockParam)) {
+                if (typeOne == typeof(BlockParam) &amp;&amp; typeTwo == typeof(MissingBlockParam)) {
+                    return Candidate.Two;
+                }
+
+                if (typeOne == typeof(MissingBlockParam) &amp;&amp; typeTwo == typeof(BlockParam)) {
+                    return Candidate.One;
+                }
+            } else if (actualType == typeof(BlockParam)) {
+                if (typeOne == typeof(BlockParam) &amp;&amp; typeTwo == typeof(MissingBlockParam)) {
                     return Candidate.One;
                 }
 
-                if (actualType == typeTwo &amp;&amp; candidateTwo.ProhibitNull) {
+                if (typeOne == typeof(MissingBlockParam) &amp;&amp; typeTwo == typeof(BlockParam)) {
                     return Candidate.Two;
                 }
-            }
 
-            if (actualType == typeOne) {
-                return Candidate.One;
-            }
-
-            if (actualType == typeTwo) {
-                return Candidate.Two;
+                if (typeOne == typeof(BlockParam) &amp;&amp; typeTwo == typeof(BlockParam)) {
+                    if (candidateOne.ProhibitNull) {
+                        return Candidate.One;
+                    } else if (candidateTwo.ProhibitNull) {
+                        return Candidate.Two;
+                    }
+                }
             }
-
-
-            return Candidate.Equivalent;
+            return base.SelectBestConversionFor(arg, candidateOne, candidateTwo, level);
         }
 
         public override Expression/*!*/ Convert(DynamicMetaObject/*!*/ metaObject, Type restrictedType, ParameterInfo info, Type/*!*/ toType) {
@@ -519,7 +502,8 @@ namespace IronRuby.Runtime.Calls {
                     return Ast.Dynamic(action, toType, expr);
                 }
 
-                throw new InvalidOperationException(String.Format(&quot;No default protocol conversion for type {0}.&quot;, toType));
+                // Do not throw an exception here to allow generic type parameters to be used with D.P. attribute.
+                // The semantics should be to use DP if available for the current instantiation and ignore it otherwise.
             }
 
             if (restrictedType != null) {
@@ -538,7 +522,7 @@ namespace IronRuby.Runtime.Calls {
 
                 // if there is a simple conversion from restricted type, convert the expression to the restricted type and use that conversion:
                 Type visibleRestrictedType = CompilerHelpers.GetVisibleType(restrictedType);
-                if (Converter.CanConvertFrom(visibleRestrictedType, toType, NarrowingLevel.One, false)) {
+                if (Converter.CanConvertFrom(metaObject, visibleRestrictedType, toType, false, NarrowingLevel.None, false, false)) {
                     expr = AstUtils.Convert(expr, visibleRestrictedType);
                 }
             }
@@ -765,9 +749,18 @@ namespace IronRuby.Runtime.Calls {
                                     return Methods.CreateArgumentsErrorForMissingBlock.OpCall();
                                 }
 
+                                string toType;
+                                if (cr.To.IsGenericType &amp;&amp; cr.To.GetGenericTypeDefinition() == typeof(Union&lt;,&gt;)) {
+                                    var g = cr.To.GetGenericArguments();
+                                    toType = Binder.GetTypeName(g[0]) + &quot; or &quot; + Binder.GetTypeName(g[1]);
+                                } else {
+                                    toType = Binder.GetTypeName(cr.To);
+                                }
+
                                 return Methods.CreateTypeConversionError.OpCall(
-                                        AstUtils.Constant(cr.GetArgumentTypeName(Binder)),
-                                        AstUtils.Constant(Binder.GetTypeName(cr.To)));
+                                    AstUtils.Constant(cr.GetArgumentTypeName(Binder)),
+                                    AstUtils.Constant(toType)
+                                );
                             }
                         }
                         break;</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyOverloadResolver.cs</filename>
    </modified>
    <modified>
      <diff>@@ -28,6 +28,7 @@ using IronRuby.Runtime.Calls;
 using Microsoft.Scripting;
 using Microsoft.Scripting.Runtime;
 using Microsoft.Scripting.Utils;
+using IronRuby.Runtime.Conversions;
 
 namespace IronRuby.Runtime {
     [Flags]</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Loader.cs</filename>
    </modified>
    <modified>
      <diff>@@ -26,6 +26,7 @@ using Microsoft.Scripting.Generation;
 using IronRuby.Builtins;
 using IronRuby.Runtime.Calls;
 using IronRuby.Compiler;
+using IronRuby.Runtime.Conversions;
 
 namespace IronRuby.Runtime {
     /// &lt;summary&gt;</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Protocols.cs</filename>
    </modified>
    <modified>
      <diff>@@ -16,22 +16,22 @@
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
+using System.Dynamic;
 using System.IO;
 using System.Runtime.CompilerServices;
-using System.Dynamic;
 using System.Security;
 using System.Text;
 using System.Threading;
 using IronRuby.Builtins;
 using IronRuby.Compiler;
+using IronRuby.Compiler.Ast;
 using IronRuby.Compiler.Generation;
 using IronRuby.Runtime.Calls;
+using IronRuby.Runtime.Conversions;
 using Microsoft.Scripting;
 using Microsoft.Scripting.Actions;
-using Microsoft.Scripting.Generation;
 using Microsoft.Scripting.Runtime;
 using Microsoft.Scripting.Utils;
-using IronRuby.Compiler.Ast;
 using MSA = System.Linq.Expressions;
 
 namespace IronRuby.Runtime {
@@ -718,7 +718,16 @@ namespace IronRuby.Runtime {
             }
 
             TypeTracker tracker = (TypeTracker)TypeTracker.FromMemberInfo(interfaceType);
-            result = CreateModule(GetQualifiedNameNoLock(interfaceType), null, null, null, null, null, tracker, ModuleRestrictions.None);
+
+            RubyModule[] mixins;
+            if (interfaceType.IsGenericType &amp;&amp; !interfaceType.IsGenericTypeDefinition) {
+                // I&lt;T0..Tn&gt; mixes in its generic definition I&lt;,..,&gt;
+                mixins = new[] { GetOrCreateModuleNoLock(interfaceType.GetGenericTypeDefinition()) };
+            } else {
+                mixins = null;
+            }
+
+            result = CreateModule(GetQualifiedNameNoLock(interfaceType), null, null, null, mixins, null, tracker, ModuleRestrictions.None);
             _moduleCache[interfaceType] = result;
             return result;
         }
@@ -731,7 +740,15 @@ namespace IronRuby.Runtime {
                 return result;
             }
 
-            RubyClass baseClass = GetOrCreateClassNoLock(type.BaseType);
+            RubyClass baseClass;
+
+            if (type.IsGenericType &amp;&amp; !type.IsGenericTypeDefinition) {
+                // C&lt;T0..Tn&gt;'s super class is its generic definition C&lt;,..,&gt;
+                baseClass = GetOrCreateClassNoLock(type.GetGenericTypeDefinition());
+            } else {
+                baseClass = GetOrCreateClassNoLock(type.BaseType);
+            }
+
             TypeTracker tracker = (TypeTracker)TypeTracker.FromMemberInfo(type);
             RubyModule[] interfaceMixins = GetDeclaredInterfaceModulesNoLock(type);
             RubyModule[] expandedMixins;</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs</filename>
    </modified>
    <modified>
      <diff>@@ -34,6 +34,7 @@ using Microsoft.Scripting.Runtime;
 using Microsoft.Scripting.Utils;
 using IronRuby.Compiler.Ast;
 using MSA = System.Linq.Expressions;
+using IronRuby.Runtime.Conversions;
 
 namespace IronRuby.Runtime {
     [ReflectionCached, CLSCompliant(false)]
@@ -849,70 +850,70 @@ namespace IronRuby.Runtime {
         #region CLR Vectors (factories mimic Ruby Array factories)
 
         [Emitted, RubyConstructor]
-        public static object/*!*/ CreateVector(ConversionStorage&lt;Union&lt;IList, int&gt;&gt;/*!*/ toAryToInt, BlockParam block, RubyClass/*!*/ self,
-            [NotNull]object/*!*/ arrayOrSize) {
+        public static object/*!*/ CreateVector&lt;TElement&gt;(
+            ConversionStorage&lt;TElement&gt;/*!*/ elementConversion, 
+            ConversionStorage&lt;Union&lt;IList, int&gt;&gt;/*!*/ toAryToInt, 
+            BlockParam block, RubyClass/*!*/ self, [NotNull]object/*!*/ arrayOrSize) {
 
-            var elementType = self.GetUnderlyingSystemType().GetElementType();
-            Debug.Assert(elementType != null);
+            Debug.Assert(typeof(TElement) == self.GetUnderlyingSystemType().GetElementType());
 
             var site = toAryToInt.GetSite(CompositeConversionAction.Make(self.Context, CompositeConversion.ToAryToInt));
             var union = site.Target(site, arrayOrSize);
 
             if (union.First != null) {
                 // block ignored
-                return CreateVectorInternal(self.Context, elementType, union.First);
+                return CreateVectorInternal(elementConversion, union.First);
             } else if (block != null) {
-                return PopulateVector(self.Context, CreateVectorInternal(elementType, union.Second), block);
+                return PopulateVector(elementConversion, CreateVectorInternal&lt;TElement&gt;(union.Second), block);
             } else {
-                return CreateVectorInternal(elementType, union.Second);
+                return CreateVectorInternal&lt;TElement&gt;(union.Second);
             }
         }
 
         [Emitted, RubyConstructor]
-        public static Array/*!*/ CreateVectorWithValues(RubyClass/*!*/ self, [DefaultProtocol]int size, object value) {
-            var elementType = self.GetUnderlyingSystemType().GetElementType();
-            Debug.Assert(elementType != null);
+        public static Array/*!*/ CreateVectorWithValues&lt;TElement&gt;(ConversionStorage&lt;TElement&gt;/*!*/ elementConversion,
+            RubyClass/*!*/ self, [DefaultProtocol]int size, [DefaultProtocol]TElement value) {
+            Debug.Assert(typeof(TElement) == self.GetUnderlyingSystemType().GetElementType());
 
-            var result = CreateVectorInternal(elementType, size);
-            for (int i = 0; i &lt; size; i++) {
-                SetVectorItem(self.Context, result, i, value);
+            TElement[] result = CreateVectorInternal&lt;TElement&gt;(size);
+            for (int i = 0; i &lt; result.Length; i++) {
+                result[i] = value;
             }
             return result;
         }
 
-        public static Array/*!*/ CreateVectorInternal(Type/*!*/ elementType, int size) {
+        private static TElement[]/*!*/ CreateVectorInternal&lt;TElement&gt;(int size) {
             if (size &lt; 0) {
                 throw RubyExceptions.CreateArgumentError(&quot;negative array size&quot;);
             }
 
-            return Array.CreateInstance(elementType, size);
+            return new TElement[size];
         }
 
-        private static Array/*!*/ CreateVectorInternal(RubyContext/*!*/ context, Type/*!*/ elementType, IList/*!*/ list) {
-            var result = Array.CreateInstance(elementType, list.Count);
+        private static Array/*!*/ CreateVectorInternal&lt;TElement&gt;(ConversionStorage&lt;TElement&gt;/*!*/ elementConversion, IList/*!*/ list) {
+            var site = elementConversion.GetDefaultConversionSite();
+
+            var result = new TElement[list.Count];
             for (int i = 0; i &lt; result.Length; i++) {
-                SetVectorItem(context, result, i, list[i]);
+                result[i] = site.Target(site, list[i]);
             }
 
             return result;
         }
 
-        private static object PopulateVector(RubyContext/*!*/ context, Array/*!*/ array, BlockParam/*!*/ block) {
+        private static object PopulateVector&lt;TElement&gt;(ConversionStorage&lt;TElement&gt;/*!*/ elementConversion, TElement[]/*!*/ array, BlockParam/*!*/ block) {
+            var site = elementConversion.GetDefaultConversionSite();
+
             for (int i = 0; i &lt; array.Length; i++) {
                 object item;
                 if (block.Yield(i, out item)) {
                     return item;
                 }
-                SetVectorItem(context, array, i, item);
+                array[i] = site.Target(site, item);
             }
             return array;
         }
 
-        private static void SetVectorItem(RubyContext/*!*/ context, Array/*!*/ array, int index, object value) {
-            // TODO: convert to the element type:
-            array.SetValue(value, index);
-        }
-
         #endregion
 
         #region Global Variables</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs</filename>
    </modified>
    <modified>
      <diff>@@ -30,6 +30,7 @@ using Microsoft.Scripting;
 using Microsoft.Scripting.Math;
 using Microsoft.Scripting.Runtime;
 using Microsoft.Scripting.Utils;
+using IronRuby.Runtime.Conversions;
 
 namespace IronRuby.Runtime {
     using EvalEntryPointDelegate = Func&lt;RubyScope, object, RubyModule, Proc, object&gt;;</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyUtils.cs</filename>
    </modified>
    <modified>
      <diff>@@ -42,10 +42,29 @@ if exist &quot;%PROGRAM_FILES_32%\Microsoft.NET\SDK\v2.0\Bin\sdkvars.bat&quot; (
 
 set PATH=%PATH%;%MERLIN_ROOT%\Languages\Ruby\Scripts;%MERLIN_ROOT%\Languages\Ruby\Scripts\bin;%RUBY18_BIN%;%MERLIN_ROOT%\..\External.LCA_RESTRICTED\Languages\IronRuby\mspec\mspec\bin
 
+if not DEFINED HOME_FOR_MSPECRC (
+  if DEFINED HOME (
+      set HOME_FOR_MSPECRC=%HOME%
+      goto SetRubyEnv
+  )
+  
+  if DEFINED HOMEDRIVE (
+    if DEFINED HOMEPATH (
+      set HOME_FOR_MSPECRC=%HOMEDRIVE%%HOMEPATH%
+      goto SetRubyEnv
+    )
+  )
+  if not DEFINED USERPROFILE (
+    echo Error: One of HOME, HOMEDRIVE,HOMEPATH, or USERPROFILE needs to be set
+    goto END
+  )
+  set HOME_FOR_MSPECRC=%USERPROFILE%
+)
+
 :SetRubyEnv
 
-if NOT exist &quot;%HOME%\.mspecrc&quot; (
-  copy &quot;%MERLIN_ROOT%\Languages\Ruby\default.mspec&quot; &quot;%HOME%\.mspecrc&quot;
+if NOT EXIST &quot;%HOME_FOR_MSPECRC%\.mspecrc&quot; (
+  copy &quot;%MERLIN_ROOT%\Languages\Ruby\default.mspec&quot; &quot;%HOME_FOR_MSPECRC%\.mspecrc&quot;
 )
 
 call doskey /macrofile=%MERLIN_ROOT%\Scripts\Bat\%Alias.txt</diff>
      <filename>Merlin/Main/Languages/Ruby/Scripts/Dev.bat</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/A/a.generated.dll</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/B/b.generated.dll</filename>
    </modified>
    <modified>
      <diff>@@ -6,6 +6,6 @@ describe &quot;Modifying .NET arrays&quot; do
   end
 
   it &quot;doesn't dynamicly resize&quot; do
-    lambda {@array[10] = 1}.should raise_error(System::NotSupportedException)
+    lambda {@array[10] = 1}.should raise_error(IndexError)
   end
 end</diff>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/bcl/array/modification_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -23,6 +23,7 @@ describe &quot;System::String.new&quot; do
     System::String.new(System::Char.new(&quot;a&quot;)).should == Klass.new.a
     System::String.new(System::Char.new(&quot;a&quot;), 2).should == Klass.new.Aa
     System::String.new(System::Array.of(System::Char).new(2, System::Char.new(&quot;a&quot;))).should == Klass.new.Aa
+    System::String.new(System::Array.of(System::Char).new(1),0,0).should == System::String.empty
   end
 end
 </diff>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/bcl/string/construction_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -26,4 +26,28 @@ describe &quot;Inheriting from classes with&quot; do
 
 
   end
+
+  describe &quot;method attributes that are abstract&quot; do
+    #TODO: the marshal attribute shouldn't be needed. this was due to a super
+    #bug not a marshal bug.
+    csc &lt;&lt;-EOL
+      public abstract class Unsafe {
+        [return: MarshalAs(UnmanagedType.U1)]
+        public virtual bool Foo() { return true;}
+      }
+    EOL
+
+    before(:all) do
+      class SubUnsafe &lt; Unsafe
+      end
+    end
+
+    it &quot;can call super&quot; do
+      lambda {class SubUnsafe &lt; Unsafe
+        def foo
+          super
+        end
+      end}.should_not raise_error
+    end
+  end
 end</diff>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/class/derivation/attribute_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -123,6 +123,11 @@ public class ClassWithOptionalConstructor {
         Arg = arg;
       }
     }
+#line 31 &quot;./class/derivation/attribute_spec.rb&quot;
+public abstract class Unsafe {
+        [return: MarshalAs(UnmanagedType.U1)]
+        public virtual bool Foo() { return true;}
+      }
 #line 14 &quot;./class/instantiation/abstract_spec.rb&quot;
 public partial class DerivedFromAbstract : AbstractClass {
     public override int m() {return 1;}
@@ -746,6 +751,10 @@ public partial class ClassWithIndexer {
         set { Values[i,j] = value; } 
       }
     }
+#line 5 &quot;./method/invocation/internal_spec.rb&quot;
+internal partial class PartialClassWithMethods {
+    internal int Foo(){ return 1; }
+  }
 #line 4 &quot;./method/invocation/overload_spec.rb&quot;
 public partial class ClassWithOverloads {
     public string PublicProtectedOverload(){
@@ -821,8 +830,16 @@ public class PublicNameHolder {
       public string Mixed_Snake_case() {return &quot;Mixed_Snake_case&quot;;}
       public string CAPITAL() { return &quot;CAPITAL&quot;;}
       public string PartialCapitalID() { return &quot;PartialCapitalID&quot;;}
+      public string PartialCapitalId() { return &quot;PartialCapitalId&quot;;}
       public string __LeadingCamelCase() { return &quot;__LeadingCamelCase&quot;;}
       public string __leading_snake_case() { return &quot;__leading_snake_case&quot;;}
+      public string foNBar() { return &quot;foNBar&quot;; }
+      public string fNNBar() { return &quot;fNNBar&quot;; }
+      public string NNNBar() { return &quot;NNNBar&quot;; }
+      public string MyUIApp() { return &quot;MyUIApp&quot;; }
+      public string MyIdYA() { return &quot;MyIdYA&quot;; }
+      public string NaN() { return &quot;NaN&quot;; }
+      public string NaNa() { return &quot;NaNa&quot;; }
     }
 
     public class SubPublicNameHolder : PublicNameHolder {</diff>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/fixtures.generated.cs</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/fixtures.generated.dll</filename>
    </modified>
    <modified>
      <diff>@@ -11,19 +11,29 @@ describe &quot;Name mangling on public types&quot; do
       public string Mixed_Snake_case() {return &quot;Mixed_Snake_case&quot;;}
       public string CAPITAL() { return &quot;CAPITAL&quot;;}
       public string PartialCapitalID() { return &quot;PartialCapitalID&quot;;}
+      public string PartialCapitalId() { return &quot;PartialCapitalId&quot;;}
       public string __LeadingCamelCase() { return &quot;__LeadingCamelCase&quot;;}
       public string __leading_snake_case() { return &quot;__leading_snake_case&quot;;}
+      public string foNBar() { return &quot;foNBar&quot;; }
+      public string fNNBar() { return &quot;fNNBar&quot;; }
+      public string NNNBar() { return &quot;NNNBar&quot;; }
+      public string MyUIApp() { return &quot;MyUIApp&quot;; }
+      public string MyIdYA() { return &quot;MyIdYA&quot;; }
+      public string NaN() { return &quot;NaN&quot;; }
+      public string NaNa() { return &quot;NaNa&quot;; }
     }
 
     public class SubPublicNameHolder : PublicNameHolder {
     }
   EOL
 
+  @methods = %w{Unique snake_case CamelCase PartialCapitalId __LeadingCamelCase __leading_snake_case fNNBar MyUIApp MyIdYA NaNa Mixed_Snake_case}
   before(:each) do
     @objs = [PublicNameHolder.new, SubPublicNameHolder.new, Class.new(PublicNameHolder).new, Class.new(SubPublicNameHolder).new]
     @a_methods = %w{a A}
-    @methods = %w{Unique snake_case CamelCase Mixed_Snake_case CAPITAL PartialCapitalID __LeadingCamelCase __leading_snake_case}
-    @all_methods = @methods + @a_methods
+    @methods &lt;&lt; &quot;foNBar&quot; 
+    @non_mangle_methods = %w{NNNBar NaN CAPITAL PartialCapitalID }
+    @all_methods = @methods + @a_methods + @non_mangle_methods
   end
   
   it &quot;works with correct .NET names&quot; do
@@ -34,8 +44,8 @@ describe &quot;Name mangling on public types&quot; do
     end
   end
 
-  it &quot;works with mangled name if not conflicting&quot; do
-    @methods.each do |meth|
+  @methods.each do |meth|
+    it &quot;works with mangled name (#{meth}) if not conflicting&quot; do
       @objs.each do |obj|
         obj.send(meth.to_snake_case).should equal_clr_string(meth)
       end</diff>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/ruby/name_mangling/public_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1,4 @@
-fails:Name mangling on public types works with mangled name if not conflicting
+fails:Name mangling on public types works with mangled name (__LeadingCamelCase) if not conflicting
+fails:Name mangling on public types works with mangled name (fNNBar) if not conflicting
+fails:Name mangling on public types works with mangled name (NaNa) if not conflicting
+fails:Name mangling on public types works with mangled name (Mixed_Snake_case) if not conflicting</diff>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/tags/net/ruby/name_mangling/public_tags.txt</filename>
    </modified>
    <modified>
      <diff>@@ -1,16 +1,16 @@
 &#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;Project ToolsVersion=&quot;3.5&quot; DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot;&gt;
+&lt;Project ToolsVersion=&quot;4.0&quot; DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.30729&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{534A82C6-3EB0-4888-ABD2-A15284683E8D}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Exe&lt;/OutputType&gt;
     &lt;AppDesignerFolder&gt;Properties&lt;/AppDesignerFolder&gt;
     &lt;RootNamespace&gt;RubySpec&lt;/RootNamespace&gt;
     &lt;AssemblyName&gt;RubySpec&lt;/AssemblyName&gt;
-    &lt;TargetFrameworkVersion&gt;v3.5&lt;/TargetFrameworkVersion&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
     &lt;FileAlignment&gt;512&lt;/FileAlignment&gt;
     &lt;SccProjectName&gt;SAK&lt;/SccProjectName&gt;
     &lt;SccLocalPath&gt;SAK&lt;/SccLocalPath&gt;</diff>
      <filename>Merlin/Main/Languages/Ruby/Tests/RubySpec/RubySpec.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -363,7 +363,7 @@ namespace Microsoft.Scripting.Actions.Calls {
                     return MakeSuccessfulBindingTarget(applicable[0], potential, level, targetSet);
                 }
 
-                var bestCandidate = SelectBestCandidate(applicable);
+                var bestCandidate = SelectBestCandidate(applicable, level);
                 if (bestCandidate != null) {
                     return MakeSuccessfulBindingTarget(bestCandidate, potential, level, targetSet);
                 } else {
@@ -472,7 +472,7 @@ namespace Microsoft.Scripting.Actions.Calls {
 
             bool success = true;
             for (int i = 0; i &lt; _actualArguments.Count; i++) {
-                success &amp;= (hasConversion[i] = CanConvertFrom(_actualArguments[i].GetLimitType(), candidate.GetParameter(i, namesBinding), narrowingLevel));
+                success &amp;= (hasConversion[i] = CanConvertFrom(_actualArguments[i].GetLimitType(), _actualArguments[i], candidate.GetParameter(i, namesBinding), narrowingLevel));
             }
 
             if (!success) {
@@ -499,7 +499,7 @@ namespace Microsoft.Scripting.Actions.Calls {
                 object value = GetCollapsedArgumentValue(i);
                 Type argType = CompilerHelpers.GetType(value);
 
-                if (!CanConvertFrom(argType, parameter, narrowingLevel)) {
+                if (!CanConvertFrom(argType, null, parameter, narrowingLevel)) {
                     failure = new CallFailure(candidate, new[] { new ConversionResult(value, argType, parameter.Type, false) });
                     return false;
                 }
@@ -598,21 +598,21 @@ namespace Microsoft.Scripting.Actions.Calls {
             return false;
         }
 
-        private bool IsBest(ApplicableCandidate candidate, List&lt;ApplicableCandidate&gt; candidates) {
+        private bool IsBest(ApplicableCandidate candidate, List&lt;ApplicableCandidate&gt; candidates, NarrowingLevel level) {
             foreach (ApplicableCandidate other in candidates) {
                 if (candidate == other) {
                     continue;
                 }
 
-                if (GetPreferredCandidate(candidate, other) != Candidate.One) {
+                if (GetPreferredCandidate(candidate, other, level) != Candidate.One) {
                     return false;
                 }
             }
             return true;
         }
 
-        internal Candidate GetPreferredCandidate(ApplicableCandidate one, ApplicableCandidate two) {
-            Candidate cmpParams = GetPreferredParameters(one, two);
+        internal Candidate GetPreferredCandidate(ApplicableCandidate one, ApplicableCandidate two, NarrowingLevel level) {
+            Candidate cmpParams = GetPreferredParameters(one, two, level);
             if (cmpParams.Chosen()) {
                 return cmpParams;
             }
@@ -692,13 +692,13 @@ namespace Microsoft.Scripting.Actions.Calls {
             return max;
         }
 
-        internal Candidate GetPreferredParameters(ApplicableCandidate one, ApplicableCandidate two) {
+        private Candidate GetPreferredParameters(ApplicableCandidate one, ApplicableCandidate two, NarrowingLevel level) {
             Debug.Assert(one.Method.ParameterCount == two.Method.ParameterCount);
             var args = GetActualArguments();
 
             Candidate result = Candidate.Equivalent;
             for (int i = 0; i &lt; args.Count; i++) {
-                Candidate preferred = GetPreferredParameter(one.GetParameter(i), two.GetParameter(i), args[i].GetLimitType());
+                Candidate preferred = GetPreferredParameter(one.GetParameter(i), two.GetParameter(i), args[i], level);
 
                 switch (result) {
                     case Candidate.Equivalent:
@@ -729,46 +729,32 @@ namespace Microsoft.Scripting.Actions.Calls {
             return result;
         }
 
-        internal Candidate GetPreferredParameter(ParameterWrapper candidateOne, ParameterWrapper candidateTwo, Type argType) {
-            Assert.NotNull(candidateOne, candidateTwo, argType);
-
-            if (ParametersEquivalent(candidateOne, candidateTwo)) {
-                return Candidate.Equivalent;
-            }
-
-            for (NarrowingLevel curLevel = NarrowingLevel.None; curLevel &lt;= NarrowingLevel.All; curLevel++) {
-                Candidate candidate = SelectBestConversionFor(argType, candidateOne, candidateTwo, curLevel);
-                if (candidate.Chosen()) {
-                    return candidate;
-                }
-            }
-
-            return GetPreferredParameter(candidateOne, candidateTwo);
-        }
-
-        internal Candidate GetPreferredParameter(ParameterWrapper candidateOne, ParameterWrapper candidateTwo) {
+        private Candidate GetPreferredParameter(ParameterWrapper candidateOne, ParameterWrapper candidateTwo, DynamicMetaObject arg, NarrowingLevel level) {
             Assert.NotNull(candidateOne, candidateTwo);
 
             if (ParametersEquivalent(candidateOne, candidateTwo)) {
                 return Candidate.Equivalent;
             }
 
-            Type t1 = candidateOne.Type;
-            Type t2 = candidateTwo.Type;
+            Candidate candidate = SelectBestConversionFor(arg, candidateOne, candidateTwo, level);
+            if (candidate.Chosen()) {
+                return candidate;
+            }
 
-            if (CanConvertFrom(t2, candidateOne, NarrowingLevel.None)) {
-                if (CanConvertFrom(t1, candidateTwo, NarrowingLevel.None)) {
+            if (CanConvertFrom(candidateTwo, candidateOne)) {
+                if (CanConvertFrom(candidateOne, candidateTwo)) {
                     return Candidate.Ambiguous;
                 } else {
                     return Candidate.Two;
                 }
-            }
-
-            if (CanConvertFrom(t1, candidateTwo, NarrowingLevel.None)) {
+            } else if (CanConvertFrom(candidateOne, candidateTwo)) {
                 return Candidate.One;
             }
 
             // Special additional rules to order numeric value types
+            Type t1 = candidateOne.Type;
+            Type t2 = candidateTwo.Type;
+
             Candidate preferred = PreferConvert(t1, t2);
             if (preferred.Chosen()) {
                 return preferred;
@@ -779,12 +765,38 @@ namespace Microsoft.Scripting.Actions.Calls {
                 return preferred;
             }
 
-            return Candidate.Ambiguous;
+            // consider the actual argument type:
+            Type argType = arg.GetLimitType();
+            NarrowingLevel levelOne = NarrowingLevel.None;
+            while (levelOne &lt; level &amp;&amp; !CanConvertFrom(argType, arg, candidateOne, levelOne)) {
+                if (levelOne == NarrowingLevel.All) {
+                    Debug.Assert(false, &quot;Each argument should be convertible to the corresponding parameter&quot;);
+                    break;
+                }
+                levelOne++;
+            }
+
+            NarrowingLevel levelTwo = NarrowingLevel.None;
+            while (levelTwo &lt; level &amp;&amp; !CanConvertFrom(argType, arg, candidateTwo, levelTwo)) {
+                if (levelTwo == NarrowingLevel.All) {
+                    Debug.Assert(false, &quot;Each argument should be convertible to the corresponding parameter&quot;);
+                    break;
+                }
+                levelTwo++;
+            }
+
+            if (levelOne &lt; levelTwo) {
+                return Candidate.One;
+            } else if (levelOne &gt; levelTwo) {
+                return Candidate.Two;
+            } else {
+                return Candidate.Ambiguous;
+            }
         }
 
-        private ApplicableCandidate SelectBestCandidate(List&lt;ApplicableCandidate&gt; candidates) {
+        private ApplicableCandidate SelectBestCandidate(List&lt;ApplicableCandidate&gt; candidates, NarrowingLevel level) {
             foreach (var candidate in candidates) {
-                if (IsBest(candidate, candidates)) {
+                if (IsBest(candidate, candidates, level)) {
                     return candidate;
                 }
             }
@@ -824,7 +836,11 @@ namespace Microsoft.Scripting.Actions.Calls {
             return parameter1.Type == parameter2.Type &amp;&amp; parameter1.ProhibitNull == parameter2.ProhibitNull;
         }
 
-        public virtual bool CanConvertFrom(Type fromType, ParameterWrapper toParameter, NarrowingLevel level) {
+        public virtual bool CanConvertFrom(ParameterWrapper parameter1, ParameterWrapper parameter2) {
+            return CanConvertFrom(parameter1.Type, null, parameter2, NarrowingLevel.None);
+        }
+
+        public virtual bool CanConvertFrom(Type fromType, DynamicMetaObject fromArgument, ParameterWrapper toParameter, NarrowingLevel level) {
             Assert.NotNull(fromType, toParameter);
 
             Type toType = toParameter.Type;
@@ -853,7 +869,7 @@ namespace Microsoft.Scripting.Actions.Calls {
         /// &lt;summary&gt;
         /// Selects the best (of two) candidates for conversion from actualType
         /// &lt;/summary&gt;
-        public virtual Candidate SelectBestConversionFor(Type actualType, ParameterWrapper candidateOne, ParameterWrapper candidateTwo, NarrowingLevel level) {
+        public virtual Candidate SelectBestConversionFor(DynamicMetaObject arg, ParameterWrapper candidateOne, ParameterWrapper candidateTwo, NarrowingLevel level) {
             return Candidate.Equivalent;
         }
 </diff>
      <filename>Merlin/Main/Runtime/Microsoft.Scripting/Actions/Calls/OverloadResolver.cs</filename>
    </modified>
    <modified>
      <diff>@@ -25,6 +25,10 @@ using ComTypes = System.Runtime.InteropServices.ComTypes;
 
 namespace Microsoft.Scripting.ComInterop {
 
+    /// &lt;summary&gt;
+    /// Cached information from a TLB. Only information that is required is saved. CoClasses are used
+    /// for event hookup. Enums are stored for accessing symbolic names from scripts. 
+    /// &lt;/summary&gt;
     public sealed class ComTypeLibDesc : IDynamicMetaObjectProvider {
 
         // typically typelibs contain very small number of coclasses
@@ -120,14 +124,31 @@ namespace Microsoft.Scripting.ComInterop {
                 typeLib.GetTypeInfoType(i, out typeKind);
 
                 ComTypes.ITypeInfo typeInfo;
+                typeLib.GetTypeInfo(i, out typeInfo);
                 if (typeKind == ComTypes.TYPEKIND.TKIND_COCLASS) {
-                    typeLib.GetTypeInfo(i, out typeInfo);
                     ComTypeClassDesc classDesc = new ComTypeClassDesc(typeInfo, typeLibDesc);
                     typeLibDesc._classes.AddLast(classDesc);
                 } else if (typeKind == ComTypes.TYPEKIND.TKIND_ENUM) {
-                    typeLib.GetTypeInfo(i, out typeInfo);
                     ComTypeEnumDesc enumDesc = new ComTypeEnumDesc(typeInfo, typeLibDesc);
                     typeLibDesc._enums.Add(enumDesc.TypeName, enumDesc);
+                } 
+                else if (typeKind == ComTypes.TYPEKIND.TKIND_ALIAS) {
+                    ComTypes.TYPEATTR typeAttr = ComRuntimeHelpers.GetTypeAttrForTypeInfo(typeInfo);
+                    if (typeAttr.tdescAlias.vt == (short)VarEnum.VT_USERDEFINED) {
+                        string aliasName, documentation;
+                        ComRuntimeHelpers.GetInfoFromType(typeInfo, out aliasName, out documentation);
+
+                        ComTypes.ITypeInfo referencedTypeInfo;
+                        typeInfo.GetRefTypeInfo(typeAttr.tdescAlias.lpValue.ToInt32(), out referencedTypeInfo);
+
+                        ComTypes.TYPEATTR referencedTypeAttr = ComRuntimeHelpers.GetTypeAttrForTypeInfo(referencedTypeInfo);
+                        ComTypes.TYPEKIND referencedTypeKind = referencedTypeAttr.typekind;
+
+                        if (referencedTypeKind == ComTypes.TYPEKIND.TKIND_ENUM) {
+                            ComTypeEnumDesc enumDesc = new ComTypeEnumDesc(referencedTypeInfo, typeLibDesc);
+                            typeLibDesc._enums.Add(aliasName, enumDesc);
+                        }
+                    }
                 }
             }
 
@@ -157,7 +178,6 @@ namespace Microsoft.Scripting.ComInterop {
         public string[] GetMemberNames() {
             string[] retval = new string[_enums.Count + _classes.Count];
             int i = 0;
-
             foreach (ComTypeClassDesc coclass in _classes) {
                 retval[i++] = coclass.TypeName;
             }</diff>
      <filename>Merlin/Main/Runtime/Microsoft.Scripting/ComInterop/ComTypeLibDesc.cs</filename>
    </modified>
    <modified>
      <diff>@@ -18,6 +18,7 @@ using System.Collections.Generic;
 using System.Diagnostics;
 using System.IO;
 using System.Reflection;
+using System.Reflection.Emit;
 using System.Runtime.CompilerServices;
 using System.Text;
 using System.Threading;
@@ -163,7 +164,12 @@ namespace Microsoft.Scripting.Hosting.Shell {
         /// &lt;/summary&gt;
         [System.Diagnostics.CodeAnalysis.SuppressMessage(&quot;Microsoft.Design&quot;, &quot;CA1031:DoNotCatchGeneralExceptionTypes&quot;)]
         public virtual int Run(string[] args) {
-
+#if !SILVERLIGHT
+            if (typeof(DynamicMethod).GetConstructor(new Type[] { typeof(string), typeof(Type), typeof(Type[]), typeof(bool) }) == null) {
+                Console.WriteLine(&quot;IronPython requires .NET 2.0 SP1 or later to run.&quot;);
+                Environment.Exit(1);
+            }
+#endif
             var runtimeSetup = CreateRuntimeSetup();
             var options = new ConsoleHostOptions();
             _optionsParser = new ConsoleHostOptionsParser(options, runtimeSetup);</diff>
      <filename>Merlin/Main/Runtime/Microsoft.Scripting/Hosting/Shell/ConsoleHost.cs</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>Merlin/Main/Runtime/Microsoft.Scripting/Microsoft.Scripting.Build.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,9 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.30729&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{EB66B766-6354-4208-A3D4-AACBDCB5C3B3}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Library&lt;/OutputType&gt;
@@ -16,13 +17,13 @@
     &lt;DocumentationFile&gt;..\..\Bin\Release\Microsoft.Scripting.XML&lt;/DocumentationFile&gt;
     &lt;WarningsNotAsErrors&gt;1685&lt;/WarningsNotAsErrors&gt;
     &lt;NoWarn&gt;1591&lt;/NoWarn&gt;
-    &lt;OldToolsVersion&gt;2.0&lt;/OldToolsVersion&gt;
     &lt;AssemblyOriginatorKeyFile&gt;..\..\Support\MSSharedLibKey.snk&lt;/AssemblyOriginatorKeyFile&gt;
     &lt;SignAssembly Condition=&quot;'$(SignAssembly)' == '' And Exists('$(AssemblyOriginatorKeyFile)')&quot;&gt;true&lt;/SignAssembly&gt;
     &lt;SignedSym Condition=&quot;'$(SignAssembly)' == 'true'&quot;&gt;SIGNED&lt;/SignedSym&gt;
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
     &lt;BaseAddress&gt;857735168&lt;/BaseAddress&gt;
     &lt;SilverlightPath Condition=&quot;'$(SilverlightPath)' == ''&quot;&gt;..\..\Utilities\Silverlight\x86ret\&lt;/SilverlightPath&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'FxCop|AnyCPU' &quot;&gt;
     &lt;DebugType&gt;pdbonly&lt;/DebugType&gt;
@@ -241,6 +242,7 @@
     &lt;Compile Include=&quot;PerfTrack.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\CompilerContext.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\DynamicLanguageProviderAttribute.cs&quot; /&gt;
+    &lt;Compile Include=&quot;Runtime\IConvertibleMetaObject.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\ICustomScriptCodeData.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\IRestrictedMetaObject.cs&quot; /&gt;
     &lt;Compile Include=&quot;Runtime\LegacyScriptCode.cs&quot; /&gt;</diff>
      <filename>Merlin/Main/Runtime/Microsoft.Scripting/Microsoft.Scripting.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -95,7 +95,15 @@ namespace Microsoft.Scripting.Utils {
                 string genericName = type.GetGenericTypeDefinition().FullName.Replace('+', '.');
                 int tickIndex = genericName.IndexOf('`');
                 result.Append(tickIndex != -1 ? genericName.Substring(0, tickIndex) : genericName);
-                FormatTypeArgs(result, type.GetGenericArguments());
+
+                Type[] typeArgs = type.GetGenericArguments();
+                if (type.IsGenericTypeDefinition) {
+                    result.Append('&lt;');
+                    result.Append(',', typeArgs.Length - 1);
+                    result.Append('&gt;');
+                } else {
+                    FormatTypeArgs(result, typeArgs);
+                }
             } else if (type.IsGenericParameter) {
                 result.Append(type.Name);
             } else {</diff>
      <filename>Merlin/Main/Runtime/Microsoft.Scripting/Utils/ReflectionUtils.cs</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,9 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.21022&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{2AE75F5A-CD1F-4925-9647-AF4D1C282FB4}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Library&lt;/OutputType&gt;
@@ -16,13 +17,13 @@
     &lt;SccProvider&gt;SAK&lt;/SccProvider&gt;
     &lt;DocumentationFile&gt;..\..\..\..\..\..\Merlin\Main\Bin\Release\Microsoft.Scripting.Core.XML&lt;/DocumentationFile&gt;
     &lt;NoWarn&gt;1591&lt;/NoWarn&gt;
-    &lt;OldToolsVersion&gt;2.0&lt;/OldToolsVersion&gt;
     &lt;AssemblyOriginatorKeyFile&gt;..\..\..\..\..\..\Merlin\Main\Support\MSSharedLibKey.snk&lt;/AssemblyOriginatorKeyFile&gt;
     &lt;SignAssembly Condition=&quot;'$(SignAssembly)' == '' And Exists('$(AssemblyOriginatorKeyFile)')&quot;&gt;true&lt;/SignAssembly&gt;
     &lt;SignedSym Condition=&quot;'$(SignAssembly)' == 'true'&quot;&gt;SIGNED&lt;/SignedSym&gt;
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
     &lt;SilverlightPath Condition=&quot;'$(SilverlightPath)' == ''&quot;&gt;..\..\..\..\..\..\Merlin\Main\Utilities\Silverlight\x86ret\&lt;/SilverlightPath&gt;
     &lt;BaseAddress&gt;855638016&lt;/BaseAddress&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'FxCop|AnyCPU' &quot;&gt;
     &lt;DebugType&gt;pdbonly&lt;/DebugType&gt;
@@ -248,4 +249,4 @@
       &lt;Output TaskParameter=&quot;Include&quot; ItemName=&quot;CompileItems&quot; /&gt;
     &lt;/CreateItem&gt;
   &lt;/Target&gt;
-&lt;/Project&gt;
+&lt;/Project&gt;
\ No newline at end of file</diff>
      <filename>ndp/fx/src/Core/Microsoft/Scripting/Microsoft.Scripting.Core.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,8 @@
-&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;3.5&quot;&gt;
+&#65279;&lt;Project DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot; ToolsVersion=&quot;4.0&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.21022&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{8B0F1074-750E-4D64-BF23-A1E0F54261E5}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Library&lt;/OutputType&gt;
@@ -13,13 +13,13 @@
     &lt;SccLocalPath&gt;SAK&lt;/SccLocalPath&gt;
     &lt;SccAuxPath&gt;SAK&lt;/SccAuxPath&gt;
     &lt;SccProvider&gt;SAK&lt;/SccProvider&gt;
-    &lt;OldToolsVersion&gt;2.0&lt;/OldToolsVersion&gt;
     &lt;AssemblyOriginatorKeyFile&gt;..\..\..\..\..\..\Merlin\Main\Support\MSSharedLibKey.snk&lt;/AssemblyOriginatorKeyFile&gt;
     &lt;SignAssembly Condition=&quot;'$(SignAssembly)' == '' And Exists('$(AssemblyOriginatorKeyFile)')&quot;&gt;true&lt;/SignAssembly&gt;
     &lt;SignedSym Condition=&quot;'$(SignAssembly)' == 'true'&quot;&gt;SIGNED&lt;/SignedSym&gt;
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
     &lt;BaseAddress&gt;866123776&lt;/BaseAddress&gt;
     &lt;SilverlightPath Condition=&quot;'$(SilverlightPath)' == ''&quot;&gt;..\..\..\..\..\..\Merlin\Main\Utilities\Silverlight\x86ret\&lt;/SilverlightPath&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'FxCop|AnyCPU' &quot;&gt;
     &lt;DebugType&gt;pdbonly&lt;/DebugType&gt;</diff>
      <filename>ndp/fx/src/Core/Microsoft/Scripting/Microsoft.Scripting.ExtensionAttribute.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,8 @@
-&#65279;&lt;Project ToolsVersion=&quot;3.5&quot; DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot;&gt;
+&#65279;&lt;Project ToolsVersion=&quot;4.0&quot; DefaultTargets=&quot;Build&quot; xmlns=&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot;&gt;
   &lt;PropertyGroup&gt;
     &lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&gt;Debug&lt;/Configuration&gt;
     &lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&gt;AnyCPU&lt;/Platform&gt;
-    &lt;ProductVersion&gt;9.0.21022&lt;/ProductVersion&gt;
+    &lt;ProductVersion&gt;10.0.20624&lt;/ProductVersion&gt;
     &lt;SchemaVersion&gt;2.0&lt;/SchemaVersion&gt;
     &lt;ProjectGuid&gt;{D4AE44AD-07B9-41DC-BB3B-1FDCDE3C987D}&lt;/ProjectGuid&gt;
     &lt;OutputType&gt;Library&lt;/OutputType&gt;
@@ -20,6 +20,7 @@
     &lt;SignAssembly Condition=&quot;'$(SignAssembly)' == '' And Exists('$(AssemblyOriginatorKeyFile)')&quot;&gt;true&lt;/SignAssembly&gt;
     &lt;SignedSym Condition=&quot;'$(SignAssembly)' == 'true'&quot;&gt;SIGNED&lt;/SignedSym&gt;
     &lt;DelaySign&gt;true&lt;/DelaySign&gt;
+    &lt;TargetFrameworkVersion&gt;v2.0&lt;/TargetFrameworkVersion&gt;
   &lt;/PropertyGroup&gt;
   &lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'FxCop|AnyCPU' &quot;&gt;
     &lt;DebugType&gt;pdbonly&lt;/DebugType&gt;</diff>
      <filename>ndp/fx/src/Dynamic/System/Dynamic/Microsoft.Dynamic.csproj</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>Merlin/Main/Languages/Ruby/Licenses/CPL.txt</filename>
    </removed>
    <removed>
      <filename>Merlin/Main/Languages/Ruby/Licenses/MSPL.html</filename>
    </removed>
    <removed>
      <filename>Merlin/Main/Languages/Ruby/Licenses/RubyLicense.txt</filename>
    </removed>
    <removed>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/CompositeConversionAction.cs</filename>
    </removed>
    <removed>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/ConvertToSAction.cs</filename>
    </removed>
    <removed>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/GenericConversionAction.cs</filename>
    </removed>
    <removed>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/ProtocolConversionAction.cs</filename>
    </removed>
    <removed>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Converter.Generated.cs</filename>
    </removed>
    <removed>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Converter.Generator.rb</filename>
    </removed>
    <removed>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Converter.cs</filename>
    </removed>
    <removed>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyCallTargets.cs</filename>
    </removed>
    <removed>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/RuntimeFlowControl.cs</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>5784717bec398d1320b164e2360af5d31f86515e</id>
    </parent>
    <parent>
      <id>b54621090baeead1e9a9f4eb6afa02cfa77f0a4b</id>
    </parent>
  </parents>
  <author>
    <name>Jim Deville</name>
    <email>jdeville@microsoft.com</email>
  </author>
  <url>http://github.com/shri/ironruby/commit/8cec1ec5bd19d1059cb8493270e595ede36db1ee</url>
  <id>8cec1ec5bd19d1059cb8493270e595ede36db1ee</id>
  <committed-date>2009-07-30T15:55:04-07:00</committed-date>
  <authored-date>2009-07-30T15:55:04-07:00</authored-date>
  <message>Merge branch 'master' of git@github.com:ironruby/ironruby

* 'master' of git@github.com:ironruby/ironruby:
  syncing to head of tfs
  Syncing to head of tfs for 0.9 release</message>
  <tree>af1f4c6d84ff330bcbc61029de5de4e9b33c9620</tree>
  <committer>
    <name>Jim Deville</name>
    <email>jdeville@microsoft.com</email>
  </committer>
</commit>
