diff --git a/libraries/technology/eth_10g/tech_eth_10g_arria10.vhd b/libraries/technology/eth_10g/tech_eth_10g_arria10.vhd
index e859ef884697bc098f7fe0ecbf81845576d45323..7a2601ad45c1485d3e5b2b332f8ccdff3f297452 100644
--- a/libraries/technology/eth_10g/tech_eth_10g_arria10.vhd
+++ b/libraries/technology/eth_10g/tech_eth_10g_arria10.vhd
@@ -41,11 +41,13 @@ USE common_lib.common_pkg.ALL;
 USE common_lib.common_mem_pkg.ALL;
 USE common_lib.common_interface_layers_pkg.ALL;
 USE dp_lib.dp_stream_pkg.ALL;
+USE tech_mac_10g_lib.tech_mac_10g_component_pkg.ALL;
 
 ENTITY tech_eth_10g_arria10 IS
   GENERIC (
     g_sim                 : BOOLEAN := FALSE;
     g_nof_channels        : NATURAL := 1;
+    g_link_status_check   : STD_LOGIC_VECTOR(c_tech_mac_10g_link_status_w-1 DOWNTO 0) := "11";
     g_pre_header_padding  : BOOLEAN := FALSE
   );
   PORT (
@@ -80,13 +82,33 @@ END tech_eth_10g_arria10;
 
 ARCHITECTURE str OF tech_eth_10g_arria10 IS
 
+  -- XON control
+  SIGNAL mac_snk_out_arr       : t_dp_siso_arr(g_nof_channels-1 DOWNTO 0);
+  
   -- XGMII
-  SIGNAL xgmii_tx_dc_arr    : t_xgmii_dc_arr(g_nof_channels-1 DOWNTO 0);  -- 72 bit
-  SIGNAL xgmii_rx_dc_arr    : t_xgmii_dc_arr(g_nof_channels-1 DOWNTO 0);  -- 72 bit
+  SIGNAL xgmii_link_status_arr : t_tech_mac_10g_xgmii_status_arr(g_nof_channels-1 DOWNTO 0);  -- 2 bit, from MAC_10g
+  SIGNAL xgmii_tx_ready_arr    : STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);                 -- 1 bit, from PHY 10gbase_r
+  SIGNAL xgmii_tx_dc_arr       : t_xgmii_dc_arr(g_nof_channels-1 DOWNTO 0);    -- 72 bit
+  SIGNAL xgmii_rx_dc_arr       : t_xgmii_dc_arr(g_nof_channels-1 DOWNTO 0);    -- 72 bit
 
 BEGIN
                    
   gen_mac : FOR I IN 0 TO g_nof_channels-1 GENERATE
+  
+    tx_snk_out_arr(I).ready <= mac_snk_out_arr(I).ready;  -- pass on MAC cycle accurate backpressure
+    
+    p_xon_flow_control : PROCESS(clk_156)
+      VARIABLE v_xgmii_link_status : STD_LOGIC_VECTOR(c_tech_mac_10g_link_status_w-1 DOWNTO 0);
+    BEGIN
+      IF rising_edge(clk_156) THEN
+        tx_snk_out_arr(I).xon <= '0';
+        v_xgmii_link_status := xgmii_link_status_arr(I) AND g_link_status_check;  -- use mask to check Tx, Rx, both or none. 
+        IF xgmii_tx_ready_arr(I)='1' AND v_xgmii_link_status="00" THEN
+          tx_snk_out_arr(I).xon <= '1';  -- XON when Tx PHY is ready and XGMII is ok
+        END IF;
+      END IF;
+    END PROCESS;
+    
     u_tech_mac_10g : ENTITY tech_mac_10g_lib.tech_mac_10g
     GENERIC MAP (
       g_technology          => c_tech_arria10,
@@ -94,27 +116,28 @@ BEGIN
     )
     PORT MAP (
       -- MM
-      mm_clk           => mm_clk,
-      mm_rst           => mm_rst,
-      csr_mosi         => mac_mosi_arr(I),
-      csr_miso         => mac_miso_arr(I),
+      mm_clk            => mm_clk,
+      mm_rst            => mm_rst,
+      csr_mosi          => mac_mosi_arr(I),
+      csr_miso          => mac_miso_arr(I),
   
       -- ST
-      tx_clk_312       => clk_312,
-      tx_clk_156       => clk_156,
-      tx_rst           => rst_156,
-      tx_snk_in        => tx_snk_in_arr(I),   -- 64 bit data
-      tx_snk_out       => tx_snk_out_arr(I),
+      tx_clk_312        => clk_312,
+      tx_clk_156        => clk_156,
+      tx_rst            => rst_156,
+      tx_snk_in         => tx_snk_in_arr(I),   -- 64 bit data
+      tx_snk_out        => mac_snk_out_arr(I),
       
-      rx_clk_312       => clk_312,
-      rx_clk_156       => clk_156,
-      rx_rst           => rst_156,
-      rx_src_out       => rx_src_out_arr(I),  -- 64 bit data
-      rx_src_in        => rx_src_in_arr(I),
+      rx_clk_312        => clk_312,
+      rx_clk_156        => clk_156,
+      rx_rst            => rst_156,
+      rx_src_out        => rx_src_out_arr(I),  -- 64 bit data
+      rx_src_in         => rx_src_in_arr(I),
             
       -- XGMII
-      xgmii_tx_data    => xgmii_tx_dc_arr(I),
-      xgmii_rx_data    => xgmii_rx_dc_arr(I)
+      xgmii_link_status => xgmii_link_status_arr(I),
+      xgmii_tx_data     => xgmii_tx_dc_arr(I),
+      xgmii_rx_data     => xgmii_rx_dc_arr(I)
     );
   END GENERATE;
   
@@ -133,6 +156,7 @@ BEGIN
     rst_156            => rst_156,
 
     -- XGMII interface
+    xgmii_tx_ready_arr => xgmii_tx_ready_arr,
     xgmii_tx_dc_arr    => xgmii_tx_dc_arr,
     xgmii_rx_dc_arr    => xgmii_rx_dc_arr,