diff --git a/libraries/io/tr_10GbE/src/vhdl/tr_10GbE.vhd b/libraries/io/tr_10GbE/src/vhdl/tr_10GbE.vhd
index c24bea31456171432cf41cd6ef2d4cb5f254ea29..b0735df70e176860bbdac885b0bd4531e2c0bda7 100644
--- a/libraries/io/tr_10GbE/src/vhdl/tr_10GbE.vhd
+++ b/libraries/io/tr_10GbE/src/vhdl/tr_10GbE.vhd
@@ -65,12 +65,12 @@ ENTITY tr_10GbE IS
     g_sim                    : BOOLEAN;
     g_sim_level              : NATURAL := 1; -- 0 = use IP; 1 = use fast serdes model
     g_nof_macs               : NATURAL;
+    g_direction              : STRING := "TX_RX";  -- "TX_RX", "TX_ONLY", "RX_ONLY"
     g_use_mdio               : BOOLEAN := FALSE;
     g_mdio_epcs_dis          : BOOLEAN := FALSE; -- TRUE disables EPCS on init; e.g. to target a 10GbE card in PC that does not support it 
     g_tx_fifo_fill           : NATURAL := 10;    -- Release tx packet only when sufficiently data is available, 
     g_tx_fifo_size           : NATURAL := 256;   -- 2 * 32b * 256 = 2 M9K (DP interface has 64b data, so at least 2 M9K needed)
     g_rx_fifo_size           : NATURAL := 256;   -- 2 * 32b * 256 = 2 M9K (DP interface has 64b data, so at least 2 M9K needed)
-    g_link_status_check      : STD_LOGIC_VECTOR(c_tech_mac_10g_link_status_w-1 DOWNTO 0) := "11";
     g_word_alignment_padding : BOOLEAN := FALSE
   );
   PORT (
@@ -231,7 +231,7 @@ BEGIN
     g_sim                 => g_sim,
     g_sim_level           => g_sim_level,  -- 0 = use IP; 1 = use fast serdes model
     g_nof_channels        => g_nof_macs,
-    g_link_status_check   => g_link_status_check,
+    g_direction           => g_direction,
     g_pre_header_padding  => g_word_alignment_padding
   )
   PORT MAP (
diff --git a/libraries/io/tr_10GbE/tb/vhdl/tb_tb_tr_10GbE.vhd b/libraries/io/tr_10GbE/tb/vhdl/tb_tb_tr_10GbE.vhd
index 4b4fa7bfa4413e5354d7f613ab4589e30f885726..04ad76a309d24ac814410eb5b6e8aa723572ba97 100644
--- a/libraries/io/tr_10GbE/tb/vhdl/tb_tb_tr_10GbE.vhd
+++ b/libraries/io/tr_10GbE/tb/vhdl/tb_tb_tr_10GbE.vhd
@@ -53,17 +53,19 @@ BEGIN
 -- g_dp_clk_period           : TIME :=  5 ns;     -- 200 MHz
 -- g_sim_level               : NATURAL := 1;      -- 0 = use IP; 1 = use fast serdes model
 -- g_nof_channels            : NATURAL := 1;
+-- g_direction               : STRING := "TX_RX";  -- "TX_RX", "TX_ONLY", "RX_ONLY"
 -- g_ref_clk_644_period      : TIME := tech_pll_clk_644_period;  -- for 10GBASE-R
 -- g_ref_clk_156_period      : TIME := 6.4 ns;                   -- for XAUI
 -- g_data_type               : NATURAL := c_tb_tech_mac_10g_data_type_symbols;
 -- g_verify_link_recovery    : BOOLEAN := TRUE;
--- g_link_status_check       : STD_LOGIC_VECTOR(c_tech_mac_10g_link_status_w-1 DOWNTO 0) := "11"
 
-  u_no_dut                     : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE,  TRUE, 5   ns, 0, 1, c_644, c_156, c_data_type, TRUE, "11") PORT MAP (tb_end_vec(0));
-  u_tr_10GbE                   : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 5   ns, 0, 1, c_644, c_156, c_data_type, TRUE, "11") PORT MAP (tb_end_vec(1));
-  u_tr_10GbE_dp_clk_6_5ns      : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 6.5 ns, 0, 1, c_644, c_156, c_data_type, TRUE, "11") PORT MAP (tb_end_vec(2));
-  u_tr_10GbE_nof_channels_is_2 : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 5   ns, 0, 2, c_644, c_156, c_data_type, TRUE, "11") PORT MAP (tb_end_vec(3));
-  u_tr_10GbE_sim_level_is_1    : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 5   ns, 1, 1, c_644, c_156, c_data_type, TRUE, "11") PORT MAP (tb_end_vec(4));
+  u_no_dut                     : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE,  TRUE, 5   ns, 0, 1, "TX_RX",   c_644, c_156, c_data_type, TRUE) PORT MAP (tb_end_vec(0));
+  u_tr_10GbE                   : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 5   ns, 0, 1, "TX_RX",   c_644, c_156, c_data_type, TRUE) PORT MAP (tb_end_vec(1));
+  u_tr_10GbE_tx_only           : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 5   ns, 0, 1, "TX_ONLY", c_644, c_156, c_data_type, TRUE) PORT MAP (tb_end_vec(2));
+  u_tr_10GbE_rx_only           : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 5   ns, 0, 1, "RX_ONLY", c_644, c_156, c_data_type, TRUE) PORT MAP (tb_end_vec(3));
+  u_tr_10GbE_dp_clk_6_5ns      : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 6.5 ns, 0, 1, "TX_RX",   c_644, c_156, c_data_type, TRUE) PORT MAP (tb_end_vec(4));
+  u_tr_10GbE_nof_channels_is_2 : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 5   ns, 0, 2, "TX_RX",   c_644, c_156, c_data_type, TRUE) PORT MAP (tb_end_vec(5));
+  u_tr_10GbE_sim_level_is_1    : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 5   ns, 1, 1, "TX_RX",   c_644, c_156, c_data_type, TRUE) PORT MAP (tb_end_vec(6));
   
   p_tb_end : PROCESS
   BEGIN
