diff --git a/asn1c/tests/check-126.-gen-PER.c b/asn1c/tests/check-126.-gen-PER.c
index 5df2c789a217914dfa41e381c29b471b288b470f..eac2793d097aaf8c7c0ccdc39b8b249b06f8bbe8 100644
--- a/asn1c/tests/check-126.-gen-PER.c
+++ b/asn1c/tests/check-126.-gen-PER.c
@@ -224,8 +224,12 @@ compare_with_data_out(const char *fname, char *buf, int size) {
 
 	fprintf(stderr, "Comparing PER output with [%s]\n", outName);
 
-	f = fopen(outName, "r");
-	if(f) {
+	if(getenv("REGENERATE")) {
+		f = fopen(outName, "w");
+		fwrite(buf, 1, size, f);
+		fclose(f);
+	} else {
+		f = fopen(outName, "r");
 		assert(f);
 		rd = fread(fbuf, 1, sizeof(fbuf), f);
 		assert(rd);
@@ -234,10 +238,6 @@ compare_with_data_out(const char *fname, char *buf, int size) {
 		assert(rd == size);
 		assert(memcmp(fbuf, buf, rd) == 0);
 		fprintf(stderr, "XER->PER recoding .in->.out match.\n");
-	} else if(getenv("REGENERATE")) {
-		f = fopen(outName, "w");
-		fwrite(buf, 1, size, f);
-		fclose(f);
 	}
 }
 
diff --git a/asn1c/tests/data-126/data-126-01.out b/asn1c/tests/data-126/data-126-01.out
new file mode 100644
index 0000000000000000000000000000000000000000..0f23c822888fda0c6adba98531da0515d72fa2b0
Binary files /dev/null and b/asn1c/tests/data-126/data-126-01.out differ
diff --git a/skeletons/constr_SEQUENCE.c b/skeletons/constr_SEQUENCE.c
index a6d12fa2e5981476c249c12cb7d534b3da4b35a5..9f870f75b5c410af628ecc565ca679d177ef9ff8 100644
--- a/skeletons/constr_SEQUENCE.c
+++ b/skeletons/constr_SEQUENCE.c
@@ -1170,9 +1170,11 @@ uper_put_open_type(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints
 	void *buf;
 	ssize_t size;
 
+	ASN_DEBUG("Encoding as open type %s", td->name);
 	size = uper_encode_to_new_buffer(td, constraints, sptr, &buf);
 	if(size <= 0) return -1;
 
+	ASN_DEBUG("Putting %s of length %d", td->name, size);
 	while(size) {
 		ssize_t maySave = uper_put_length(po, size);
 		if(maySave < 0) break;
@@ -1194,7 +1196,8 @@ SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr,
 		asn_per_outp_t *po1, asn_per_outp_t *po2) {
 	asn_SEQUENCE_specifics_t *specs
 		= (asn_SEQUENCE_specifics_t *)td->specifics;
-	int num = 0;
+	int exts_present = 0;
+	int exts_count = 0;
 	int edx;
 
 	if(specs->ext_before < 0)
@@ -1207,8 +1210,10 @@ SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr,
 		void **memb_ptr2;	/* Pointer to that pointer */
 		int present;
 
-		if(!IN_EXTENSION_GROUP(specs, edx))
+		if(!IN_EXTENSION_GROUP(specs, edx)) {
+			ASN_DEBUG("%d is not extension", edx);
 			continue;
+		}
 
 		/* Fetch the pointer to this member */
 		if(elm->flags & ATF_POINTER) {
@@ -1221,7 +1226,8 @@ SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr,
 		}
 
 		ASN_DEBUG("checking ext %d is present => %d", edx, present);
-		num += present;
+		exts_count++;
+		exts_present += present;
 
 		/* Encode as presence marker */
 		if(po1 && per_put_few_bits(po1, present, 1))
@@ -1233,7 +1239,7 @@ SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr,
 
 	}
 
-	return num;
+	return exts_present ? exts_count : 0;
 }
 
 asn_enc_rval_t