diff --git a/libasn1fix/asn1fix_param.c b/libasn1fix/asn1fix_param.c
index 8c9ce41..ba624cb 100644
--- a/libasn1fix/asn1fix_param.c
+++ b/libasn1fix/asn1fix_param.c
@@ -59,33 +59,53 @@
 }
 
 #define	SUBSTITUTE(to, from)	do {				\
-		asn1p_expr_t tmp, *__v;				\
-		if((to)->tag.tag_class				\
-		&& (from)->tag.tag_class) {			\
-			FATAL("Layered tagging "		\
-			"in parametrization "			\
-			"is not yet supported, "		\
-			"contact asn1c author for");		\
-			return -1;				\
+	asn1p_expr_t tmp, *__v;					\
+	if((to)->tag.tag_class					\
+	&& (from)->tag.tag_class) {				\
+		FATAL("Layered tagging in parametrization "	\
+		"is not yet supported, "			\
+		"contact asn1c author for assistance with");	\
+		return -1;					\
+	}							\
+	/* This code shall not be invoked too early */		\
+	assert((to)->combined_constraints == NULL);		\
+	assert((from)->combined_constraints == NULL);		\
+	/* Copy stuff, and merge some parameters */		\
+	tmp = *(to);						\
+	*(to) = *(from);					\
+	TQ_MOVE(&(to)->members, &(from)->members);		\
+	*(from) = tmp;						\
+	(to)->next = tmp.next;					\
+	(to)->parent_expr = tmp.parent_expr;			\
+	assert((to)->marker.flags == EM_NOMARK);		\
+	(to)->marker = tmp.marker;				\
+	if(tmp.tag.tag_class)					\
+		(to)->tag = tmp.tag;				\
+	if(tmp.constraints) {					\
+		if((to)->constraints) {				\
+			asn1p_constraint_t *ct;			\
+			ct = asn1p_constraint_new(		\
+				(to)->constraints->_lineno);	\
+			ct->type = ACT_CA_SET;			\
+			asn1p_constraint_insert(ct,		\
+				(to)->constraints);		\
+			asn1p_constraint_insert(ct,		\
+				tmp.constraints);		\
+			(to)->constraints = ct;			\
+		} else {					\
+			(to)->constraints = tmp.constraints;	\
 		}						\
-		tmp = *(to);					\
-		*(to) = *(from);				\
-		TQ_MOVE(&(to)->members, &(from)->members);	\
-		*(from) = tmp;					\
-		(to)->next = tmp.next;				\
-		(to)->parent_expr = tmp.parent_expr;		\
-		if(tmp.tag.tag_class)				\
-			(to)->tag = tmp.tag;			\
-		memset(&((from)->next), 0,			\
-			sizeof((from)->next));			\
-		memset(&((from)->members), 0,			\
-			sizeof((from)->members));		\
-		asn1p_expr_free(from);				\
-		TQ_FOR(__v, &((to)->members), next) {		\
-			assert(__v->parent_expr == (from));	\
-			__v->parent_expr = (to);		\
-		}						\
-	} while(0)
+	}							\
+	(from)->constraints = 0;				\
+	(from)->marker.default_value = 0;			\
+	memset(&((from)->next), 0, sizeof((from)->next));	\
+	memset(&((from)->members), 0, sizeof((from)->members));	\
+	asn1p_expr_free(from);					\
+	TQ_FOR(__v, &((to)->members), next) {			\
+		assert(__v->parent_expr == (from));		\
+		__v->parent_expr = (to);			\
+	}							\
+} while(0)
 
 static int
 asn1f_parametrize(arg_t *arg, asn1p_expr_t *expr, asn1p_expr_t *ptype) {
