edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;C448530
File: RubyTests.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;C448530  (server)    5/27/2008 8:44 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;GeneriTypes
@@ -220,17 +220,18 @@
                 Load1,
                 LibraryLoader1,
 
-                Scenario_ClrFields1,
-                Scenario_ClrTypes1,
-                Scenario_ClrMethods1,
-                Scenario_ClrInterfaces1,
-                Scenario_ClrRequireAssembly1,
-                Scenario_ClrInclude1,
-                Scenario_ClrNew1,
-                Scenario_ClrAlias1,
-                // TODO: Scenario_ClrEnums1, 
-                Scenario_ClrDelegates1,
-                Scenario_ClrEvents1,
+                ClrFields1,
+                ClrTypes1,
+                ClrGenerics1,
+                ClrMethods1,
+                ClrInterfaces1,
+                ClrRequireAssembly1,
+                ClrInclude1,
+                ClrNew1,
+                ClrAlias1,
+                // TODO: ClrEnums1, 
+                ClrDelegates1,
+                ClrEvents1,
                 Scenario_RubyEngine1,
                 Scenario_RubyInteractive,
                 
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/ClrTests.cs;C417101
File: ClrTests.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/ClrTests.cs;C417101  (server)    5/27/2008 8:44 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/ClrTests.cs;GeneriTypes
@@ -29,6 +29,20 @@
 using Ruby.Runtime;
 using Microsoft.Scripting.Runtime;
 
