diff --git a/skeletons/constr_SEQUENCE.c b/skeletons/constr_SEQUENCE.c
index 4267d84..a0d81a1 100644
--- a/skeletons/constr_SEQUENCE.c
+++ b/skeletons/constr_SEQUENCE.c
@@ -1058,26 +1058,27 @@
 typedef struct uper_ugot_key {
 	asn_per_data_t oldpd;	/* Old per data source */
 	size_t unclaimed;
+	size_t ot_moved;	/* Number of bits moved by OT processing */
 	int repeat;
 } uper_ugot_key;
 static int
 uper_ugot_refill(asn_per_data_t *pd) {
 	uper_ugot_key *arg = pd->refill_key;
 	ssize_t next_chunk_bytes, next_chunk_bits;
-	ssize_t consumed;
 	ssize_t avail;
 
 	asn_per_data_t *oldpd = &arg->oldpd;
 
-	/* Advance our position to where pd is */
-	consumed = (pd->buffer - oldpd->buffer) << 3;
-	ASN_DEBUG("REFILLING [consumed: %d bits from %d (%d->%d)] now [%d (%d->%d)] uncl %d",
-		consumed,
+	ASN_DEBUG("REFILLING [from %d (%d->%d)] now [%d (%d->%d)] uncl %d",
 		oldpd->nbits - oldpd->nboff, oldpd->nboff, oldpd->nbits,
 		pd->nbits - pd->nboff, pd->nboff, pd->nbits, arg->unclaimed);
-	oldpd->nbits -= consumed;
+
+	/* Advance our position to where pd is */
 	oldpd->buffer = pd->buffer;
-	oldpd->nboff = pd->nboff;
+	oldpd->nboff  = pd->nboff;
+	oldpd->nbits -= pd->moved - arg->ot_moved;
+	oldpd->moved += pd->moved - arg->ot_moved;
+	arg->ot_moved = pd->moved;
 
 	if(arg->unclaimed) {
 		/* Refill the container */
@@ -1090,7 +1091,6 @@
 		pd->buffer = oldpd->buffer;
 		pd->nboff = oldpd->nboff - 1;
 		pd->nbits = oldpd->nbits;
-		pd->moved = oldpd->moved - 1;
 		ASN_DEBUG("====================");
 		return 0;
 	}
@@ -1104,13 +1104,13 @@
 	ASN_DEBUG("Open type LENGTH %d bytes, old %d (%d->%d) repeat %d",
 		next_chunk_bytes, oldpd->nbits - oldpd->nboff, oldpd->nboff, oldpd->nbits, arg->repeat);
 	if(next_chunk_bytes < 0) return -1;
-	assert(next_chunk_bytes || !arg->repeat);
-	if(next_chunk_bytes == 0)
+	if(next_chunk_bytes == 0) {
 		pd->refill = 0;	/* No more refills, naturally */
+		assert(!arg->repeat);	/* Implementation guarantee */
+	}
 	pd->buffer = oldpd->buffer;
 	pd->nboff = oldpd->nboff;
 	pd->nbits = oldpd->nbits;
-	pd->moved = oldpd->moved;
 	next_chunk_bits = next_chunk_bytes << 3;
 	avail = pd->nbits - pd->nboff;
 	ASN_DEBUG("now at %d bits, want %d, avail %d",
@@ -1139,11 +1139,12 @@
 
 	ASN_DEBUG("Getting open type from %d bits (%d+%d), %p", pd->nbits - pd->nboff, pd->nboff, pd->nbits, pd->buffer);
 	arg.oldpd = *pd;
+	arg.unclaimed = 0;
+	arg.ot_moved = 0;
+	arg.repeat = 1;
 	pd->refill = uper_ugot_refill;
 	pd->refill_key = &arg;
 	pd->nbits = pd->nboff;	/* 0 bits at this point, wait for refill */
-	arg.unclaimed = 0;
-	arg.repeat = 1;
 
 	rv = td->uper_decoder(opt_codec_ctx, td, constraints, sptr, pd);
 
@@ -1163,6 +1164,7 @@
 	}
 
 	ASN_DEBUG("nboff = %d, nbits %d, padding = %d, plus %d/%p", pd->nboff, pd->nbits, padding, pd->buffer - arg.oldpd.buffer, arg.oldpd.buffer);
+	ASN_DEBUG("Getting padding of %d bits", padding);
 	switch(per_get_few_bits(pd, padding)) {
 	case -1:
 		ASN_DEBUG("Padding skip failed");
@@ -1177,7 +1179,7 @@
 
 	/* Skip data not consumed by the decoder */
 	while(arg.unclaimed) {
-		int toget = 24;
+		size_t toget = 24;
 		if(arg.unclaimed < toget)
 			toget = arg.unclaimed;
 		arg.unclaimed -= toget;
