cmd_queue_pages = NULL;
 }
 
-void jtag_add_ir_scan(int num_fields, scan_field_t *fields, enum tap_state state)
+static void jtag_prelude1()
 {
        if (jtag_trst == 1)
        {
                return;
        }
 
-       if (state != -1)
-               cmd_queue_end_state = state;
-
        if (cmd_queue_end_state == TAP_TLR)
                jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
+}
+
+static void jtag_prelude(enum tap_state state)
+{
+       jtag_prelude1();
        
+       if (state != -1)
+               cmd_queue_end_state = state;
+
        cmd_queue_cur_state = cmd_queue_end_state;
+}
+
+void jtag_add_ir_scan(int num_fields, scan_field_t *fields, enum tap_state state)
+{
+       jtag_prelude(state);
        
        int retval=interface_jtag_add_ir_scan(num_fields, fields, cmd_queue_end_state);
        if (retval!=ERROR_OK)
 
 void jtag_add_plain_ir_scan(int num_fields, scan_field_t *fields, enum tap_state state)
 {
-       if (jtag_trst == 1)
-       {
-               WARNING("JTAG command queued, while TRST is low (TAP in reset)");
-               jtag_error=ERROR_JTAG_TRST_ASSERTED;
-               return;
-       }
-
-       if (state != -1)
-               cmd_queue_end_state = state;
-
-       if (cmd_queue_end_state == TAP_TLR)
-               jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
-               
-       cmd_queue_cur_state = cmd_queue_end_state;
+       jtag_prelude(state);
        
        int retval=interface_jtag_add_plain_ir_scan(num_fields, fields, cmd_queue_end_state);
        if (retval!=ERROR_OK)
 
 void jtag_add_dr_scan(int num_fields, scan_field_t *fields, enum tap_state state)
 {
-       if (jtag_trst == 1)
-       {
-               WARNING("JTAG command queued, while TRST is low (TAP in reset)");
-               jtag_error=ERROR_JTAG_TRST_ASSERTED;
-               return;
-       }
-
-       if (state != -1)
-               cmd_queue_end_state = state;
-
-       if (cmd_queue_end_state == TAP_TLR)
-               jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
-                       
-       cmd_queue_cur_state = cmd_queue_end_state;
+       jtag_prelude(state);
 
        int retval=interface_jtag_add_dr_scan(num_fields, fields, cmd_queue_end_state);
        if (retval!=ERROR_OK)
 
 void jtag_add_plain_dr_scan(int num_fields, scan_field_t *fields, enum tap_state state)
 {
-       if (jtag_trst == 1)
-       {
-               WARNING("JTAG command queued, while TRST is low (TAP in reset)");
-               jtag_error=ERROR_JTAG_TRST_ASSERTED;
-               return;
-       }
-
-       if (state != -1)
-               cmd_queue_end_state = state;
-
-       if (cmd_queue_end_state == TAP_TLR)
-               jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
-                       
-       cmd_queue_cur_state = cmd_queue_end_state;
+       jtag_prelude(state);
 
        int retval=interface_jtag_add_plain_dr_scan(num_fields, fields, cmd_queue_end_state);
        if (retval!=ERROR_OK)
 }
 void jtag_add_statemove(enum tap_state state)
 {
-       if (jtag_trst == 1)
-       {
-               WARNING("JTAG command queued, while TRST is low (TAP in reset)");
-               jtag_error=ERROR_JTAG_TRST_ASSERTED;
-               return;
-       }
-
-       if (state != -1)
-               cmd_queue_end_state = state;
-
-       if (cmd_queue_end_state == TAP_TLR)
-               jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
-                       
-       cmd_queue_cur_state = cmd_queue_end_state;
+       jtag_prelude(state);
 
        int retval;
        retval=interface_jtag_add_statemove(cmd_queue_end_state);
 
 void jtag_add_pathmove(int num_states, enum tap_state *path)
 {
-       if (jtag_trst == 1)
-       {
-               WARNING("JTAG command queued, while TRST is low (TAP in reset)");
-               jtag_error=ERROR_JTAG_TRST_ASSERTED;
-               return;
-       }
-       
-       if (cmd_queue_end_state == TAP_TLR)
-               jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
-       
        /* the last state has to be a stable state */
        if (tap_move_map[path[num_states - 1]] == -1)
        {
-               ERROR("TAP path doesn't finish in a stable state");
-               jtag_error=ERROR_JTAG_NOT_IMPLEMENTED;
-               return;
+               ERROR("BUG: TAP path doesn't finish in a stable state");
+               exit(-1);
        }
 
        enum tap_state cur_state=cmd_queue_cur_state;
                cur_state = path[i];
        }
        
+       jtag_prelude1();
+       
        cmd_queue_cur_state = path[num_states - 1];
 
        int retval=interface_jtag_add_pathmove(num_states, path);
 
 void jtag_add_runtest(int num_cycles, enum tap_state state)
 {
-       if (jtag_trst == 1)
-       {
-               WARNING("JTAG command queued, while TRST is low (TAP in reset)");
-               jtag_error=ERROR_JTAG_TRST_ASSERTED;
-               return;
-       }
-       
-       if (state != -1)
-               cmd_queue_end_state = state;
-
-       if (cmd_queue_end_state == TAP_TLR)
-               jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
-                       
-       cmd_queue_cur_state = cmd_queue_end_state;
+       jtag_prelude(state);
        
        /* executed by sw or hw fifo */
        int retval=interface_jtag_add_runtest(num_cycles, cmd_queue_end_state);