diff --git a/libraries/io/tr_10GbE/tb/vhdl/tb_tr_10GbE.vhd b/libraries/io/tr_10GbE/tb/vhdl/tb_tr_10GbE.vhd
index 20720844e430f383d7bc73f92e9b4efbaeb8ac68..03af83e74fd1ab9488bcc18b9150c76ebab43a9f 100644
--- a/libraries/io/tr_10GbE/tb/vhdl/tb_tr_10GbE.vhd
+++ b/libraries/io/tr_10GbE/tb/vhdl/tb_tr_10GbE.vhd
@@ -31,6 +31,12 @@
 -- Usage:
 --   > as 10
 --   > run -all
+--
+-- Remarks:
+-- . g_direction = "TX_RX" and "TX_ONLY" are verified properly by
+--   c_tx_rx_loopback = TRUE. 
+--   g_direction = "RX_ONLY" is verified somehwat by c_tx_rx_loopback = FALSE,
+--   but to properly verify is would require using two DUTs.
 
 LIBRARY IEEE, technology_lib, tech_pll_lib, tech_mac_10g_lib, common_lib, dp_lib;
 USE IEEE.std_logic_1164.ALL;
@@ -56,11 +62,11 @@ ENTITY tb_tr_10GbE IS
     g_dp_clk_period           : TIME := 5 ns;      -- must be ~< 9000/(9000-c_tx_fifo_fill) * g_ref_clk_156_period
     g_sim_level               : NATURAL := 0;      -- 0 = use IP; 1 = use fast serdes model
     g_nof_channels            : NATURAL := 1;
+    g_direction               : STRING := "TX_RX";  -- "TX_RX", "TX_ONLY", "RX_ONLY"
     g_ref_clk_644_period      : TIME := tech_pll_clk_644_period;  -- for 10GBASE-R
     g_ref_clk_156_period      : TIME := 6.4 ns;                   -- for XAUI
     g_data_type               : NATURAL := c_tb_tech_mac_10g_data_type_symbols;
-    g_verify_link_recovery    : BOOLEAN := TRUE;
-    g_link_status_check       : STD_LOGIC_VECTOR(c_tech_mac_10g_link_status_w-1 DOWNTO 0) := "00"
+    g_verify_link_recovery    : BOOLEAN := TRUE
   );
   PORT (
     tb_end : OUT STD_LOGIC
@@ -74,7 +80,8 @@ ARCHITECTURE tb OF tb_tr_10GbE IS
   
   CONSTANT cal_clk_period       : TIME := 25 ns;    --  40 MHz
   
-  CONSTANT phy_delay            : TIME := sel_a_b(g_sim_level=0, 1 ns, 0 ns);
+  CONSTANT phy_delay            : TIME := sel_a_b(g_sim_level=0, 0 ns, 0 ns);
+  CONSTANT c_tx_rx_loopback     : BOOLEAN := g_direction/="TX_ONLY";
   
   CONSTANT c_tx_fifo_fill       : NATURAL := 100;
    
@@ -241,11 +248,11 @@ BEGIN
       g_sim                    => c_sim,
       g_sim_level              => g_sim_level, -- 0 = use IP; 1 = use fast serdes model
       g_nof_macs               => g_nof_channels,
+      g_direction              => g_direction,
       g_use_mdio               => TRUE,
       g_mdio_epcs_dis          => TRUE,  -- TRUE disables Enhanced PCS on init; e.g. to target a 10GbE card in PC that does not support it 
       g_tx_fifo_fill           => c_tx_fifo_fill,
       g_tx_fifo_size           => 256,
-      g_link_status_check      => g_link_status_check,
       g_word_alignment_padding => TRUE
     )
     PORT MAP (
@@ -300,7 +307,7 @@ BEGIN
   gen_link_connect : FOR I IN 0 TO g_nof_channels-1 GENERATE
     u_link_connect : ENTITY tech_mac_10g_lib.tb_tech_mac_10g_link_connect
     GENERIC MAP (
-      g_loopback    => TRUE,
+      g_loopback    => c_tx_rx_loopback,
       g_link_delay  => phy_delay
     )
     PORT MAP (