ObjectSets

diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c
index 4cab16b..47cfb1f 100644
--- a/libasn1print/asn1print.c
+++ b/libasn1print/asn1print.c
@@ -259,6 +259,8 @@
 		}
 	case ATV_REFERENCED:
 		return asn1print_ref(val->value.reference, flags);
+	case ATV_VALUESET:
+		return asn1print_constraint(val->value.constraint, flags);
 	case ATV_CHOICE_IDENTIFIER:
 		printf("%s: ", val->value.choice_identifier.identifier);
 		return asn1print_value(val->value.choice_identifier.value, flags);
@@ -280,7 +282,7 @@
 
 	switch(ct->type) {
 	case ACT_EL_TYPE:
-		asn1print_value(ct->value, flags);
+		asn1print_value(ct->containedSubtype, flags);
 		break;
 	case ACT_EL_VALUE:
 		asn1print_value(ct->value, flags);
@@ -583,6 +585,8 @@
 		}
 		printf(" OF");
 		break;
+	case A1TC_VALUESET:
+		break;
 	default:
 		{
 			char *p = ASN_EXPR_TYPE2STR(tc->expr_type);
@@ -599,7 +603,7 @@
 		asn1print_ref(tc->reference, flags);
 	}
 
-	if(tc->meta_type == AMT_VALUESET)
+	if(tc->meta_type == AMT_VALUESET && level == 0)
 		printf(" ::=");
 
 	/*