diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
index b8406b6..61b1e3e 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -48,7 +48,7 @@
 #define	CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do {		\
 		if(arg1->type != constr_type) {				\
 			int __ret;					\
-			root = asn1p_constraint_new(yylineno);		\
+			root = asn1p_constraint_new(yylineno, currentModule);	\
 			checkmem(root);					\
 			root->type = constr_type;			\
 			__ret = asn1p_constraint_insert(root,		\
@@ -315,6 +315,7 @@
 %type	<a_constr>		optConstraints
 %type	<a_constr>		Constraint
 %type	<a_constr>		SubtypeConstraint
+%type	<a_constr>		ConstraintSpecs
 %type	<a_constr>		GeneralConstraint
 %type	<a_constr>		SetOfConstraints
 %type	<a_constr>		ElementSetSpecs		/* 1..2,...,3 */
@@ -875,7 +876,7 @@
 	}
 	| TypeRefName ':' Identifier {
 		int ret;
-		$$.governor = asn1p_ref_new(yylineno);
+		$$.governor = asn1p_ref_new(yylineno, currentModule);
 		ret = asn1p_ref_add_component($$.governor, $1, 0);
 		checkmem(ret == 0);
 		$$.argument = $3;
@@ -883,7 +884,7 @@
 	}
 	| TypeRefName ':' TypeRefName {
 		int ret;
-		$$.governor = asn1p_ref_new(yylineno);
+		$$.governor = asn1p_ref_new(yylineno, currentModule);
 		ret = asn1p_ref_add_component($$.governor, $1, 0);
 		checkmem(ret == 0);
 		$$.argument = $3;
@@ -891,7 +892,7 @@
 	}
 	| BasicTypeId ':' Identifier {
 		int ret;
-		$$.governor = asn1p_ref_new(yylineno);
+		$$.governor = asn1p_ref_new(yylineno, currentModule);
 		ret = asn1p_ref_add_component($$.governor,
 			ASN_EXPR_TYPE2STR($1), 1);
 		checkmem(ret == 0);
@@ -899,7 +900,7 @@
 	}
 	| BasicTypeId ':' TypeRefName {
 		int ret;
-		$$.governor = asn1p_ref_new(yylineno);
+		$$.governor = asn1p_ref_new(yylineno, currentModule);
 		ret = asn1p_ref_add_component($$.governor,
 			ASN_EXPR_TYPE2STR($1), 1);
 		checkmem(ret == 0);
@@ -938,7 +939,7 @@
 		$$->Identifier = $1;
 		$$->expr_type = A1TC_REFERENCE;
 		$$->meta_type = AMT_VALUE;
-		ref = asn1p_ref_new(yylineno);
+		ref = asn1p_ref_new(yylineno, currentModule);
 		asn1p_ref_add_component(ref, $1, RLT_lowercase);
 		$$->value = asn1p_value_fromref(ref, 0);
 	}
@@ -1320,7 +1321,7 @@
 		int ret;
 		$$ = NEW_EXPR();
 		checkmem($$);
-		$$->reference = asn1p_ref_new(yylineno);
+		$$->reference = asn1p_ref_new(yylineno, currentModule);
 		ret = asn1p_ref_add_component($$->reference,
 			$4, RLT_lowercase);
 		checkmem(ret == 0);
@@ -1345,7 +1346,7 @@
 ComplexTypeReference:
 	TOK_typereference {
 		int ret;
-		$$ = asn1p_ref_new(yylineno);
+		$$ = asn1p_ref_new(yylineno, currentModule);
 		checkmem($$);
 		ret = asn1p_ref_add_component($$, $1, RLT_UNKNOWN);
 		checkmem(ret == 0);
@@ -1353,7 +1354,7 @@
 	}
 	| TOK_typereference '.' TypeRefName {
 		int ret;
-		$$ = asn1p_ref_new(yylineno);
+		$$ = asn1p_ref_new(yylineno, currentModule);
 		checkmem($$);
 		ret = asn1p_ref_add_component($$, $1, RLT_UNKNOWN);
 		checkmem(ret == 0);
@@ -1364,7 +1365,7 @@
 	}
 	| ObjectClassReference '.' TypeRefName {
 		int ret;
-		$$ = asn1p_ref_new(yylineno);
+		$$ = asn1p_ref_new(yylineno, currentModule);
 		checkmem($$);
 		ret = asn1p_ref_add_component($$, $1, RLT_UNKNOWN);
 		checkmem(ret == 0);
@@ -1375,7 +1376,7 @@
 	}
 	| TOK_typereference '.' Identifier {
 		int ret;
-		$$ = asn1p_ref_new(yylineno);
+		$$ = asn1p_ref_new(yylineno, currentModule);
 		checkmem($$);
 		ret = asn1p_ref_add_component($$, $1, RLT_UNKNOWN);
 		checkmem(ret == 0);
@@ -1386,7 +1387,7 @@
 	}
 	| ObjectClassReference {
 		int ret;
-		$$ = asn1p_ref_new(yylineno);
+		$$ = asn1p_ref_new(yylineno, currentModule);
 		checkmem($$);
 		ret = asn1p_ref_add_component($$, $1, RLT_CAPITALS);
 		free($1);
@@ -1416,7 +1417,7 @@
 ComplexTypeReferenceAmpList:
 	ComplexTypeReferenceElement {
 		int ret;
-		$$ = asn1p_ref_new(yylineno);
+		$$ = asn1p_ref_new(yylineno, currentModule);
 		checkmem($$);
 		ret = asn1p_ref_add_component($$, $1.name, $1.lex_type);
 		free($1.name);
@@ -1450,7 +1451,7 @@
 FieldName:
 	/* "&Type1" */
 	TOK_typefieldreference {
-		$$ = asn1p_ref_new(yylineno);
+		$$ = asn1p_ref_new(yylineno, currentModule);
 		asn1p_ref_add_component($$, $1, RLT_AmpUppercase);
 		free($1);
 	}
@@ -1468,13 +1469,13 @@
 
 DefinedObjectClass:
 	TOK_capitalreference {
-		$$ = asn1p_ref_new(yylineno);
+		$$ = asn1p_ref_new(yylineno, currentModule);
 		asn1p_ref_add_component($$, $1, RLT_CAPITALS);
 		free($1);
 	}
 /*
 	| TypeRefName '.' TOK_capitalreference {
-		$$ = asn1p_ref_new(yylineno);
+		$$ = asn1p_ref_new(yylineno, currentModule);
 		asn1p_ref_add_component($$, $1, RLT_AmpUppercase);
 		asn1p_ref_add_component($$, $3, RLT_CAPITALS);
 		free($1);
@@ -1554,7 +1555,7 @@
 	Identifier {
 		asn1p_ref_t *ref;
 		int ret;
-		ref = asn1p_ref_new(yylineno);
+		ref = asn1p_ref_new(yylineno, currentModule);
 		checkmem(ref);
 		ret = asn1p_ref_add_component(ref, $1, RLT_lowercase);
 		checkmem(ret == 0);
@@ -1565,7 +1566,7 @@
 	| TypeRefName '.' Identifier {
 		asn1p_ref_t *ref;
 		int ret;
-		ref = asn1p_ref_new(yylineno);
+		ref = asn1p_ref_new(yylineno, currentModule);
 		checkmem(ref);
 		ret = asn1p_ref_add_component(ref, $1, RLT_UNKNOWN);
 		checkmem(ret == 0);
@@ -1715,7 +1716,7 @@
 	SetOfConstraints {
 		CONSTRAINT_INSERT($$, ACT_CA_SET, $1, 0);
 	}
-	| TOK_SIZE '('  ElementSetSpecs ')' {
+	| TOK_SIZE '('  ConstraintSpecs ')' {
 		/*
 		 * This is a special case, for compatibility purposes.
 		 * It goes without parentheses.
@@ -1725,17 +1726,26 @@
 	;
 
 SetOfConstraints:
-	'(' ElementSetSpecs ')' {
+	'(' ConstraintSpecs ')' {
 		$$ = $2;
 	}
-	| SetOfConstraints '(' ElementSetSpecs ')' {
+	| SetOfConstraints '(' ConstraintSpecs ')' {
 		CONSTRAINT_INSERT($$, ACT_CA_SET, $1, $3);
 	}
 	;
 
+ConstraintSpecs:
+	ElementSetSpecs {
+		$$ = $1;
+	}
+	| GeneralConstraint {
+		$$ = $1;
+	}
+	;
+
 ElementSetSpecs:
 	TOK_ThreeDots  {
-		$$ = asn1p_constraint_new(yylineno);
+		$$ = asn1p_constraint_new(yylineno, currentModule);
 		$$->type = ACT_EL_EXT;
 	}
 	| ElementSetSpec {
@@ -1743,21 +1753,18 @@
 	}
 	| ElementSetSpec ',' TOK_ThreeDots {
 		asn1p_constraint_t *ct;
-		ct = asn1p_constraint_new(yylineno);
+		ct = asn1p_constraint_new(yylineno, currentModule);
 		ct->type = ACT_EL_EXT;
 		CONSTRAINT_INSERT($$, ACT_CA_CSV, $1, ct);
 	}
 	| ElementSetSpec ',' TOK_ThreeDots ',' ElementSetSpec {
 		asn1p_constraint_t *ct;
-		ct = asn1p_constraint_new(yylineno);
+		ct = asn1p_constraint_new(yylineno, currentModule);
 		ct->type = ACT_EL_EXT;
 		CONSTRAINT_INSERT($$, ACT_CA_CSV, $1, ct);
 		ct = $$;
 		CONSTRAINT_INSERT($$, ACT_CA_CSV, ct, $5);
 	}
-	| GeneralConstraint {
-		$$ = $1;
-	}
 	;
 
 ElementSetSpec:
@@ -1792,7 +1799,7 @@
 ConstraintSubtypeElement:
 	ConstraintSpec '(' ElementSetSpecs ')' {
 		int ret;
-		$$ = asn1p_constraint_new(yylineno);
+		$$ = asn1p_constraint_new(yylineno, currentModule);
 		checkmem($$);
 		$$->type = $1;
 		ret = asn1p_constraint_insert($$, $3);
@@ -1800,33 +1807,33 @@
 	}
 	| '(' ElementSetSpecs ')' {
 		int ret;
-		$$ = asn1p_constraint_new(yylineno);
+		$$ = asn1p_constraint_new(yylineno, currentModule);
 		checkmem($$);
 		$$->type = ACT_CA_SET;
 		ret = asn1p_constraint_insert($$, $2);
 		checkmem(ret == 0);
 	}
 	| SingleValue {
-		$$ = asn1p_constraint_new(yylineno);
+		$$ = asn1p_constraint_new(yylineno, currentModule);
 		checkmem($$);
 		$$->type = ACT_EL_VALUE;
 		$$->value = $1;
 	}
 	| ContainedSubtype {
-		$$ = asn1p_constraint_new(yylineno);
+		$$ = asn1p_constraint_new(yylineno, currentModule);
 		checkmem($$);
 		$$->type = ACT_EL_TYPE;
 		$$->containedSubtype = $1;
 	}
 	| SingleValue ConstraintRangeSpec SingleValue {
-		$$ = asn1p_constraint_new(yylineno);
+		$$ = asn1p_constraint_new(yylineno, currentModule);
 		checkmem($$);
 		$$->type = $2;
 		$$->range_start = $1;
 		$$->range_stop = $3;
 	}
 	| TOK_MIN ConstraintRangeSpec SingleValue {
-		$$ = asn1p_constraint_new(yylineno);
+		$$ = asn1p_constraint_new(yylineno, currentModule);
 		checkmem($$);
 		$$->type = $2;
 		$$->range_start = asn1p_value_fromint(-123);
@@ -1834,7 +1841,7 @@
 		$$->range_start->type = ATV_MIN;
 	}
 	| SingleValue ConstraintRangeSpec TOK_MAX {
-		$$ = asn1p_constraint_new(yylineno);
+		$$ = asn1p_constraint_new(yylineno, currentModule);
 		checkmem($$);
 		$$->type = $2;
 		$$->range_start = $1;
@@ -1842,7 +1849,7 @@
 		$$->range_stop->type = ATV_MAX;
 	}
 	| TOK_MIN ConstraintRangeSpec TOK_MAX {
-		$$ = asn1p_constraint_new(yylineno);
+		$$ = asn1p_constraint_new(yylineno, currentModule);
 		checkmem($$);
 		$$->type = $2;
 		$$->range_start = asn1p_value_fromint(-123);
@@ -1856,19 +1863,26 @@
 	| PatternConstraint {
 		$$ = $1;
 	}
+	| '{' { asn1p_lexer_hack_push_opaque_state(); } Opaque /* '}' */ {
+		$$ = asn1p_constraint_new(yylineno, currentModule);
+		checkmem($$);
+		$$->type = ACT_EL_VALUE;
+		$$->value = asn1p_value_frombuf($3.buf, $3.len, 0);
+		$$->value->type = ATV_UNPARSED;
+	}
 	;
 
 PatternConstraint:
 	TOK_PATTERN TOK_cstring {
-		$$ = asn1p_constraint_new(yylineno);
+		$$ = asn1p_constraint_new(yylineno, currentModule);
 		$$->type = ACT_CT_PATTERN;
 		$$->value = asn1p_value_frombuf($2.buf, $2.len, 0);
 	}
 	| TOK_PATTERN Identifier {
 		asn1p_ref_t *ref;
-		$$ = asn1p_constraint_new(yylineno);
+		$$ = asn1p_constraint_new(yylineno, currentModule);
 		$$->type = ACT_CT_PATTERN;
-		ref = asn1p_ref_new(yylineno);
+		ref = asn1p_ref_new(yylineno, currentModule);
 		asn1p_ref_add_component(ref, $2, RLT_lowercase);
 		$$->value = asn1p_value_fromref(ref, 0);
 		free($2);
@@ -1901,7 +1915,7 @@
 	| Identifier {
 		asn1p_ref_t *ref;
 		int ret;
-		ref = asn1p_ref_new(yylineno);
+		ref = asn1p_ref_new(yylineno, currentModule);
 		checkmem(ref);
 		ret = asn1p_ref_add_component(ref, $1, RLT_lowercase);
 		checkmem(ret == 0);
@@ -1925,10 +1939,15 @@
 	;
 
 ContainedSubtype:
+	ComplexTypeReference {
+		$$ = asn1p_value_fromref($1, 0);
+		checkmem($$);
+	}
+/*
 	TypeRefName {
 		asn1p_ref_t *ref;
 		int ret;
-		ref = asn1p_ref_new(yylineno);
+		ref = asn1p_ref_new(yylineno, currentModule);
 		checkmem(ref);
 		ret = asn1p_ref_add_component(ref, $1, RLT_UNKNOWN);
 		checkmem(ret == 0);
@@ -1936,6 +1955,7 @@
 		checkmem($$);
 		free($1);
 	}
+*/
 	;
 
 InnerTypeConstraint:
@@ -1958,13 +1978,13 @@
 
 WithComponentsElement:
 	TOK_ThreeDots {
-		$$ = asn1p_constraint_new(yylineno);
+		$$ = asn1p_constraint_new(yylineno, currentModule);
 		checkmem($$);
 		$$->type = ACT_EL_EXT;
 		$$->value = asn1p_value_frombuf("...", 3, 1);
 	}
 	| Identifier optConstraints optPresenceConstraint {
-		$$ = asn1p_constraint_new(yylineno);
+		$$ = asn1p_constraint_new(yylineno, currentModule);
 		checkmem($$);
 		$$->type = ACT_EL_VALUE;
 		$$->value = asn1p_value_frombuf($1, strlen($1), 0);
@@ -2004,7 +2024,7 @@
 UserDefinedConstraint:
 	TOK_CONSTRAINED TOK_BY '{'
 		{ asn1p_lexer_hack_push_opaque_state(); } Opaque /* '}' */ {
-		$$ = asn1p_constraint_new(yylineno);
+		$$ = asn1p_constraint_new(yylineno, currentModule);
 		checkmem($$);
 		$$->type = ACT_CT_CTDBY;
 		$$->value = asn1p_value_frombuf($5.buf, $5.len, 0);
@@ -2015,7 +2035,7 @@
 
 ContentsConstraint:
 	TOK_CONTAINING Type {
-		$$ = asn1p_constraint_new(yylineno);
+		$$ = asn1p_constraint_new(yylineno, currentModule);
 		$$->type = ACT_CT_CTNG;
 		$$->value = asn1p_value_fromtype($2);
 		asn1p_expr_free($2);
@@ -2042,12 +2062,12 @@
  */
 SimpleTableConstraint:
 	'{' TypeRefName '}' {
-		asn1p_ref_t *ref = asn1p_ref_new(yylineno);
+		asn1p_ref_t *ref = asn1p_ref_new(yylineno, currentModule);
 		asn1p_constraint_t *ct;
 		int ret;
 		ret = asn1p_ref_add_component(ref, $2, 0);
 		checkmem(ret == 0);
-		ct = asn1p_constraint_new(yylineno);
+		ct = asn1p_constraint_new(yylineno, currentModule);
 		checkmem($$);
 		ct->type = ACT_EL_VALUE;
 		ct->value = asn1p_value_fromref(ref, 0);
@@ -2064,14 +2084,14 @@
 
 AtNotationList:
 	AtNotationElement {
-		$$ = asn1p_constraint_new(yylineno);
+		$$ = asn1p_constraint_new(yylineno, currentModule);
 		checkmem($$);
 		$$->type = ACT_EL_VALUE;
 		$$->value = asn1p_value_fromref($1, 0);
 	}
 	| AtNotationList ',' AtNotationElement {
 		asn1p_constraint_t *ct;
-		ct = asn1p_constraint_new(yylineno);
+		ct = asn1p_constraint_new(yylineno, currentModule);
 		checkmem(ct);
 		ct->type = ACT_EL_VALUE;
 		ct->value = asn1p_value_fromref($3, 0);
@@ -2088,7 +2108,7 @@
 		int ret;
 		*p = '@';
 		strcpy(p + 1, $2);
-		$$ = asn1p_ref_new(yylineno);
+		$$ = asn1p_ref_new(yylineno, currentModule);
 		ret = asn1p_ref_add_component($$, p, 0);
 		checkmem(ret == 0);
 		free(p);
@@ -2100,7 +2120,7 @@
 		p[0] = '@';
 		p[1] = '.';
 		strcpy(p + 2, $3);
-		$$ = asn1p_ref_new(yylineno);
+		$$ = asn1p_ref_new(yylineno, currentModule);
 		ret = asn1p_ref_add_component($$, p, 0);
 		checkmem(ret == 0);
 		free(p);
