diff --git a/modules/wrsw_swcore/xswc_output_block_new.vhd b/modules/wrsw_swcore/xswc_output_block_new.vhd
index 67ea3b7cc4bebb60a145f8800821e24c098164b8..63a410fc7d4fa26e82ebded1f30ac8662e6477fc 100644
--- a/modules/wrsw_swcore/xswc_output_block_new.vhd
+++ b/modules/wrsw_swcore/xswc_output_block_new.vhd
@@ -284,6 +284,7 @@ architecture behavoural of xswc_output_block_new is
   signal cycle_frozen_cnt : unsigned(9 downto 0);
 
   signal current_tx_prio : std_logic_vector(g_queue_num - 1 downto 0);
+  signal new_tx_prio     : std_logic_vector(g_queue_num - 1 downto 0);
   
   signal hp_prio_mask    : std_logic_vector(g_queue_num - 1 downto 0);
   signal zero_prio_mask  : std_logic_vector(g_queue_num - 1 downto 0);
@@ -570,19 +571,23 @@ begin  --  behavoural
   begin
     if rising_edge(clk_i) then
       if(rst_n_i = '0') then
-        current_tx_prio <= (others => '0');
+        new_tx_prio <= (others => '0');
       else
         if(rd_valid = '1') then
-          current_tx_prio <= read_array;
+          new_tx_prio <= rd_array;
         elsif((s_send_pck = S_EOF) and (s_prep_to_send = S_IDLE)) then
-          current_tx_prio <= (others => '0');
+          new_tx_prio <= (others => '0');
         end if;
       end if;
     end if;
   end process p_track_tx_prio;
   
   -- deciding whether to drop currently tx-ed frame
-  hp_in_queuing  <= '1' when ((read_array      and      hp_prio_mask)  /= zero_prio_mask) else '0';
+  hp_in_queuing  <= '1' when ((read_array      and      hp_prio_mask)  /= zero_prio_mask) else
+                    '1' when ((new_tx_prio     and      hp_prio_mask)  /= zero_prio_mask) else
+                    --'1' when ((new_tx_prio and hp_prio_mask) /= zero_prio_mask and (new_tx_prio /= current_tx_prio)) else
+                    '0';
+  --non_hp_txing   <= '1' when ((new_tx_prio and (not hp_prio_mask)) /= zero_prio_mask) else '0';
   non_hp_txing   <= '1' when ((current_tx_prio and (not hp_prio_mask)) /= zero_prio_mask) else '0';
                              
   abord_tx_at_hp <= non_hp_txing  and   -- we are currently sending frame which is not HP
@@ -661,7 +666,7 @@ begin  --  behavoural
           --===========================================================================================
           when S_NEWPCK_PAGE_SET_IN_ADVANCE =>
           --===========================================================================================        
-            if(request_retry = '1') then
+            if(request_retry = '1' or (abord_tx_at_hp = '1' and mpm_pg_req_i = '0')) then
               mpm_abort                   <= '1';
               s_prep_to_send              <= S_RETRY_PREPARE;
               mpm_pg_addr_memorized_valid <= '1';
@@ -701,7 +706,13 @@ begin  --  behavoural
           when S_RETRY_PREPARE =>
           --=========================================================================================== 
             if(mpm_pg_req_i = '1') then
-              mpm_pg_addr    <= pck_start_pgaddr;
+              --mpm_pg_addr    <= pck_start_pgaddr;
+              if(mpm_pg_addr_memorized_valid = '1') then
+                mpm_pg_addr    <= mpm_pg_addr_memorized;
+                mpm_pg_addr_memorized_valid <= '0';
+              else
+                mpm_pg_addr    <= pck_start_pgaddr;
+              end if;
               mpm_pg_valid   <= '1';
               s_prep_to_send <= S_RETRY_READY;
             end if;
@@ -760,6 +771,7 @@ begin  --  behavoural
         tmp_dat             <= (others => '0');
         tmp_sel             <= (others => '0');
         page_set_in_advance <= '0';
+        current_tx_prio     <= (others => '0');
         --========================================
       else
         -- default values
@@ -773,10 +785,12 @@ begin  --  behavoural
           when S_IDLE =>
           --===========================================================================================   
 
-            if(s_prep_to_send = S_NEWPCK_PAGE_READY and src_i.err = '0' and src_i.stall = '0' and ifg_count = x"0") then
+            if((s_prep_to_send = S_NEWPCK_PAGE_READY or s_prep_to_send = S_RETRY_READY)
+                and src_i.err = '0' and src_i.stall = '0' and ifg_count = x"0") then
               src_out_int.cyc  <= '1';
               s_send_pck       <= S_DATA;
               pck_start_pgaddr <= mpm_pg_addr;
+              current_tx_prio  <= new_tx_prio;
             end if;
 
             --===========================================================================================
@@ -866,7 +880,9 @@ begin  --  behavoural
                 src_out_int.cyc  <= '1';
                 s_send_pck       <= S_DATA;
                 pck_start_pgaddr <= mpm_pg_addr;
+                current_tx_prio  <= new_tx_prio;
               else
+                current_tx_prio <= (others=>'0');
                 s_send_pck <= S_IDLE;
               end if;
             else
@@ -891,7 +907,9 @@ begin  --  behavoural
                 src_out_int.cyc  <= '1';
                 s_send_pck       <= S_DATA;
                 pck_start_pgaddr <= mpm_pg_addr;
+                current_tx_prio  <= new_tx_prio;
               else
+                current_tx_prio  <= (others=>'0');
                 s_send_pck <= S_IDLE;
               end if;
             end if;