diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c
index 649ead4654b6e56353d7d13194b248be65702b31..4bc042651648df04d9bbc45b0150454ea2912ac9 100644
--- a/src/jtag/jtag.c
+++ b/src/jtag/jtag.c
@@ -45,6 +45,7 @@
 
 int jtag_flush_queue_count; /* count # of flushes for profiling / debugging purposes */
 
+
 /* note that this is not marked as static as it must be available from outside jtag.c for those
    that implement the jtag_xxx() minidriver layer
 */
@@ -541,7 +542,6 @@ void jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t state)
 	u32 id[8];
 	int modified[8];
 
-
 	/* if we are to run a verification of the ir scan, we need to get the input back.
 	 * We may have to allocate space if the caller didn't ask for the input back.
 	 *
@@ -621,10 +621,13 @@ int MINIDRIVER(interface_jtag_add_ir_scan)(int num_fields, scan_field_t *fields,
 			break;
 		}
 		nth_tap++;
+
+		assert(nth_tap < x );
+
 		scan_size = tap->ir_length;
 		(*last_cmd)->cmd.scan->fields[nth_tap].tap = tap;
 		(*last_cmd)->cmd.scan->fields[nth_tap].num_bits = scan_size;
-		(*last_cmd)->cmd.scan->fields[nth_tap].in_value = fields[nth_tap].in_value;
+		(*last_cmd)->cmd.scan->fields[nth_tap].in_value = NULL; /* do not collect input for tap's in bypass */
 
 		/* search the list */
 		for (j = 0; j < num_fields; j++)
@@ -632,6 +635,7 @@ int MINIDRIVER(interface_jtag_add_ir_scan)(int num_fields, scan_field_t *fields,
 			if (tap == fields[j].tap)
 			{
 				found = 1;
+				(*last_cmd)->cmd.scan->fields[nth_tap].in_value = fields[j].in_value;
 				(*last_cmd)->cmd.scan->fields[nth_tap].out_value = buf_cpy(fields[j].out_value, cmd_queue_alloc(CEIL(scan_size, 8)), scan_size);
 
 				tap->bypass = 0;
@@ -649,6 +653,7 @@ int MINIDRIVER(interface_jtag_add_ir_scan)(int num_fields, scan_field_t *fields,
 		/* update device information */
 		buf_cpy((*last_cmd)->cmd.scan->fields[nth_tap].out_value, tap->cur_instr, scan_size);
 	}
+	assert(nth_tap == (x-1));
 
 	return ERROR_OK;
 }
@@ -1450,7 +1455,7 @@ void jtag_execute_queue_noclear(void)
 	/* each flush can take as much as 1-2ms on high bandwidth low latency interfaces.
 	 * E.g. a JTAG over TCP/IP or USB....
 	 */
-	jtag_flush_queue_count++; 
+	jtag_flush_queue_count++;
 
 	int retval=interface_jtag_execute_queue();
 	/* we keep the first error */