diff --git a/src/xsvf/xsvf.c b/src/xsvf/xsvf.c
index 24a14de72f03dfea3b51e06ccd80f930deb504e4..0e3152daa61ecdb2c8a65a7b268fa9f544d12584 100644
--- a/src/xsvf/xsvf.c
+++ b/src/xsvf/xsvf.c
@@ -501,16 +501,18 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
 					field.tap = tap;
 					field.num_bits = xsdrsize;
 					field.out_value = dr_out_buf;
-					
-					field.in_value = NULL;
-
-					jtag_set_check_value(&field, dr_in_buf, dr_in_mask, NULL);
+					field.in_value = calloc(CEIL(field.num_bits, 8), 1);
 
 					if (tap == NULL)
 						jtag_add_plain_dr_scan(1, &field, TAP_DRPAUSE);
 					else
 						jtag_add_dr_scan(1, &field, TAP_DRPAUSE);
 
+					jtag_check_value_mask(&field, dr_in_buf, dr_in_mask);
+
+					free(field.in_value);
+
+
 					/* LOG_DEBUG("FLUSHING QUEUE"); */
 					result = jtag_execute_queue();
 					if (result == ERROR_OK)
@@ -713,10 +715,10 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
 					field.tap = tap;
 					field.num_bits = bitcount;
 					field.out_value = ir_buf;
-					
+
 					field.in_value = NULL;
-					
-					
+
+
 					field.in_handler = NULL;
 
 					if (tap == NULL)
@@ -944,18 +946,21 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
 					field.tap = tap;
 					field.num_bits = xsdrsize;
 					field.out_value = dr_out_buf;
-					
-					field.in_value = NULL;
+					field.in_value = calloc(CEIL(field.num_bits, 8), 1);
 
 					if (attempt > 0 && verbose)
 						LOG_USER("LSDR retry %d", attempt);
 
-					jtag_set_check_value(&field, dr_in_buf, dr_in_mask, NULL);
 					if (tap == NULL)
 						jtag_add_plain_dr_scan(1, &field, TAP_DRPAUSE);
 					else
 						jtag_add_dr_scan(1, &field, TAP_DRPAUSE);
 
+					jtag_check_value_mask(&field, dr_in_buf, dr_in_mask);
+
+					free(field.in_value);
+
+
 					/* LOG_DEBUG("FLUSHING QUEUE"); */
 					result = jtag_execute_queue();
 					if(result == ERROR_OK)