diff -ru --exclude '*.o' pnet-cvs/dumpasm/dump_class.c pnet/dumpasm/dump_class.c
--- pnet-cvs/dumpasm/dump_class.c	2007-06-19 14:20:58.000000000 -0400
+++ pnet/dumpasm/dump_class.c	2007-06-19 13:57:45.000000000 -0400
@@ -389,45 +389,64 @@
 			{
 				fputs(", ", outstream);
 			}
-			genParFlags = ILGenericParGetFlags(genPar);
-			if ((genParFlags & IL_META_GENPARAM_SPECIAL_CONST_MASK) != 0)
+			if ((flags & IL_DUMP_NO_CONSTRAINTS) == 0)
 			{
-				/* This generic parameter has special constraints */
-				if (genParFlags & IL_META_GENPARAM_CTOR_CONST)
+				genParFlags = ILGenericParGetFlags(genPar);
+				if ((genParFlags & IL_META_GENPARAM_VARIANCE_MASK) != 0)
 				{
-					fputs(".ctor ", outstream);
-				}
-				if (genParFlags & IL_META_GENPARAM_CLASS_CONST)
-				{
-					fputs("class ", outstream);
-				}
-				if (genParFlags & IL_META_GENPARAM_VALUETYPE_CONST)
-				{
-					fputs("valuetype ", outstream);
+					/* This generic parameter is a variance */
+					if (genParFlags & IL_META_GENPARAM_COVARIANT)
+					{
+						fputs("+ ", outstream);
+					}
+					else if (genParFlags & IL_META_GENPARAM_CONTRAVARIANT)
+					{
+						fputs("- ", outstream);
+					}
 				}
-			}
-			genConstr = ILGenericParNextConstraint(genPar, 0);
-			if(genConstr)
-			{
-				putc('(', outstream);
-				while(genConstr)
+				if ((genParFlags & IL_META_GENPARAM_SPECIAL_CONST_MASK) != 0)
 				{
-					constraint = ILConstraint_Type(genConstr);
-					spec = ILProgramItemToTypeSpec(constraint);
-					if(spec)
+					/* This generic parameter has special constraints */
+					if (genParFlags & IL_META_GENPARAM_CTOR_CONST)
 					{
-						ILDumpType(outstream, image, ILTypeSpec_Type(spec), flags);
+						fputs(".ctor ", outstream);
 					}
-					else
+					if (genParFlags & IL_META_GENPARAM_CLASS_CONST)
 					{
-						ILDumpType(outstream, image,
-								   ILClassToType((ILClass *)constraint), flags);
+						fputs("class ", outstream);
+					}
+					if (genParFlags & IL_META_GENPARAM_VALUETYPE_CONST)
+					{
+						fputs("valuetype ", outstream);
 					}
-					genConstr = ILGenericParNextConstraint(genPar, genConstr);
-					if(genConstr)
-						fputs(", ", outstream);
 				}
-				putc(')', outstream);
+				genConstr = ILGenericParNextConstraint(genPar, 0);
+				if(genConstr)
+				{
+					putc('(', outstream);
+					while(genConstr)
+					{
+						constraint = ILConstraint_Type(genConstr);
+						spec = ILProgramItemToTypeSpec(constraint);
+						if(spec)
+						{
+							ILDumpType(outstream, image, ILTypeSpec_Type(spec), flags);
+						}
+						else
+						{
+							ILDumpType(outstream, image,
+									   ILClassToType((ILClass *)constraint), flags);
+						}
+						genConstr = ILGenericParNextConstraint(genPar, genConstr);
+						if(genConstr)
+							fputs(", ", outstream);
+					}
+					putc(')', outstream);
+				}
+			}
+			else
+			{
+				putc('!', outstream);
 			}
 			name = ILGenericPar_Name(genPar);
 			if(name)
@@ -483,7 +502,7 @@
 		if(ILClass_Parent(info))
 		{
 			fputs(" extends ", outstream);
-			DumpClassName(outstream, image, ILClass_Parent(info), flags, 1);
+			DumpClassName(outstream, image, ILClass_Parent(info), flags | IL_DUMP_NO_CONSTRAINTS, 1);
 		}
 		first = 1;
 		impl = 0;
@@ -499,7 +518,7 @@
 			{
 				fputs(", ", outstream);
 			}
-			DumpClassName(outstream, image, interface, flags, 1);
+			DumpClassName(outstream, image, interface, flags | IL_DUMP_NO_CONSTRAINTS, 1);
 		}
 		fputs("\n{\n", outstream);
 
diff -ru --exclude '*.o' pnet-cvs/image/class.c pnet/image/class.c
--- pnet-cvs/image/class.c	2006-07-17 16:18:53.000000000 -0400
+++ pnet/image/class.c	2007-06-19 14:29:17.000000000 -0400
@@ -1651,6 +1651,11 @@
 	{
 		return ILType_ToClass(type);
 	}
+	else if (ILType_Kind(type) == IL_TYPE_COMPLEX_WITH &&
+			 ILType_IsClass(ILTypeGetWithMain(type)))
+	{
+		return ILType_ToClass(ILTypeGetWithMain(type));
+	}
 	else if(type != 0 && ILType_IsComplex(type))
 	{
 		/* Recognise complex types */
diff -ru --exclude '*.o' pnet-cvs/include/il_dumpasm.h pnet/include/il_dumpasm.h
--- pnet-cvs/include/il_dumpasm.h	2007-06-19 14:49:58.000000000 -0400
+++ pnet/include/il_dumpasm.h	2007-06-19 13:53:39.000000000 -0400
@@ -36,6 +36,7 @@
 #define	IL_DUMP_GENERIC_PARAMS		8
 #define	IL_DUMP_XML_QUOTING			16
 #define	IL_DUMP_C_TYPES				32
+#define	IL_DUMP_NO_CONSTRAINTS		64
 
 /*
  * Extra flags for altering the output, in addition to "IL_DUMP_xxx".