+namespace Ruby.Tests.Interop.Generics1 {
+    public class C {
+        public int Arity { get { return 0; } }
+    }
+
+    public class C<T> {
+        public int Arity { get { return 1; } }
+    }
+
+    public class C<T,S> {
+        public int Arity { get { return 2; } }
+    }
+}
+
 namespace Ruby.Tests {
     public partial class Tests {
         public class ClassWithFields {
@@ -39,7 +53,7 @@
             public const int ConstField = 4;
         }
 
-        public void Scenario_ClrFields1() {
+        public void ClrFields1() {
             ExecutionContext.DefineGlobalVariable("obj", new ClassWithFields());
 
             AssertOutput(delegate() {
@@ -83,7 +97,7 @@
             public static int StaticMethod() { return 2; }
         }
 
-        public void Scenario_ClrMethods1() {
+        public void ClrMethods1() {
             ExecutionContext.DefineGlobalVariable("obj", new ClassWithMethods());
             ExecutionContext.DefineGlobalVariable("cls", typeof(ClassWithMethods));
 
@@ -129,7 +143,7 @@
             }
         }
 
-        public void Scenario_ClrInterfaces1() {
+        public void ClrInterfaces1() {
             ExecutionContext.DefineGlobalVariable("obj1", new ClassWithInterfaces1());
             ExecutionContext.DefineGlobalVariable("obj2", new ClassWithInterfaces2());
 
@@ -153,7 +167,7 @@
         /// <summary>
         /// Type represents a class object - it is equivalent to RubyClass.
         /// </summary>
-        public void Scenario_ClrTypes1() {
+        public void ClrTypes1() {
             TestTypeAndTracker(typeof(ClassWithMethods));
             TestTypeAndTracker(ReflectionCache.GetTypeTracker(typeof(ClassWithMethods)));
         }
@@ -179,10 +193,29 @@
 ", RubyUtils.GetQualifiedName(type.GetType()), RubyUtils.GetQualifiedName(typeof(ClassWithMethods))), OutputFlags.Match);
         }
 
+        public void ClrGenerics1() {
+            Runtime.LoadAssembly(typeof(Tests).Assembly);
+            
+            AssertOutput(delegate() {
+                CompilerTest(@"
+include Ruby::Tests::Interop::Generics1
+p C
+p C.new.arity
+p C[String].new.arity
+p C[Fixnum, Fixnum].new.arity
+");
+            }, @"
+C
+0
+1
+2
+");
+        }
+
         /// <summary>
         /// Require, namespaces.
         /// </summary>
-        public void Scenario_ClrRequireAssembly1() {
+        public void ClrRequireAssembly1() {
             AssertOutput(delegate() {
                 CompilerTest(@"
 require 'mscorlib'
@@ -194,7 +227,7 @@
         /// <summary>
         /// CLR class re-def and inclusions.
         /// </summary>
-        public void Scenario_ClrInclude1() {
+        public void ClrInclude1() {
             AssertOutput(delegate() {
                 CompilerTest(@"
 require 'mscorlib'
@@ -209,7 +242,7 @@
         /// <summary>
         /// Instantiation.
         /// </summary>
-        public void Scenario_ClrNew1() {
+        public void ClrNew1() {
             AssertOutput(delegate() {
                 CompilerTest(@"
 require 'mscorlib'
@@ -229,7 +262,7 @@
         /// <summary>
         /// Alias.
         /// </summary>
-        public void Scenario_ClrAlias1() {
+        public void ClrAlias1() {
             AssertOutput(delegate() {
                 CompilerTest(@"
 require 'mscorlib'
@@ -262,7 +295,7 @@
         /// <summary>
         /// Enums.
         /// </summary>
-        public void Scenario_ClrEnums1() {
+        public void ClrEnums1() {
             // TODO:            
             ExecutionContext.DefineGlobalVariable("obj", new ClassWithEnum());
             ExecutionContext.DefineGlobalVariable("enum", typeof(ClassWithEnum.MyEnum));
@@ -282,7 +315,7 @@
 
         public delegate int Delegate1(string foo, int bar);
 
-        public void Scenario_ClrDelegates1() {
+        public void ClrDelegates1() {
             ExecutionContext.DefineGlobalVariable("delegateType", typeof(Delegate1));
             CompilerTest(@"
 D = $delegateType.to_class
@@ -295,7 +328,7 @@
             AssertEquals(ExecutionContext.GetGlobalVariable("bar"), 123);
         }
 
-        public void Scenario_ClrEvents1() {
+        public void ClrEvents1() {
             AssertOutput(delegate() {
                 CompilerTest(@"
 require 'System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializers.Generated.cs;C448811
File: Initializers.Generated.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializers.Generated.cs;C448811  (server)    5/27/2008 9:20 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializers.Generated.cs;GeneriTypes
@@ -31,7 +31,7 @@
             // Skipped primitive: __ClassSingleton
             // Skipped primitive: __MainSingleton
             Ruby.Builtins.RubyModule def27 = DefineGlobalModule("Comparable", typeof(Ruby.Builtins.Comparable), new System.Action<Ruby.Builtins.RubyModule>(LoadComparable_Instance), null, Ruby.Builtins.RubyModule.EmptyArray);
-            Ruby.Builtins.RubyModule def18 = DefineGlobalModule("Enumerable", typeof(Ruby.Builtins.Enumerable), new System.Action<Ruby.Builtins.RubyModule>(LoadEnumerable_Instance), null, Ruby.Builtins.RubyModule.EmptyArray);
+            Ruby.Builtins.RubyModule def17 = DefineGlobalModule("Enumerable", typeof(Ruby.Builtins.Enumerable), new System.Action<Ruby.Builtins.RubyModule>(LoadEnumerable_Instance), null, Ruby.Builtins.RubyModule.EmptyArray);
             Ruby.Builtins.RubyModule def3 = DefineGlobalModule("Errno", typeof(Ruby.Builtins.Errno), null, null, Ruby.Builtins.RubyModule.EmptyArray);
             Ruby.Builtins.RubyModule def13 = DefineModule("File::Constants", typeof(Ruby.Builtins.RubyFileOps.Constants), new System.Action<Ruby.Builtins.RubyModule>(LoadFile__Constants_Instance), null, Ruby.Builtins.RubyModule.EmptyArray);
             // Skipped primitive: Kernel
@@ -48,17 +48,18 @@
             ExtendClass(typeof(System.Type), new System.Action<Ruby.Builtins.RubyModule>(LoadSystem__Type_Instance), null, Ruby.Builtins.RubyModule.EmptyArray, null);
             // Skipped primitive: __ClassSingletonSingleton
             #if !SILVERLIGHT
-            object def1 = DefineSingleton(new System.Action<Ruby.Builtins.RubyModule>(Load__Singleton_ArgFilesSingletonOps_Instance), null, new Ruby.Builtins.RubyModule[] {def18, });
+            object def1 = DefineSingleton(new System.Action<Ruby.Builtins.RubyModule>(Load__Singleton_ArgFilesSingletonOps_Instance), null, new Ruby.Builtins.RubyModule[] {def17, });
             #endif
             #if !SILVERLIGHT
-            object def2 = DefineSingleton(new System.Action<Ruby.Builtins.RubyModule>(Load__Singleton_EnvironmentSingletonOps_Instance), null, new Ruby.Builtins.RubyModule[] {def18, });
+            object def2 = DefineSingleton(new System.Action<Ruby.Builtins.RubyModule>(Load__Singleton_EnvironmentSingletonOps_Instance), null, new Ruby.Builtins.RubyModule[] {def17, });
             #endif
+            ExtendClass(typeof(Microsoft.Scripting.Actions.TypeGroup), new System.Action<Ruby.Builtins.RubyModule>(LoadMicrosoft__Scripting__Actions__TypeGroup_Instance), null, new Ruby.Builtins.RubyModule[] {def17, }, null);
             // Skipped primitive: Object
-            ExtendModule(typeof(System.Collections.Generic.IDictionary<System.Object, System.Object>), new System.Action<Ruby.Builtins.RubyModule>(LoadSystem__Collections__Generic__IDictionary_Instance), null, new Ruby.Builtins.RubyModule[] {def18, });
-            ExtendModule(typeof(System.Collections.IEnumerable), new System.Action<Ruby.Builtins.RubyModule>(LoadSystem__Collections__IEnumerable_Instance), null, new Ruby.Builtins.RubyModule[] {def18, });
-            ExtendModule(typeof(System.Collections.IList), new System.Action<Ruby.Builtins.RubyModule>(LoadSystem__Collections__IList_Instance), null, new Ruby.Builtins.RubyModule[] {def18, });
-            Ruby.Builtins.RubyModule def31 = ExtendModule(typeof(System.IComparable), new System.Action<Ruby.Builtins.RubyModule>(LoadSystem__IComparable_Instance), null, new Ruby.Builtins.RubyModule[] {def27, });
-            DefineGlobalClass("Array", typeof(Ruby.Builtins.RubyArray), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadArray_Instance), new System.Action<Ruby.Builtins.RubyModule>(LoadArray_Class), new Ruby.Builtins.RubyModule[] {def18, }, new System.Delegate[] {
+            ExtendModule(typeof(System.Collections.Generic.IDictionary<System.Object, System.Object>), new System.Action<Ruby.Builtins.RubyModule>(LoadSystem__Collections__Generic__IDictionary_Instance), null, new Ruby.Builtins.RubyModule[] {def17, });
+            Ruby.Builtins.RubyModule def31 = ExtendModule(typeof(System.Collections.IEnumerable), new System.Action<Ruby.Builtins.RubyModule>(LoadSystem__Collections__IEnumerable_Instance), null, new Ruby.Builtins.RubyModule[] {def17, });
+            ExtendModule(typeof(System.Collections.IList), new System.Action<Ruby.Builtins.RubyModule>(LoadSystem__Collections__IList_Instance), null, new Ruby.Builtins.RubyModule[] {def17, });
+            ExtendModule(typeof(System.IComparable), new System.Action<Ruby.Builtins.RubyModule>(LoadSystem__IComparable_Instance), null, new Ruby.Builtins.RubyModule[] {def27, });
+            DefineGlobalClass("Array", typeof(Ruby.Builtins.RubyArray), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadArray_Instance), new System.Action<Ruby.Builtins.RubyModule>(LoadArray_Class), new Ruby.Builtins.RubyModule[] {def17, }, new System.Delegate[] {
                 new Microsoft.Scripting.Utils.Function<Ruby.Builtins.RubyArray>(Ruby.Builtins.ArrayOps.CreateArray),
                 new Microsoft.Scripting.Utils.Function<System.Collections.IList, Ruby.Builtins.RubyArray>(Ruby.Builtins.ArrayOps.CreateArray),
                 new Microsoft.Scripting.Utils.Function<System.Int32, Ruby.Builtins.RubyArray>(Ruby.Builtins.ArrayOps.CreateArray),
@@ -69,7 +70,7 @@
             });
             DefineGlobalClass("Binding", typeof(Ruby.Builtins.Binding), Context.ObjectClass, null, null, Ruby.Builtins.RubyModule.EmptyArray, null);
             DefineGlobalClass("ClrString", typeof(System.String), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadClrString_Instance), null, new Ruby.Builtins.RubyModule[] {def31, }, null);
-            DefineGlobalClass("Dir", typeof(Ruby.Builtins.RubyDir), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadDir_Instance), new System.Action<Ruby.Builtins.RubyModule>(LoadDir_Class), new Ruby.Builtins.RubyModule[] {def18, }, null);
+            DefineGlobalClass("Dir", typeof(Ruby.Builtins.RubyDir), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadDir_Instance), new System.Action<Ruby.Builtins.RubyModule>(LoadDir_Class), new Ruby.Builtins.RubyModule[] {def17, }, null);
             Ruby.Builtins.RubyClass def28 = Context.ExceptionClass = DefineGlobalClass("Exception", typeof(System.Exception), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadException_Instance), new System.Action<Ruby.Builtins.RubyModule>(LoadException_Class), Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] {
                 new Microsoft.Scripting.Utils.Function<Ruby.Builtins.MutableString, System.Exception>(Ruby.Builtins.ExceptionOps.Factory),
             });
@@ -80,7 +81,7 @@
                 new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Runtime.CodeContext, System.Object, System.IO.FileSystemInfo>(Ruby.Builtins.RubyFileOps.RubyStatOps.Create),
             });
             #endif
-            DefineGlobalClass("Hash", typeof(Ruby.Builtins.Hash), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadHash_Instance), new System.Action<Ruby.Builtins.RubyModule>(LoadHash_Class), new Ruby.Builtins.RubyModule[] {def18, }, new System.Delegate[] {
+            DefineGlobalClass("Hash", typeof(Ruby.Builtins.Hash), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadHash_Instance), new System.Action<Ruby.Builtins.RubyModule>(LoadHash_Class), new Ruby.Builtins.RubyModule[] {def17, }, new System.Delegate[] {
                 new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Runtime.CodeContext, Ruby.Builtins.Hash>(Ruby.Builtins.HashOps.Hash),
                 new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Runtime.CodeContext, Ruby.Runtime.BlockParam, System.Object, Ruby.Builtins.Hash>(Ruby.Builtins.HashOps.Hash),
             });
@@ -98,10 +99,10 @@
                 new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Runtime.CodeContext, Ruby.Builtins.Proc>(Ruby.Builtins.ProcOps.CreateProc),
                 new Microsoft.Scripting.Utils.Function<Ruby.Runtime.BlockParam, Ruby.Builtins.Proc>(Ruby.Builtins.ProcOps.CreateProc),
             });
-            DefineGlobalClass("Range", typeof(Ruby.Builtins.Range), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadRange_Instance), null, new Ruby.Builtins.RubyModule[] {def18, }, new System.Delegate[] {
+            DefineGlobalClass("Range", typeof(Ruby.Builtins.Range), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadRange_Instance), null, new Ruby.Builtins.RubyModule[] {def17, }, new System.Delegate[] {
                 new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Runtime.CodeContext, System.Object, System.Object, System.Boolean, Ruby.Builtins.Range>(Ruby.Builtins.RangeOps.CreateRange),
             });
-            DefineGlobalClass("Regexp", typeof(Ruby.Builtins.RubyRegex), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadRegexp_Instance), new System.Action<Ruby.Builtins.RubyModule>(LoadRegexp_Class), new Ruby.Builtins.RubyModule[] {def18, }, new System.Delegate[] {
+            DefineGlobalClass("Regexp", typeof(Ruby.Builtins.RubyRegex), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadRegexp_Instance), new System.Action<Ruby.Builtins.RubyModule>(LoadRegexp_Class), new Ruby.Builtins.RubyModule[] {def17, }, new System.Delegate[] {
                 new Microsoft.Scripting.Utils.Function<Ruby.Builtins.RubyRegex>(Ruby.Builtins.RegexpOps.Create),
                 new Microsoft.Scripting.Utils.Function<Ruby.Builtins.RubyRegex, Ruby.Builtins.RubyRegex>(Ruby.Builtins.RegexpOps.Create),
                 new Microsoft.Scripting.Utils.Function<Ruby.Builtins.MutableString, Ruby.Builtins.RubyRegex>(Ruby.Builtins.RegexpOps.Create),
@@ -111,12 +112,12 @@
                 new Microsoft.Scripting.Utils.Function<Ruby.Builtins.MutableString, System.Int32, Ruby.Builtins.MutableString, Ruby.Builtins.RubyRegex>(Ruby.Builtins.RegexpOps.Create),
                 new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Runtime.CodeContext, Ruby.Builtins.MutableString, System.Int32, System.Object, Ruby.Builtins.RubyRegex>(Ruby.Builtins.RegexpOps.Create),
             });
-            DefineGlobalClass("String", typeof(Ruby.Builtins.MutableString), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadString_Instance), null, new Ruby.Builtins.RubyModule[] {def18, def27, }, new System.Delegate[] {
+            DefineGlobalClass("String", typeof(Ruby.Builtins.MutableString), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadString_Instance), null, new Ruby.Builtins.RubyModule[] {def17, def27, }, new System.Delegate[] {
                 new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Runtime.CodeContext, Ruby.Builtins.MutableString>(Ruby.Builtins.MutableStringOps.Create),
                 new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Runtime.CodeContext, Ruby.Builtins.MutableString, Ruby.Builtins.MutableString>(Ruby.Builtins.MutableStringOps.Create),
                 new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Runtime.CodeContext, System.Object, Ruby.Builtins.MutableString>(Ruby.Builtins.MutableStringOps.Create),
             });
-            Ruby.Builtins.RubyClass def14 = DefineGlobalClass("Struct", typeof(Ruby.Builtins.RubyStruct), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadStruct_Instance), null, new Ruby.Builtins.RubyModule[] {def18, }, new System.Delegate[] {
+            Ruby.Builtins.RubyClass def14 = DefineGlobalClass("Struct", typeof(Ruby.Builtins.RubyStruct), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadStruct_Instance), null, new Ruby.Builtins.RubyModule[] {def17, }, new System.Delegate[] {
                 new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Runtime.CodeContext, Ruby.Runtime.BlockParam, System.Object, System.Object[], System.Object>(Ruby.Builtins.RubyStructOps.CreateNamed),
             });
             DefineGlobalClass("Symbol", typeof(Microsoft.Scripting.SymbolId), Context.ObjectClass, new System.Action<Ruby.Builtins.RubyModule>(LoadSymbol_Instance), new System.Action<Ruby.Builtins.RubyModule>(LoadSymbol_Class), Ruby.Builtins.RubyModule.EmptyArray, null);
@@ -133,7 +134,7 @@
                 new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Runtime.CodeContext, Ruby.Builtins.MutableString, Ruby.Builtins.MutableString, Ruby.Builtins.RubyIO>(Ruby.Builtins.RubyFileOps.CreateIO),
             });
             DefineGlobalClass("Float", typeof(System.Double), def22, new System.Action<Ruby.Builtins.RubyModule>(LoadFloat_Instance), new System.Action<Ruby.Builtins.RubyModule>(LoadFloat_Class), new Ruby.Builtins.RubyModule[] {def23, }, null);
-            Ruby.Builtins.RubyClass def17 = DefineGlobalClass("Integer", typeof(Ruby.Builtins.Integer), def22, new System.Action<Ruby.Builtins.RubyModule>(LoadInteger_Instance), new System.Action<Ruby.Builtins.RubyModule>(LoadInteger_Class), new Ruby.Builtins.RubyModule[] {def23, }, null);
+            Ruby.Builtins.RubyClass def18 = DefineGlobalClass("Integer", typeof(Ruby.Builtins.Integer), def22, new System.Action<Ruby.Builtins.RubyModule>(LoadInteger_Instance), new System.Action<Ruby.Builtins.RubyModule>(LoadInteger_Class), new Ruby.Builtins.RubyModule[] {def23, }, null);
             DefineGlobalClass("NoMemoryError", typeof(Ruby.Builtins.NoMemoryError), def28, null, null, Ruby.Builtins.RubyModule.EmptyArray, null);
             Ruby.Builtins.RubyClass def25 = DefineGlobalClass("ScriptError", typeof(Ruby.Builtins.ScriptError), def28, null, null, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] {
                 new Microsoft.Scripting.Utils.Function<Ruby.Builtins.MutableString, Ruby.Builtins.ScriptError>(Ruby.Builtins.ScriptErrorOps.Factory),
@@ -158,8 +159,8 @@
             DefineGlobalClass("ArgumentError", typeof(System.ArgumentException), def26, new System.Action<Ruby.Builtins.RubyModule>(LoadArgumentError_Instance), null, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] {
                 new Microsoft.Scripting.Utils.Function<Ruby.Builtins.MutableString, System.ArgumentException>(Ruby.Builtins.ArgumentErrorOps.Factory),
             });
-            DefineGlobalClass("Bignum", typeof(Microsoft.Scripting.Math.BigInteger), def17, new System.Action<Ruby.Builtins.RubyModule>(LoadBignum_Instance), null, Ruby.Builtins.RubyModule.EmptyArray, null);
-            DefineGlobalClass("Fixnum", typeof(System.Int32), def17, new System.Action<Ruby.Builtins.RubyModule>(LoadFixnum_Instance), new System.Action<Ruby.Builtins.RubyModule>(LoadFixnum_Class), Ruby.Builtins.RubyModule.EmptyArray, null);
+            DefineGlobalClass("Bignum", typeof(Microsoft.Scripting.Math.BigInteger), def18, new System.Action<Ruby.Builtins.RubyModule>(LoadBignum_Instance), null, Ruby.Builtins.RubyModule.EmptyArray, null);
+            DefineGlobalClass("Fixnum", typeof(System.Int32), def18, new System.Action<Ruby.Builtins.RubyModule>(LoadFixnum_Instance), new System.Action<Ruby.Builtins.RubyModule>(LoadFixnum_Class), Ruby.Builtins.RubyModule.EmptyArray, null);
             DefineGlobalClass("IndexError", typeof(System.IndexOutOfRangeException), def26, null, null, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] {
                 new Microsoft.Scripting.Utils.Function<Ruby.Builtins.MutableString, System.IndexOutOfRangeException>(Ruby.Builtins.IndexErrorOps.Factory),
             });
@@ -538,10 +539,6 @@
             module.UndefineLibraryMethod("append_features");
             module.UndefineLibraryMethod("extend_object");
             module.UndefineLibraryMethod("module_function");
-            module.DefineLibraryMethod("[]", 0x29, new System.Delegate[] {
-                new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Runtime.CodeContext, Ruby.Builtins.RubyModule, System.Object[], Ruby.Builtins.RubyClass>(Ruby.Builtins.ClassOps.Of),
-            });
-            
             module.DefineRuleGenerator("allocate", 0x29, Ruby.Builtins.ClassOps.GetInstanceAllocator());
             
             module.DefineLibraryMethod("inherited", 0x2a, new System.Delegate[] {
@@ -558,10 +555,6 @@
             
             module.DefineRuleGenerator("new", 0x29, Ruby.Builtins.ClassOps.GetInstanceConstructor());
             
-            module.DefineLibraryMethod("of", 0x29, new System.Delegate[] {
-                new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Runtime.CodeContext, Ruby.Builtins.RubyModule, System.Object[], Ruby.Builtins.RubyClass>(Ruby.Builtins.ClassOps.Of),
-            });
-            
             module.DefineLibraryMethod("superclass", 0x29, new System.Delegate[] {
                 new Microsoft.Scripting.Utils.Function<Ruby.Builtins.RubyClass, Ruby.Builtins.RubyClass>(Ruby.Builtins.ClassOps.GetSuperclass),
             });
@@ -2957,6 +2950,32 @@
             
         }
         
+        private void LoadMicrosoft__Scripting__Actions__TypeGroup_Instance(Ruby.Builtins.RubyModule/*!*/ module) {
+            
+            module.DefineLibraryMethod("[]", 0x29, new System.Delegate[] {
+                new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Runtime.CodeContext, Microsoft.Scripting.Actions.TypeGroup, System.Object[], Ruby.Builtins.RubyClass>(Ruby.Builtins.TypeGroupOps.Of),
+            });
+            
+            module.DefineLibraryMethod("each", 0x29, new System.Delegate[] {
+                new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Runtime.CodeContext, Microsoft.Scripting.Actions.TypeGroup, Ruby.Runtime.BlockParam, System.Object>(Ruby.Builtins.TypeGroupOps.EachType),
+            });
+            
+            module.DefineLibraryMethod("name", 0x29, new System.Delegate[] {
+                new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Actions.TypeGroup, Ruby.Builtins.MutableString>(Ruby.Builtins.TypeGroupOps.GetName),
+            });
+            
+            module.DefineRuleGenerator("new", 0x29, Ruby.Builtins.TypeGroupOps.GetInstanceConstructor());
+            
+            module.DefineLibraryMethod("of", 0x29, new System.Delegate[] {
+                new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Runtime.CodeContext, Microsoft.Scripting.Actions.TypeGroup, System.Object[], Ruby.Builtins.RubyClass>(Ruby.Builtins.TypeGroupOps.Of),
+            });
+            
+            module.DefineLibraryMethod("to_s", 0x29, new System.Delegate[] {
+                new Microsoft.Scripting.Utils.Function<Microsoft.Scripting.Actions.TypeGroup, Ruby.Builtins.MutableString>(Ruby.Builtins.TypeGroupOps.GetName),
+            });
+            
+        }
+        
         private void LoadMicrosoft__Scripting__Actions__TypeTracker_Instance(Ruby.Builtins.RubyModule/*!*/ module) {
             
             module.DefineLibraryMethod("to_class", 0x29, new System.Delegate[] {
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/IronRuby.Libraries.csproj;C448258
File: IronRuby.Libraries.csproj
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/IronRuby.Libraries.csproj;C448258  (server)    5/27/2008 9:08 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/IronRuby.Libraries.csproj;GeneriTypes
@@ -125,6 +125,7 @@
     <Compile Include="Extensions\IDictionaryOps.cs" />
     <Compile Include="Extensions\IEnumerableOps.cs" />
     <Compile Include="Extensions\IListOps.cs" />
+    <Compile Include="Extensions\TypeGroupOps.cs" />
     <Compile Include="Extensions\TypeOps.cs" />
     <Compile Include="Extensions\TypeTrackerOps.cs" />
     <Compile Include="FileControl\Fcntl.cs" />
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/ClassOps.cs;C447029
File: ClassOps.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/ClassOps.cs;C447029  (server)    5/27/2008 8:44 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/ClassOps.cs;GeneriTypes
@@ -76,47 +76,6 @@
             return self.SuperClass;
         }
 
-        [RubyMethod("of")]
-        [RubyMethod("[]")]
-        public static RubyClass/*!*/ Of(CodeContext/*!*/ context, RubyModule/*!*/ self, [NotNull]params object[]/*!*/ typeArgs) {
-            if (self.Tracker == null) {
-                throw new NotImplementedException("TODO");
-            }
-            
-            Type type = self.Tracker.Type;
-            int required = type.GetGenericArguments().Length;
-            if (required == 0) {
-                throw RubyExceptions.CreateArgumentError(String.Format("'{0}' is not a generic type", type.FullName));
-            }
-
-            int provided = typeArgs == null ? 0 : typeArgs.Length;
-            if (required != provided) {
-                throw RubyExceptions.CreateArgumentError(String.Format("Type '{0}' requires {1} generic type arguments, {2} provided", type.FullName, required, provided));
-            }
-
-            // pull out the type arguments
-            // TODO: this should only operated on RubyClass objects & not TypeTrackers
-            Type[] args = new Type[required];
-            for (int i = 0; i < required; i++) {
-                object arg = typeArgs[i];
-                TypeTracker tt = arg as TypeTracker;
-                if (tt != null) {
-                    args[i] = tt.Type;
-                    continue;
-                }
-                RubyClass rc = arg as RubyClass;
-                if (rc != null) {
-                    args[i] = rc.GetUnderlyingSystemType();
-                    continue;
-                }
-                throw RubyExceptions.InvalidValueForType(context, arg, "Class");
-            }
-
-            Type concreteType = type.MakeGenericType(args);
-
-            return RubyUtils.GetExecutionContext(context).GetClass(concreteType);
-        }
-
         #endregion
     }
 }
===================================================================
add: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Extensions/TypeGroupOps.cs
File: TypeGroupOps.cs
===================================================================
--- [no source file]
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Extensions/TypeGroupOps.cs;GeneriTypes
@@ -1,0 +1,96 @@
+?/* ****************************************************************************
+ *
+ * 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 Microsoft.Scripting.Actions;
+using Microsoft.Scripting.Runtime;
+using Ruby.Runtime;
+using System;
+using Ruby.Runtime.Calls;
+using Microsoft.Scripting;
+
+namespace Ruby.Builtins {
+    [RubyClass(Extends = typeof(TypeGroup)), Includes(typeof(Enumerable))]
+    public class TypeGroupOps {
+        private static readonly DynamicSite<BlockParam, RubyModule, object>/*!*/ _EachSite =
+            CallSiteFactory.CreateSimpleCallSite<BlockParam, RubyModule, object>(RubyContext.RubyBinder);
+        
+        [RubyMethod("new")]
+        public static RuleGenerator/*!*/ GetInstanceConstructor() {
+            return new RuleGenerator(RuleGenerators.InstanceConstructorForGroup);
+        }
+
+        [RubyMethod("of")]
+        [RubyMethod("[]")]
+        public static RubyClass/*!*/ Of(CodeContext/*!*/ context, TypeGroup/*!*/ self, [NotNull]params object[]/*!*/ typeArgs) {
+            TypeTracker tracker = self.GetTypeForArity(typeArgs.Length);
+
+            if (tracker == null) {
+                throw RubyExceptions.CreateArgumentError(String.Format("Invalid number of type arguments for `{0}'", self.NormalizedName));
+            }
+
+            Type concreteType;
+            if (typeArgs.Length > 0) {
+                // pull out the type arguments
+                Type[] args = new Type[typeArgs.Length];
+                for (int i = 0; i < args.Length; i++) {
+                    object arg = typeArgs[i];
+                    TypeTracker tt = arg as TypeTracker;
+                    if (tt != null) {
+                        args[i] = tt.Type;
+                        continue;
+                    }
+
+                    RubyClass rc = arg as RubyClass;
+                    if (rc != null) {
+                        args[i] = rc.GetUnderlyingSystemType();
+                        continue;
+                    }
+
+                    throw RubyExceptions.InvalidValueForType(context, arg, "Class");
+                }
+
+                concreteType = tracker.Type.MakeGenericType(args);
+            } else {
+                concreteType = tracker.Type;
+            }
+
+            return RubyUtils.GetExecutionContext(context).GetClass(concreteType);
+        }
+
+        [RubyMethod("each")]
+        public static object EachType(CodeContext/*!*/ context, TypeGroup/*!*/ self, BlockParam/*!*/ block) {
+            if (block == null) {
+                throw new LocalJumpError("no block given");
+            }
+
+            RubyExecutionContext ec = RubyUtils.GetExecutionContext(context);
+            foreach (Type type in self.Types) {
+                RubyModule module = ec.GetModule(type);
+                object result = _EachSite.Invoke(context, block, module);
+                if (block.BlockJumped(result)) {
+                    return result;
+                }
+            }
+
+            return self;
+        }
+
+        [RubyMethod("name")]
+        [RubyMethod("to_s")]
+        public static MutableString/*!*/ GetName(TypeGroup/*!*/ self) {
+            return MutableString.CreateMutable().Append("TypeGroup of ").Append(self.Name);
+        }
+    }
+}
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyModule.cs;C448258
File: RubyModule.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyModule.cs;C448258  (server)    5/27/2008 9:05 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyModule.cs;GeneriTypes
@@ -431,6 +431,11 @@
         }
 
         private object TrackerToModule(object value) {
+            TypeGroup typeGroup = value as TypeGroup;
+            if (typeGroup != null) {
+                return value;
+            }
+            
             // TypeTracker retrieved from namespace tracker should behave like a RubyClass/RubyModule:
             TypeTracker typeTracker = value as TypeTracker;
             if (typeTracker != null) {
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RuleGenerators.cs;C448258
File: RuleGenerators.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RuleGenerators.cs;C448258  (server)    5/27/2008 9:22 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RuleGenerators.cs;GeneriTypes
@@ -34,6 +34,14 @@
             ((RubyClass)args.Values[0]).SetRuleForCreateInstance(rule, binder, args, true);
         }
 
+        public static void InstanceConstructorForGroup(string/*!*/ name, ActionBinder/*!*/ binder, CodeContext/*!*/ callerContext,
+            RuleBuilder/*!*/ rule, CallArguments/*!*/ args) {
+            RubyExecutionContext ec = RubyUtils.GetExecutionContext(callerContext);
+            RubyClass cls = ec.GetClass(((TypeGroup)args.Values[0]).Type);
+
+            cls.SetRuleForCreateInstance(rule, binder, args, true);
+        }
+
         public static void InstanceAllocator(string/*!*/ name, ActionBinder/*!*/ binder, CodeContext/*!*/ callerContext, 
             RuleBuilder/*!*/ rule, CallArguments/*!*/ args) {
 
===================================================================
