diff --git a/board/common/wr_board_pkg.vhd b/board/common/wr_board_pkg.vhd
index 53579d8a4f06380a426815f56d1ae60f73582d92..8c84089f812c05f0ceedd6a9d07b87fc4b7a55b8 100644
--- a/board/common/wr_board_pkg.vhd
+++ b/board/common/wr_board_pkg.vhd
@@ -31,13 +31,13 @@ package wr_board_pkg is
     return t_board_fabric_iface;
 
   function f_pick_diag_val (
-    iface            : t_board_fabric_iface;
+    iface           : t_board_fabric_iface;
     streamers_val   : integer;
     application_val : integer
     ) return integer;
 
   function f_pick_diag_size (
-    iface                 : t_board_fabric_iface;
+    iface            : t_board_fabric_iface;
     streamers_size   : integer;
     application_size : integer
     ) return integer;
@@ -56,111 +56,111 @@ package wr_board_pkg is
     dpram_initf : string;
     simulation  : integer;
     pcs_16_bit  : boolean)
-    return string ;
+    return string;
 
   component xwrc_board_common is
     generic (
-      g_simulation                : integer;
-      g_with_external_clock_input : boolean;
-      g_phys_uart                 : boolean;
-      g_virtual_uart              : boolean;
-      g_aux_clks                  : integer;
-      g_ep_rxbuf_size             : integer;
-      g_tx_runt_padding           : boolean;
-      g_dpram_initf               : string;
-      g_dpram_size                : integer;
-      g_interface_mode            : t_wishbone_interface_mode;
-      g_address_granularity       : t_wishbone_address_granularity;
-      g_aux_sdb                   : t_sdb_device;
-      g_softpll_enable_debugger   : boolean;
-      g_vuart_fifo_size           : integer;
-      g_pcs_16bit                 : boolean;
-      g_diag_id                   : integer;
-      g_diag_ver                  : integer;
-      g_diag_ro_size              : integer;
-      g_diag_rw_size              : integer;
-      g_tx_streamer_width         : integer;
-      g_rx_streamer_width         : integer;
-      g_fabric_iface              : t_board_fabric_iface);
+      g_simulation                : integer                        := 0;
+      g_with_external_clock_input : boolean                        := TRUE;
+      g_phys_uart                 : boolean                        := TRUE;
+      g_virtual_uart              : boolean                        := TRUE;
+      g_aux_clks                  : integer                        := 0;
+      g_ep_rxbuf_size             : integer                        := 1024;
+      g_tx_runt_padding           : boolean                        := TRUE;
+      g_dpram_initf               : string                         := "";
+      g_dpram_size                : integer                        := 131072/4;
+      g_interface_mode            : t_wishbone_interface_mode      := PIPELINED;
+      g_address_granularity       : t_wishbone_address_granularity := BYTE;
+      g_aux_sdb                   : t_sdb_device                   := c_wrc_periph3_sdb;
+      g_softpll_enable_debugger   : boolean                        := FALSE;
+      g_vuart_fifo_size           : integer                        := 1024;
+      g_pcs_16bit                 : boolean                        := FALSE;
+      g_diag_id                   : integer                        := 0;
+      g_diag_ver                  : integer                        := 0;
+      g_diag_ro_size              : integer                        := 0;
+      g_diag_rw_size              : integer                        := 0;
+      g_tx_streamer_width         : integer                        := 32;
+      g_rx_streamer_width         : integer                        := 32;
+      g_fabric_iface              : t_board_fabric_iface           := PLAIN);
     port (
       clk_sys_i            : in  std_logic;
       clk_dmtd_i           : in  std_logic;
       clk_ref_i            : in  std_logic;
-      clk_aux_i            : in  std_logic_vector(g_aux_clks-1 downto 0)       := (others => '0');
-      clk_ext_i            : in  std_logic                                     := '0';
-      clk_ext_mul_i        : in  std_logic                                     := '0';
-      clk_ext_mul_locked_i : in  std_logic                                     := '1';
-      clk_ext_stopped_i    : in  std_logic                                     := '0';
+      clk_aux_i            : in  std_logic_vector(g_aux_clks-1 downto 0)          := (others => '0');
+      clk_ext_i            : in  std_logic                                        := '0';
+      clk_ext_mul_i        : in  std_logic                                        := '0';
+      clk_ext_mul_locked_i : in  std_logic                                        := '1';
+      clk_ext_stopped_i    : in  std_logic                                        := '0';
       clk_ext_rst_o        : out std_logic;
-      pps_ext_i            : in  std_logic                                     := '0';
+      pps_ext_i            : in  std_logic                                        := '0';
       rst_n_i              : in  std_logic;
       dac_hpll_load_p1_o   : out std_logic;
       dac_hpll_data_o      : out std_logic_vector(15 downto 0);
       dac_dpll_load_p1_o   : out std_logic;
       dac_dpll_data_o      : out std_logic_vector(15 downto 0);
       phy8_o               : out t_phy_8bits_from_wrc;
-      phy8_i               : in  t_phy_8bits_to_wrc                            := c_dummy_phy8_to_wrc;
+      phy8_i               : in  t_phy_8bits_to_wrc                               := c_dummy_phy8_to_wrc;
       phy16_o              : out t_phy_16bits_from_wrc;
-      phy16_i              : in  t_phy_16bits_to_wrc                           := c_dummy_phy16_to_wrc;
-      led_act_o            : out std_logic;
-      led_link_o           : out std_logic;
+      phy16_i              : in  t_phy_16bits_to_wrc                              := c_dummy_phy16_to_wrc;
       scl_o                : out std_logic;
-      scl_i                : in  std_logic                                     := '1';
+      scl_i                : in  std_logic                                        := '1';
       sda_o                : out std_logic;
-      sda_i                : in  std_logic                                     := '1';
+      sda_i                : in  std_logic                                        := '1';
       sfp_scl_o            : out std_logic;
-      sfp_scl_i            : in  std_logic                                     := '1';
+      sfp_scl_i            : in  std_logic                                        := '1';
       sfp_sda_o            : out std_logic;
-      sfp_sda_i            : in  std_logic                                     := '1';
+      sfp_sda_i            : in  std_logic                                        := '1';
       sfp_det_i            : in  std_logic;
-      btn1_i               : in  std_logic                                     := '1';
-      btn2_i               : in  std_logic                                     := '1';
       spi_sclk_o           : out std_logic;
       spi_ncs_o            : out std_logic;
       spi_mosi_o           : out std_logic;
-      spi_miso_i           : in  std_logic                                     := '0';
-      uart_rxd_i           : in  std_logic                                     := '0';
+      spi_miso_i           : in  std_logic                                        := '0';
+      uart_rxd_i           : in  std_logic                                        := '0';
       uart_txd_o           : out std_logic;
       owr_pwren_o          : out std_logic_vector(1 downto 0);
       owr_en_o             : out std_logic_vector(1 downto 0);
-      owr_i                : in  std_logic_vector(1 downto 0)                  := (others => '1');
-      wb_slave_i           : in  t_wishbone_slave_in                           := cc_dummy_slave_in;
+      owr_i                : in  std_logic_vector(1 downto 0)                     := (others => '1');
+      wb_slave_i           : in  t_wishbone_slave_in                              := cc_dummy_slave_in;
       wb_slave_o           : out t_wishbone_slave_out;
       aux_master_o         : out t_wishbone_master_out;
-      aux_master_i         : in  t_wishbone_master_in                          := cc_dummy_master_in;
+      aux_master_i         : in  t_wishbone_master_in                             := cc_dummy_master_in;
       wrf_src_o            : out t_wrf_source_out;
-      wrf_src_i            : in  t_wrf_source_in                               := c_dummy_src_in;
+      wrf_src_i            : in  t_wrf_source_in                                  := c_dummy_src_in;
       wrf_snk_o            : out t_wrf_sink_out;
-      wrf_snk_i            : in  t_wrf_sink_in                                 := c_dummy_snk_in;
+      wrf_snk_i            : in  t_wrf_sink_in                                    := c_dummy_snk_in;
       wrs_tx_data_i        : in  std_logic_vector(g_tx_streamer_width-1 downto 0) := (others => '0');
-      wrs_tx_valid_i       : in  std_logic                                     := '0';
+      wrs_tx_valid_i       : in  std_logic                                        := '0';
       wrs_tx_dreq_o        : out std_logic;
-      wrs_tx_last_i        : in  std_logic                                     := '1';
-      wrs_tx_flush_i       : in  std_logic                                     := '0';
+      wrs_tx_last_i        : in  std_logic                                        := '1';
+      wrs_tx_flush_i       : in  std_logic                                        := '0';
       wrs_rx_first_o       : out std_logic;
       wrs_rx_last_o        : out std_logic;
       wrs_rx_data_o        : out std_logic_vector(g_rx_streamer_width-1 downto 0);
       wrs_rx_valid_o       : out std_logic;
-      wrs_rx_dreq_i        : in  std_logic                                     := '0';
+      wrs_rx_dreq_i        : in  std_logic                                        := '0';
       wb_eth_master_o      : out t_wishbone_master_out;
-      wb_eth_master_i      : in  t_wishbone_master_in                          := cc_dummy_master_in;
-      timestamps_o         : out t_txtsu_timestamp;
-      timestamps_ack_i     : in  std_logic                                     := '1';
-      fc_tx_pause_req_i    : in  std_logic                                     := '0';
-      fc_tx_pause_delay_i  : in  std_logic_vector(15 downto 0)                 := x"0000";
-      fc_tx_pause_ready_o  : out std_logic;
-      tm_link_up_o         : out std_logic;
+      wb_eth_master_i      : in  t_wishbone_master_in                             := cc_dummy_master_in;
+      aux_diag_i           : in  t_generic_word_array(g_diag_ro_size-1 downto 0)  := (others => (others => '0'));
+      aux_diag_o           : out t_generic_word_array(g_diag_rw_size-1 downto 0);
       tm_dac_value_o       : out std_logic_vector(23 downto 0);
       tm_dac_wr_o          : out std_logic_vector(g_aux_clks-1 downto 0);
-      tm_clk_aux_lock_en_i : in  std_logic_vector(g_aux_clks-1 downto 0)       := (others => '0');
+      tm_clk_aux_lock_en_i : in  std_logic_vector(g_aux_clks-1 downto 0)          := (others => '0');
       tm_clk_aux_locked_o  : out std_logic_vector(g_aux_clks-1 downto 0);
+      timestamps_o         : out t_txtsu_timestamp;
+      timestamps_ack_i     : in  std_logic                                        := '1';
+      fc_tx_pause_req_i    : in  std_logic                                        := '0';
+      fc_tx_pause_delay_i  : in  std_logic_vector(15 downto 0)                    := x"0000";
+      fc_tx_pause_ready_o  : out std_logic;
+      tm_link_up_o         : out std_logic;
       tm_time_valid_o      : out std_logic;
       tm_tai_o             : out std_logic_vector(39 downto 0);
       tm_cycles_o          : out std_logic_vector(27 downto 0);
+      led_act_o            : out std_logic;
+      led_link_o           : out std_logic;
+      btn1_i               : in  std_logic                                        := '1';
+      btn2_i               : in  std_logic                                        := '1';
       pps_p_o              : out std_logic;
       pps_led_o            : out std_logic;
-      aux_diag_i           : in  t_generic_word_array(g_diag_ro_size-1 downto 0) := (others =>(others=>'0'));
-      aux_diag_o           : out t_generic_word_array(g_diag_rw_size-1 downto 0);
       link_ok_o            : out std_logic);
   end component xwrc_board_common;
 
@@ -174,7 +174,7 @@ package body wr_board_pkg is
     if iface_type >= always_last_invalid then
       assert FALSE
         report "WR PTP core fabric interface [" & t_board_fabric_iface'image(iface_type) & "] is not supported"
-        severity failure;
+        severity FAILURE;
     end if;
   end procedure f_check_fabric_iface_type;
 
@@ -183,11 +183,11 @@ package body wr_board_pkg is
   begin
     assert (diag_id /= 1) report
       "g_diag_id=1 is reserved for wr_streamers and cannot be set by users"
-      severity failure;
+      severity FAILURE;
 
-    assert (not (diag_id /= 0 and diag_ver=0)) report
+    assert (not (diag_id /= 0 and diag_ver = 0)) report
       "If diag_id is set by the user (diag_id > 1), g_diag_ver must be at least 1"
-      severity failure;
+      severity FAILURE;
   end procedure f_check_diag_id;
 
   function f_str2iface_type (
@@ -207,7 +207,7 @@ package body wr_board_pkg is
   -- this function decides what is the diag_id/ver used in the WRPC and MIB for access
   -- via SNMP
   function f_pick_diag_val (
-    iface            : t_board_fabric_iface;
+    iface           : t_board_fabric_iface;
     streamers_val   : integer;
     application_val : integer
     ) return integer is
@@ -216,15 +216,15 @@ package body wr_board_pkg is
     -- use default streamer's id/ver
     if(iface = STREAMERS and application_val = 0) then
       return streamers_val;
-    else -- otherwise, use id/ver specified by the user/application. This is the case also
-         -- when streamers are used.
+    else  -- otherwise, use id/ver specified by the user/application. This is the case also
+      -- when streamers are used.
       return application_val;
     end if;
   end f_pick_diag_val;
 
   -- provide the size of the final diag array.
   function f_pick_diag_size (
-    iface                 : t_board_fabric_iface;
+    iface            : t_board_fabric_iface;
     streamers_size   : integer;
     application_size : integer
     ) return integer is
@@ -232,7 +232,7 @@ package body wr_board_pkg is
     -- when streamers are used, concatenate the array of streamers and application/user
     if(iface = STREAMERS) then
       return (streamers_size+application_size);
-    else -- otherwise, only the size provided by the application/user
+    else  -- otherwise, only the size provided by the application/user
       return application_size;
     end if;
   end f_pick_diag_size;
@@ -245,7 +245,7 @@ package body wr_board_pkg is
   begin
     assert (diag_vector_size mod 32 = 0) report
       "g_diag_ro/w_vector_width must have value that is a mutiple of 32"
-    severity failure;
+      severity FAILURE;
     for i in 0 to diag_vector_size/32-1 loop
       result(i*32-31 downto i*32) := diag_in(i);
     end loop;
@@ -260,7 +260,7 @@ package body wr_board_pkg is
   begin
     assert (diag_vector_size mod 32 = 0) report
       "g_diag_ro/w_vector_width must have value that is a mutiple of 32"
-    severity failure;
+      severity FAILURE;
     for i in 0 to diag_vector_size/32-1 loop
       result(i) := diag_in(i*32-31 downto i*32);
     end loop;
@@ -273,43 +273,43 @@ package body wr_board_pkg is
     pcs_16_bit  : boolean)
     return string is
   begin
-    if((dpram_initf = "default_altera" or dpram_initf = "default_xilinx") and 
-        pcs_16_bit = TRUE) then
+    if((dpram_initf = "default_altera" or dpram_initf = "default_xilinx") and
+       pcs_16_bit = TRUE) then
       assert FALSE
-      report "[Board:Software for LM32 in WR Core] No release binary for " &
-              "pcs_16_bit." severity failure;
+        report "[Board:Software for LM32 in WR Core] No release binary for " &
+        "pcs_16_bit." severity FAILURE;
       return "";
     elsif (dpram_initf /= "default_altera" and dpram_initf /= "default_xilinx") then
       report "[Board:Software for LM32 in WR Core]  Using user-provided LM32 " &
-             "firmware ("&dpram_initf&")." severity note;
+        "firmware ("&dpram_initf&")." severity NOTE;
       return dpram_initf;
-    elsif (simulation = 0 and dpram_initf = "default_altera" and pcs_16_bit = FALSE and 
-           dpram_initf_default_altera_phy8 /="") then
+    elsif (simulation = 0 and dpram_initf = "default_altera" and pcs_16_bit = FALSE and
+           dpram_initf_default_altera_phy8 /= "") then
       report "[Board:Software for LM32 in WR Core] Using release LM32 firmware " &
-             "(altera, phy8)." severity note;
+        "(altera, phy8)." severity NOTE;
       return dpram_initf_default_altera_phy8;
-    elsif (simulation = 0 and dpram_initf = "default_xilinx" and pcs_16_bit = FALSE and 
-           dpram_initf_default_xilinx_phy8 /="") then
+    elsif (simulation = 0 and dpram_initf = "default_xilinx" and pcs_16_bit = FALSE and
+           dpram_initf_default_xilinx_phy8 /= "") then
       report "[Board:Software for LM32 in WR Core] Using release LM32 firmware " &
-             "(xilnix, phy8)" severity note;
+        "(xilnix, phy8)" severity NOTE;
       return dpram_initf_default_xilinx_phy8;
-    elsif (simulation = 1 and dpram_initf = "default_altera" and pcs_16_bit = FALSE and 
-           dpram_initf_default_altera_phy8_sim /="") then
+    elsif (simulation = 1 and dpram_initf = "default_altera" and pcs_16_bit = FALSE and
+           dpram_initf_default_altera_phy8_sim /= "") then
       report "Board:[Software for LM32 in WR Core] Using release LM32 firmware " &
-             "(altera, phy8, sim)." severity note;
+        "(altera, phy8, sim)." severity NOTE;
       return dpram_initf_default_altera_phy8_sim;
-    elsif (simulation = 1 and dpram_initf = "default_xilinx" and pcs_16_bit = FALSE and 
-           dpram_initf_default_xilinx_phy8_sim /="") then
+    elsif (simulation = 1 and dpram_initf = "default_xilinx" and pcs_16_bit = FALSE and
+           dpram_initf_default_xilinx_phy8_sim /= "") then
       report "[Board:Software for LM32 in WR Core] Using release LM32 firmware " &
-             "(xilinx, phy8, sim)." severity note;
+        "(xilinx, phy8, sim)." severity NOTE;
       return dpram_initf_default_xilinx_phy8_sim;
     else
       assert FALSE
-      report "[Board:Software for LM32 in WR Core] Default inclussion of LM32" &
-             "binary with software is not supported yet. In your instantiation" &
-             "of the board (xwrc_board_{spec,svec,vfchd} set g_dpram_initf to the" &
-             "correct path, i.e." &
-             "<your wr-cores location>/bin/wrpc/wrc_phy8_sim.{bram, mif} " severity failure;
+        report "[Board:Software for LM32 in WR Core] Default inclussion of LM32" &
+        "binary with software is not supported yet. In your instantiation" &
+        "of the board (xwrc_board_{spec,svec,vfchd} set g_dpram_initf to the" &
+        "correct path, i.e." &
+        "<your wr-cores location>/bin/wrpc/wrc_phy8_sim.{bram, mif} " severity FAILURE;
       return "";
     end if;
   end function;
diff --git a/board/common/xwrc_board_common.vhd b/board/common/xwrc_board_common.vhd
index 97b9ae01fd8afa5d63db5a73314ac21c119282fc..21999df9bf2c1e62a9d792edff1eb0337ce3c0c2 100644
--- a/board/common/xwrc_board_common.vhd
+++ b/board/common/xwrc_board_common.vhd
@@ -7,7 +7,7 @@
 -- Author(s)  : Dimitrios Lampridis  <dimitrios.lampridis@cern.ch>
 -- Company    : CERN (BE-CO-HT)
 -- Created    : 2017-02-22
--- Last update: 2017-03-07
+-- Last update: 2017-03-08
 -- Standard   : VHDL'93
 -------------------------------------------------------------------------------
 -- Description: Wrapper for WR PTP core with common features shared between
@@ -120,21 +120,25 @@ entity xwrc_board_common is
     phy16_i : in  t_phy_16bits_to_wrc := c_dummy_phy16_to_wrc;
 
     ---------------------------------------------------------------------------
-    --GPIO
+    -- I2C EEPROM
+    ---------------------------------------------------------------------------
+    scl_o : out std_logic;
+    scl_i : in  std_logic := '1';
+    sda_o : out std_logic;
+    sda_i : in  std_logic := '1';
+
+    ---------------------------------------------------------------------------
+    -- SFP management info
+    ---------------------------------------------------------------------------
+    sfp_scl_o : out std_logic;
+    sfp_scl_i : in  std_logic := '1';
+    sfp_sda_o : out std_logic;
+    sfp_sda_i : in  std_logic := '1';
+    sfp_det_i : in  std_logic;
+
+    ---------------------------------------------------------------------------
+    -- Flash memory SPI interface
     ---------------------------------------------------------------------------
-    led_act_o  : out std_logic;
-    led_link_o : out std_logic;
-    scl_o      : out std_logic;
-    scl_i      : in  std_logic := '1';
-    sda_o      : out std_logic;
-    sda_i      : in  std_logic := '1';
-    sfp_scl_o  : out std_logic;
-    sfp_scl_i  : in  std_logic := '1';
-    sfp_sda_o  : out std_logic;
-    sfp_sda_i  : in  std_logic := '1';
-    sfp_det_i  : in  std_logic;
-    btn1_i     : in  std_logic := '1';
-    btn2_i     : in  std_logic := '1';
     spi_sclk_o : out std_logic;
     spi_ncs_o  : out std_logic;
     spi_mosi_o : out std_logic;
@@ -174,15 +178,15 @@ entity xwrc_board_common is
     -- WR streamers (when g_fabric_iface = STREAMERS)
     ---------------------------------------------------------------------------
     wrs_tx_data_i  : in  std_logic_vector(g_tx_streamer_width-1 downto 0) := (others => '0');
-    wrs_tx_valid_i : in  std_logic                                     := '0';
+    wrs_tx_valid_i : in  std_logic                                        := '0';
     wrs_tx_dreq_o  : out std_logic;
-    wrs_tx_last_i  : in  std_logic                                     := '1';
-    wrs_tx_flush_i : in  std_logic                                     := '0';
+    wrs_tx_last_i  : in  std_logic                                        := '1';
+    wrs_tx_flush_i : in  std_logic                                        := '0';
     wrs_rx_first_o : out std_logic;
     wrs_rx_last_o  : out std_logic;
     wrs_rx_data_o  : out std_logic_vector(g_rx_streamer_width-1 downto 0);
     wrs_rx_valid_o : out std_logic;
-    wrs_rx_dreq_i  : in  std_logic                                     := '0';
+    wrs_rx_dreq_i  : in  std_logic                                        := '0';
 
     ---------------------------------------------------------------------------
     -- Etherbone WB master interface (when g_fabric_iface = ETHERBONE)
@@ -190,6 +194,20 @@ entity xwrc_board_common is
     wb_eth_master_o : out t_wishbone_master_out;
     wb_eth_master_i : in  t_wishbone_master_in := cc_dummy_master_in;
 
+    ---------------------------------------------------------------------------
+    -- Generic diagnostics interface (access from WRPC via SNMP or uart console
+    ---------------------------------------------------------------------------
+    aux_diag_i : in  t_generic_word_array(g_diag_ro_size-1 downto 0) := (others => (others => '0'));
+    aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0);
+
+    ---------------------------------------------------------------------------
+    -- Aux clocks control
+    ---------------------------------------------------------------------------
+    tm_dac_value_o       : out std_logic_vector(23 downto 0);
+    tm_dac_wr_o          : out std_logic_vector(g_aux_clks-1 downto 0);
+    tm_clk_aux_lock_en_i : in  std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+    tm_clk_aux_locked_o  : out std_logic_vector(g_aux_clks-1 downto 0);
+
     ---------------------------------------------------------------------------
     -- External Tx Timestamping I/F
     ---------------------------------------------------------------------------
@@ -204,29 +222,25 @@ entity xwrc_board_common is
     fc_tx_pause_ready_o : out std_logic;
 
     ---------------------------------------------------------------------------
-    -- Timecode/Servo Control
+    -- Timecode I/F
     ---------------------------------------------------------------------------
-    tm_link_up_o         : out std_logic;
-    -- DAC Control
-    tm_dac_value_o       : out std_logic_vector(23 downto 0);
-    tm_dac_wr_o          : out std_logic_vector(g_aux_clks-1 downto 0);
-    -- Aux clock lock enable
-    tm_clk_aux_lock_en_i : in  std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
-    -- Aux clock locked flag
-    tm_clk_aux_locked_o  : out std_logic_vector(g_aux_clks-1 downto 0);
-    -- Timecode output
-    tm_time_valid_o      : out std_logic;
-    tm_tai_o             : out std_logic_vector(39 downto 0);
-    tm_cycles_o          : out std_logic_vector(27 downto 0);
-    -- 1PPS output
-    pps_p_o              : out std_logic;
-    pps_led_o            : out std_logic;
+    tm_link_up_o    : out std_logic;
+    tm_time_valid_o : out std_logic;
+    tm_tai_o        : out std_logic_vector(39 downto 0);
+    tm_cycles_o     : out std_logic_vector(27 downto 0);
 
-    -- access from WRPC (via SNMP or uart console) to applications for diagnostics (generic)
-    aux_diag_i           : in  t_generic_word_array(g_diag_ro_size-1 downto 0) := (others =>(others=>'0'));
-    aux_diag_o           : out t_generic_word_array(g_diag_rw_size-1 downto 0);
-
-    link_ok_o : out std_logic
+    ---------------------------------------------------------------------------
+    -- Buttons, LEDs and PPS output
+    ---------------------------------------------------------------------------
+    led_act_o  : out std_logic;
+    led_link_o : out std_logic;
+    btn1_i     : in  std_logic := '1';
+    btn2_i     : in  std_logic := '1';
+    -- 1PPS output
+    pps_p_o    : out std_logic;
+    pps_led_o  : out std_logic;
+    -- Link ok indication
+    link_ok_o  : out std_logic
     );
 
 end entity xwrc_board_common;
@@ -262,16 +276,16 @@ architecture struct of xwrc_board_common is
   -- Application diagnostic words are added after streamer's diagnostics in the array that
   -- goes to/from WRPC
 
-  constant c_streamers_diag_id  : integer := 1; -- id reserved for streamers
-  constant c_streamers_diag_ver : integer := 1; -- version that will be probably increased
-                                                -- when more diagnostics is added to streamers
+  constant c_streamers_diag_id  : integer := 1;   -- id reserved for streamers
+  constant c_streamers_diag_ver : integer := 1;  -- version that will be probably increased
+  -- when more diagnostics is added to streamers
 
   -- final values that go to WRPC generics (depend on configuration)
-  constant c_diag_id      : integer := f_pick_diag_val(g_fabric_iface,c_streamers_diag_id, g_diag_id);
-  constant c_diag_ver     : integer := f_pick_diag_val(g_fabric_iface,c_streamers_diag_id, g_diag_id);
+  constant c_diag_id  : integer := f_pick_diag_val(g_fabric_iface, c_streamers_diag_id, g_diag_id);
+  constant c_diag_ver : integer := f_pick_diag_val(g_fabric_iface, c_streamers_diag_id, g_diag_id);
 
   constant c_diag_ro_size : integer := f_pick_diag_size(g_fabric_iface, c_WR_TRANS_ARR_SIZE_OUT, g_diag_ro_size);
-  constant c_diag_rw_size : integer := f_pick_diag_size(g_fabric_iface, c_WR_TRANS_ARR_SIZE_IN,  g_diag_rw_size);
+  constant c_diag_rw_size : integer := f_pick_diag_size(g_fabric_iface, c_WR_TRANS_ARR_SIZE_IN, g_diag_rw_size);
 
   -- WR SNMP
   signal aux_diag_in  : t_generic_word_array(c_diag_ro_size-1 downto 0);
@@ -285,7 +299,7 @@ begin  -- architecture struct
   -- check whether diag id and version are correct, i.e.:
   -- * diag_id =1 is reserved for wr_streamers and cannot be used
   -- * diag_ver values should start with 1
-  f_check_diag_id(g_diag_id,g_diag_ver);
+  f_check_diag_id(g_diag_id, g_diag_ver);
 
   -----------------------------------------------------------------------------
   -- The WR PTP core itself
@@ -300,7 +314,7 @@ begin  -- architecture struct
       g_aux_clks                  => g_aux_clks,
       g_ep_rxbuf_size             => g_ep_rxbuf_size,
       g_tx_runt_padding           => g_tx_runt_padding,
-      g_dpram_initf               => f_find_default_lm32_firmware(g_dpram_initf,g_simulation,g_pcs_16bit),
+      g_dpram_initf               => f_find_default_lm32_firmware(g_dpram_initf, g_simulation, g_pcs_16bit),
       g_dpram_size                => g_dpram_size,
       g_interface_mode            => g_interface_mode,
       g_address_granularity       => g_address_granularity,
@@ -373,8 +387,8 @@ begin  -- architecture struct
       owr_pwren_o          => owr_pwren_o,
       owr_en_o             => owr_en_o,
       owr_i                => owr_i,
-      slave_i              => slave_i,
-      slave_o              => slave_o,
+      slave_i              => wb_slave_i,
+      slave_o              => wb_slave_o,
       aux_master_o         => aux_master_out,
       aux_master_i         => aux_master_in,
       wrf_src_o            => wrf_src_out,
@@ -444,8 +458,8 @@ begin  -- architecture struct
     aux_master_o    <= cc_dummy_master_out;
     wb_eth_master_o <= cc_dummy_master_out;
 
-    aux_diag_in(c_diag_ro_size-1 downto c_WR_TRANS_ARR_SIZE_OUT)  <= aux_diag_i;
-    aux_diag_o <= aux_diag_out(c_diag_rw_size-1 downto c_WR_TRANS_ARR_SIZE_IN);
+    aux_diag_in(c_diag_ro_size-1 downto c_WR_TRANS_ARR_SIZE_OUT) <= aux_diag_i;
+    aux_diag_o                                                   <= aux_diag_out(c_diag_rw_size-1 downto c_WR_TRANS_ARR_SIZE_IN);
 
   end generate gen_wr_streamers;
 
diff --git a/board/spec/wr_spec_pkg.vhd b/board/spec/wr_spec_pkg.vhd
index bc244afe06014f06c0db72af553217af04615c45..794f0a8fa8a4808962d1bdfaf71494da00b87607 100644
--- a/board/spec/wr_spec_pkg.vhd
+++ b/board/spec/wr_spec_pkg.vhd
@@ -5,6 +5,7 @@ library work;
 use work.wishbone_pkg.all;
 use work.wrcore_pkg.all;
 use work.wr_fabric_pkg.all;
+use work.endpoint_pkg.all;
 use work.wr_board_pkg.all;
 
 package wr_spec_pkg is
@@ -13,7 +14,8 @@ package wr_spec_pkg is
     generic (
       g_simulation                : integer              := 0;
       g_with_external_clock_input : boolean              := TRUE;
-      g_fabric_iface              : t_board_fabric_iface := PLAIN;
+      g_aux_clks                  : integer              := 0;
+      g_fabric_iface              : t_board_fabric_iface := plain;
       g_tx_streamer_width         : integer              := 32;
       g_rx_streamer_width         : integer              := 32;
       g_dpram_initf               : string               := "default_xilinx";
@@ -22,81 +24,97 @@ package wr_spec_pkg is
       g_diag_ro_size              : integer              := 0;
       g_diag_rw_size              : integer              := 0);
     port (
-      areset_n_i          : in  std_logic;
-      clk_20m_vcxo_i      : in  std_logic;
-      clk_125m_pllref_p_i : in  std_logic;
-      clk_125m_pllref_n_i : in  std_logic;
-      clk_125m_gtp_n_i    : in  std_logic;
-      clk_125m_gtp_p_i    : in  std_logic;
-      clk_10m_ext_ref_i   : in  std_logic                                     := '0';
-      clk_sys_62m5_o      : out std_logic;
-      clk_ref_125m_o      : out std_logic;
-      rst_62m5_n_o        : out std_logic;
-      rst_125m_n_o        : out std_logic;
-      plldac_sclk_o       : out std_logic;
-      plldac_din_o        : out std_logic;
-      pll25dac_cs_n_o     : out std_logic;
-      pll20dac_cs_n_o     : out std_logic;
-      sfp_txp_o           : out std_logic;
-      sfp_txn_o           : out std_logic;
-      sfp_rxp_i           : in  std_logic;
-      sfp_rxn_i           : in  std_logic;
-      sfp_det_i           : in  std_logic                                     := '1';
-      sfp_sda_i           : in  std_logic;
-      sfp_sda_o           : out std_logic;
-      sfp_scl_i           : in  std_logic;
-      sfp_scl_o           : out std_logic;
-      sfp_rate_select_o   : out std_logic;
-      sfp_tx_fault_i      : in  std_logic                                     := '0';
-      sfp_tx_disable_o    : out std_logic;
-      sfp_los_i           : in  std_logic                                     := '0';
-      eeprom_sda_i        : in  std_logic;
-      eeprom_sda_o        : out std_logic;
-      eeprom_scl_i        : in  std_logic;
-      eeprom_scl_o        : out std_logic;
-      onewire_i           : in  std_logic;
-      onewire_oen_o       : out std_logic;
-      uart_rxd_i          : in  std_logic;
-      uart_txd_o          : out std_logic;
-      flash_sclk_o        : out std_logic;
-      flash_ncs_o         : out std_logic;
-      flash_mosi_o        : out std_logic;
-      flash_miso_i        : in  std_logic;
-      wb_slave_o          : out t_wishbone_slave_out;
-      wb_slave_i          : in  t_wishbone_slave_in                           := cc_dummy_slave_in;
-      wrf_src_o           : out t_wrf_source_out;
-      wrf_src_i           : in  t_wrf_source_in                               := c_dummy_src_in;
-      wrf_snk_o           : out t_wrf_sink_out;
-      wrf_snk_i           : in  t_wrf_sink_in                                 := c_dummy_snk_in;
-      wrs_tx_data_i       : in  std_logic_vector(g_tx_streamer_width-1 downto 0) := (others => '0');
-      wrs_tx_valid_i      : in  std_logic                                     := '0';
-      wrs_tx_dreq_o       : out std_logic;
-      wrs_tx_last_i       : in  std_logic                                     := '1';
-      wrs_tx_flush_i      : in  std_logic                                     := '0';
-      wrs_rx_first_o      : out std_logic;
-      wrs_rx_last_o       : out std_logic;
-      wrs_rx_data_o       : out std_logic_vector(g_rx_streamer_width-1 downto 0);
-      wrs_rx_valid_o      : out std_logic;
-      wrs_rx_dreq_i       : in  std_logic                                     := '0';
-      wb_eth_master_o     : out t_wishbone_master_out;
-      wb_eth_master_i     : in  t_wishbone_master_in                          := cc_dummy_master_in;
-      pps_ext_i           : in  std_logic                                     := '0';
-      pps_p_o             : out std_logic;
-      pps_led_o           : out std_logic;
-      tm_time_valid_o     : out std_logic;
-      tm_tai_o            : out std_logic_vector(39 downto 0);
-      tm_cycles_o         : out std_logic_vector(27 downto 0);
-      led_link_o          : out std_logic;
-      aux_diag_i          : in  t_generic_word_array(g_diag_ro_size-1 downto 0) := (others =>(others=>'0'));
-      aux_diag_o          : out t_generic_word_array(g_diag_rw_size-1 downto 0);
-      led_act_o           : out std_logic);
+      areset_n_i           : in  std_logic;
+      clk_20m_vcxo_i       : in  std_logic;
+      clk_125m_pllref_p_i  : in  std_logic;
+      clk_125m_pllref_n_i  : in  std_logic;
+      clk_125m_gtp_n_i     : in  std_logic;
+      clk_125m_gtp_p_i     : in  std_logic;
+      clk_aux_i            : in  std_logic_vector(g_aux_clks-1 downto 0)          := (others => '0');
+      clk_10m_ext_ref_i    : in  std_logic                                        := '0';
+      pps_ext_i            : in  std_logic                                        := '0';
+      clk_sys_62m5_o       : out std_logic;
+      clk_ref_125m_o       : out std_logic;
+      rst_sys_62m5_n_o     : out std_logic;
+      rst_ref_125m_n_o     : out std_logic;
+      plldac_sclk_o        : out std_logic;
+      plldac_din_o         : out std_logic;
+      pll25dac_cs_n_o      : out std_logic;
+      pll20dac_cs_n_o      : out std_logic;
+      sfp_txp_o            : out std_logic;
+      sfp_txn_o            : out std_logic;
+      sfp_rxp_i            : in  std_logic;
+      sfp_rxn_i            : in  std_logic;
+      sfp_det_i            : in  std_logic                                        := '1';
+      sfp_sda_i            : in  std_logic;
+      sfp_sda_o            : out std_logic;
+      sfp_scl_i            : in  std_logic;
+      sfp_scl_o            : out std_logic;
+      sfp_rate_select_o    : out std_logic;
+      sfp_tx_fault_i       : in  std_logic                                        := '0';
+      sfp_tx_disable_o     : out std_logic;
+      sfp_los_i            : in  std_logic                                        := '0';
+      eeprom_sda_i         : in  std_logic;
+      eeprom_sda_o         : out std_logic;
+      eeprom_scl_i         : in  std_logic;
+      eeprom_scl_o         : out std_logic;
+      onewire_i            : in  std_logic;
+      onewire_oen_o        : out std_logic;
+      uart_rxd_i           : in  std_logic;
+      uart_txd_o           : out std_logic;
+      flash_sclk_o         : out std_logic;
+      flash_ncs_o          : out std_logic;
+      flash_mosi_o         : out std_logic;
+      flash_miso_i         : in  std_logic;
+      wb_slave_o           : out t_wishbone_slave_out;
+      wb_slave_i           : in  t_wishbone_slave_in                              := cc_dummy_slave_in;
+      wrf_src_o            : out t_wrf_source_out;
+      wrf_src_i            : in  t_wrf_source_in                                  := c_dummy_src_in;
+      wrf_snk_o            : out t_wrf_sink_out;
+      wrf_snk_i            : in  t_wrf_sink_in                                    := c_dummy_snk_in;
+      wrs_tx_data_i        : in  std_logic_vector(g_tx_streamer_width-1 downto 0) := (others => '0');
+      wrs_tx_valid_i       : in  std_logic                                        := '0';
+      wrs_tx_dreq_o        : out std_logic;
+      wrs_tx_last_i        : in  std_logic                                        := '1';
+      wrs_tx_flush_i       : in  std_logic                                        := '0';
+      wrs_rx_first_o       : out std_logic;
+      wrs_rx_last_o        : out std_logic;
+      wrs_rx_data_o        : out std_logic_vector(g_rx_streamer_width-1 downto 0);
+      wrs_rx_valid_o       : out std_logic;
+      wrs_rx_dreq_i        : in  std_logic                                        := '0';
+      wb_eth_master_o      : out t_wishbone_master_out;
+      wb_eth_master_i      : in  t_wishbone_master_in                             := cc_dummy_master_in;
+      aux_diag_i           : in  t_generic_word_array(g_diag_ro_size-1 downto 0)  := (others => (others => '0'));
+      aux_diag_o           : out t_generic_word_array(g_diag_rw_size-1 downto 0);
+      tm_dac_value_o       : out std_logic_vector(23 downto 0);
+      tm_dac_wr_o          : out std_logic_vector(g_aux_clks-1 downto 0);
+      tm_clk_aux_lock_en_i : in  std_logic_vector(g_aux_clks-1 downto 0)          := (others => '0');
+      tm_clk_aux_locked_o  : out std_logic_vector(g_aux_clks-1 downto 0);
+      timestamps_o         : out t_txtsu_timestamp;
+      timestamps_ack_i     : in  std_logic                                        := '1';
+      fc_tx_pause_req_i    : in  std_logic                                        := '0';
+      fc_tx_pause_delay_i  : in  std_logic_vector(15 downto 0)                    := x"0000";
+      fc_tx_pause_ready_o  : out std_logic;
+      tm_link_up_o         : out std_logic;
+      tm_time_valid_o      : out std_logic;
+      tm_tai_o             : out std_logic_vector(39 downto 0);
+      tm_cycles_o          : out std_logic_vector(27 downto 0);
+      led_act_o            : out std_logic;
+      led_link_o           : out std_logic;
+      btn1_i               : in  std_logic                                        := '1';
+      btn2_i               : in  std_logic                                        := '1';
+      pps_p_o              : out std_logic;
+      pps_led_o            : out std_logic;
+      link_ok_o            : out std_logic);
   end component xwrc_board_spec;
 
+
   component wrc_board_spec is
     generic (
       g_simulation                : integer := 0;
       g_with_external_clock_input : integer := 1;
-      g_fabric_iface              : string  := "PLAINFBRC";
+      g_aux_clks                  : integer := 0;
+      g_fabric_iface              : string  := "plainfbrc";
       g_tx_streamer_width         : integer := 32;
       g_rx_streamer_width         : integer := 32;
       g_dpram_initf               : string  := "default_xilinx";
@@ -105,110 +123,127 @@ package wr_spec_pkg is
       g_diag_ro_vector_width      : integer := 0;
       g_diag_rw_vector_width      : integer := 0);
     port (
-      areset_n_i          : in  std_logic;
-      clk_20m_vcxo_i      : in  std_logic;
-      clk_125m_pllref_p_i : in  std_logic;
-      clk_125m_pllref_n_i : in  std_logic;
-      clk_125m_gtp_n_i    : in  std_logic;
-      clk_125m_gtp_p_i    : in  std_logic;
-      clk_10m_ext_ref_i   : in  std_logic                                               := '0';
-      clk_sys_62m5_o      : out std_logic;
-      clk_ref_125m_o      : out std_logic;
-      rst_62m5_n_o        : out std_logic;
-      rst_125m_n_o        : out std_logic;
-      plldac_sclk_o       : out std_logic;
-      plldac_din_o        : out std_logic;
-      pll25dac_cs_n_o     : out std_logic;
-      pll20dac_cs_n_o     : out std_logic;
-      sfp_txp_o           : out std_logic;
-      sfp_txn_o           : out std_logic;
-      sfp_rxp_i           : in  std_logic;
-      sfp_rxn_i           : in  std_logic;
-      sfp_det_i           : in  std_logic                                               := '1';
-      sfp_sda_i           : in  std_logic;
-      sfp_sda_o           : out std_logic;
-      sfp_scl_i           : in  std_logic;
-      sfp_scl_o           : out std_logic;
-      sfp_rate_select_o   : out std_logic;
-      sfp_tx_fault_i      : in  std_logic                                               := '0';
-      sfp_tx_disable_o    : out std_logic;
-      sfp_los_i           : in  std_logic                                               := '0';
-      eeprom_sda_i        : in  std_logic;
-      eeprom_sda_o        : out std_logic;
-      eeprom_scl_i        : in  std_logic;
-      eeprom_scl_o        : out std_logic;
-      onewire_i           : in  std_logic;
-      onewire_oen_o       : out std_logic;
-      uart_rxd_i          : in  std_logic;
-      uart_txd_o          : out std_logic;
-      flash_sclk_o        : out std_logic;
-      flash_ncs_o         : out std_logic;
-      flash_mosi_o        : out std_logic;
-      flash_miso_i        : in  std_logic;
-      wb_adr_i            : in  std_logic_vector(c_wishbone_address_width-1 downto 0)   := (others => '0');
-      wb_dat_i            : in  std_logic_vector(c_wishbone_data_width-1 downto 0)      := (others => '0');
-      wb_dat_o            : out std_logic_vector(c_wishbone_data_width-1 downto 0);
-      wb_sel_i            : in  std_logic_vector(c_wishbone_address_width/8-1 downto 0) := (others => '0');
-      wb_we_i             : in  std_logic                                               := '0';
-      wb_cyc_i            : in  std_logic                                               := '0';
-      wb_stb_i            : in  std_logic                                               := '0';
-      wb_ack_o            : out std_logic;
-      wb_int_o            : out std_logic;
-      wb_err_o            : out std_logic;
-      wb_rty_o            : out std_logic;
-      wb_stall_o          : out std_logic;
-      wrf_src_adr_o       : out std_logic_vector(1 downto 0);
-      wrf_src_dat_o       : out std_logic_vector(15 downto 0);
-      wrf_src_cyc_o       : out std_logic;
-      wrf_src_stb_o       : out std_logic;
-      wrf_src_we_o        : out std_logic;
-      wrf_src_sel_o       : out std_logic_vector(1 downto 0);
-      wrf_src_ack_i       : in  std_logic;
-      wrf_src_stall_i     : in  std_logic;
-      wrf_src_err_i       : in  std_logic;
-      wrf_src_rty_i       : in  std_logic;
-      wrf_snk_adr_i       : in  std_logic_vector(1 downto 0);
-      wrf_snk_dat_i       : in  std_logic_vector(15 downto 0);
-      wrf_snk_cyc_i       : in  std_logic;
-      wrf_snk_stb_i       : in  std_logic;
-      wrf_snk_we_i        : in  std_logic;
-      wrf_snk_sel_i       : in  std_logic_vector(1 downto 0);
-      wrf_snk_ack_o       : out std_logic;
-      wrf_snk_stall_o     : out std_logic;
-      wrf_snk_err_o       : out std_logic;
-      wrf_snk_rty_o       : out std_logic;
-      wrs_tx_data_i       : in  std_logic_vector(g_tx_streamer_width-1 downto 0)           := (others => '0');
-      wrs_tx_valid_i      : in  std_logic                                               := '0';
-      wrs_tx_dreq_o       : out std_logic;
-      wrs_tx_last_i       : in  std_logic                                               := '1';
-      wrs_tx_flush_i      : in  std_logic                                               := '0';
-      wrs_rx_first_o      : out std_logic;
-      wrs_rx_last_o       : out std_logic;
-      wrs_rx_data_o       : out std_logic_vector(g_rx_streamer_width-1 downto 0);
-      wrs_rx_valid_o      : out std_logic;
-      wrs_rx_dreq_i       : in  std_logic                                               := '0';
-      wb_eth_adr_o        : out std_logic_vector(c_wishbone_address_width-1 downto 0);
-      wb_eth_dat_o        : out std_logic_vector(c_wishbone_data_width-1 downto 0);
-      wb_eth_dat_i        : in  std_logic_vector(c_wishbone_data_width-1 downto 0)      := (others => '0');
-      wb_eth_sel_o        : out std_logic_vector(c_wishbone_address_width/8-1 downto 0);
-      wb_eth_we_o         : out std_logic;
-      wb_eth_cyc_o        : out std_logic;
-      wb_eth_stb_o        : out std_logic;
-      wb_eth_ack_i        : in  std_logic                                               := '0';
-      wb_eth_int_i        : in  std_logic                                               := '0';
-      wb_eth_err_i        : in  std_logic                                               := '0';
-      wb_eth_rty_i        : in  std_logic                                               := '0';
-      wb_eth_stall_i      : in  std_logic                                               := '0';
-      pps_ext_i           : in  std_logic;
-      pps_p_o             : out std_logic;
-      pps_led_o           : out std_logic;
-      tm_time_valid_o     : out std_logic;
-      tm_tai_o            : out std_logic_vector(39 downto 0);
-      tm_cycles_o         : out std_logic_vector(27 downto 0);
-      led_link_o          : out std_logic;
-      aux_diag_i          : in  std_logic_vector(g_diag_ro_vector_width - 1 downto 0) := (others => '0');
-      aux_diag_o          : out std_logic_vector(g_diag_rw_vector_width - 1 downto 0) := (others => '0');
-      led_act_o           : out std_logic);
+      areset_n_i           : in  std_logic;
+      clk_20m_vcxo_i       : in  std_logic;
+      clk_125m_pllref_p_i  : in  std_logic;
+      clk_125m_pllref_n_i  : in  std_logic;
+      clk_125m_gtp_n_i     : in  std_logic;
+      clk_125m_gtp_p_i     : in  std_logic;
+      clk_10m_ext_ref_i    : in  std_logic                                               := '0';
+      pps_ext_i            : in  std_logic                                               := '0';
+      clk_sys_62m5_o       : out std_logic;
+      clk_ref_125m_o       : out std_logic;
+      rst_sys_62m5_n_o     : out std_logic;
+      rst_ref_125m_n_o     : out std_logic;
+      plldac_sclk_o        : out std_logic;
+      plldac_din_o         : out std_logic;
+      pll25dac_cs_n_o      : out std_logic;
+      pll20dac_cs_n_o      : out std_logic;
+      sfp_txp_o            : out std_logic;
+      sfp_txn_o            : out std_logic;
+      sfp_rxp_i            : in  std_logic;
+      sfp_rxn_i            : in  std_logic;
+      sfp_det_i            : in  std_logic                                               := '1';
+      sfp_sda_i            : in  std_logic;
+      sfp_sda_o            : out std_logic;
+      sfp_scl_i            : in  std_logic;
+      sfp_scl_o            : out std_logic;
+      sfp_rate_select_o    : out std_logic;
+      sfp_tx_fault_i       : in  std_logic                                               := '0';
+      sfp_tx_disable_o     : out std_logic;
+      sfp_los_i            : in  std_logic                                               := '0';
+      eeprom_sda_i         : in  std_logic;
+      eeprom_sda_o         : out std_logic;
+      eeprom_scl_i         : in  std_logic;
+      eeprom_scl_o         : out std_logic;
+      onewire_i            : in  std_logic;
+      onewire_oen_o        : out std_logic;
+      uart_rxd_i           : in  std_logic;
+      uart_txd_o           : out std_logic;
+      flash_sclk_o         : out std_logic;
+      flash_ncs_o          : out std_logic;
+      flash_mosi_o         : out std_logic;
+      flash_miso_i         : in  std_logic;
+      wb_adr_i             : in  std_logic_vector(c_wishbone_address_width-1 downto 0)   := (others => '0');
+      wb_dat_i             : in  std_logic_vector(c_wishbone_data_width-1 downto 0)      := (others => '0');
+      wb_dat_o             : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+      wb_sel_i             : in  std_logic_vector(c_wishbone_address_width/8-1 downto 0) := (others => '0');
+      wb_we_i              : in  std_logic                                               := '0';
+      wb_cyc_i             : in  std_logic                                               := '0';
+      wb_stb_i             : in  std_logic                                               := '0';
+      wb_ack_o             : out std_logic;
+      wb_int_o             : out std_logic;
+      wb_err_o             : out std_logic;
+      wb_rty_o             : out std_logic;
+      wb_stall_o           : out std_logic;
+      wrf_src_adr_o        : out std_logic_vector(1 downto 0);
+      wrf_src_dat_o        : out std_logic_vector(15 downto 0);
+      wrf_src_cyc_o        : out std_logic;
+      wrf_src_stb_o        : out std_logic;
+      wrf_src_we_o         : out std_logic;
+      wrf_src_sel_o        : out std_logic_vector(1 downto 0);
+      wrf_src_ack_i        : in  std_logic;
+      wrf_src_stall_i      : in  std_logic;
+      wrf_src_err_i        : in  std_logic;
+      wrf_src_rty_i        : in  std_logic;
+      wrf_snk_adr_i        : in  std_logic_vector(1 downto 0);
+      wrf_snk_dat_i        : in  std_logic_vector(15 downto 0);
+      wrf_snk_cyc_i        : in  std_logic;
+      wrf_snk_stb_i        : in  std_logic;
+      wrf_snk_we_i         : in  std_logic;
+      wrf_snk_sel_i        : in  std_logic_vector(1 downto 0);
+      wrf_snk_ack_o        : out std_logic;
+      wrf_snk_stall_o      : out std_logic;
+      wrf_snk_err_o        : out std_logic;
+      wrf_snk_rty_o        : out std_logic;
+      wrs_tx_data_i        : in  std_logic_vector(g_tx_streamer_width-1 downto 0)        := (others => '0');
+      wrs_tx_valid_i       : in  std_logic                                               := '0';
+      wrs_tx_dreq_o        : out std_logic;
+      wrs_tx_last_i        : in  std_logic                                               := '1';
+      wrs_tx_flush_i       : in  std_logic                                               := '0';
+      wrs_rx_first_o       : out std_logic;
+      wrs_rx_last_o        : out std_logic;
+      wrs_rx_data_o        : out std_logic_vector(g_rx_streamer_width-1 downto 0);
+      wrs_rx_valid_o       : out std_logic;
+      wrs_rx_dreq_i        : in  std_logic                                               := '0';
+      wb_eth_adr_o         : out std_logic_vector(c_wishbone_address_width-1 downto 0);
+      wb_eth_dat_o         : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+      wb_eth_dat_i         : in  std_logic_vector(c_wishbone_data_width-1 downto 0)      := (others => '0');
+      wb_eth_sel_o         : out std_logic_vector(c_wishbone_address_width/8-1 downto 0);
+      wb_eth_we_o          : out std_logic;
+      wb_eth_cyc_o         : out std_logic;
+      wb_eth_stb_o         : out std_logic;
+      wb_eth_ack_i         : in  std_logic                                               := '0';
+      wb_eth_int_i         : in  std_logic                                               := '0';
+      wb_eth_err_i         : in  std_logic                                               := '0';
+      wb_eth_rty_i         : in  std_logic                                               := '0';
+      wb_eth_stall_i       : in  std_logic                                               := '0';
+      aux_diag_i           : in  std_logic_vector(g_diag_ro_vector_width - 1 downto 0)   := (others => '0');
+      aux_diag_o           : out std_logic_vector(g_diag_rw_vector_width - 1 downto 0)   := (others => '0');
+      tm_dac_value_o       : out std_logic_vector(23 downto 0);
+      tm_dac_wr_o          : out std_logic_vector(g_aux_clks-1 downto 0);
+      tm_clk_aux_lock_en_i : in  std_logic_vector(g_aux_clks-1 downto 0)                 := (others => '0');
+      tm_clk_aux_locked_o  : out std_logic_vector(g_aux_clks-1 downto 0);
+      tstamps_stb_o        : out std_logic;
+      tstamps_tsval_o      : out std_logic_vector(31 downto 0);
+      tstamps_port_id_o    : out std_logic_vector(5 downto 0);
+      tstamps_frame_id_o   : out std_logic_vector(15 downto 0);
+      tstamps_incorrect_o  : out std_logic;
+      tstamps_ack_i        : in  std_logic                                               := '1';
+      fc_tx_pause_req_i    : in  std_logic                                               := '0';
+      fc_tx_pause_delay_i  : in  std_logic_vector(15 downto 0)                           := x"0000";
+      fc_tx_pause_ready_o  : out std_logic;
+      tm_link_up_o         : out std_logic;
+      tm_time_valid_o      : out std_logic;
+      tm_tai_o             : out std_logic_vector(39 downto 0);
+      tm_cycles_o          : out std_logic_vector(27 downto 0);
+      led_act_o            : out std_logic;
+      led_link_o           : out std_logic;
+      btn1_i               : in  std_logic                                               := '1';
+      btn2_i               : in  std_logic                                               := '1';
+      pps_p_o              : out std_logic;
+      pps_led_o            : out std_logic;
+      link_ok_o            : out std_logic);
   end component wrc_board_spec;
 
 end wr_spec_pkg;
diff --git a/board/spec/wrc_board_spec.vhd b/board/spec/wrc_board_spec.vhd
index cac1163f1c7cfa914b6104e75f055f8207c0e718..2038bc64819638a8ae1dc822f568359097855cb1 100644
--- a/board/spec/wrc_board_spec.vhd
+++ b/board/spec/wrc_board_spec.vhd
@@ -6,8 +6,8 @@
 -- File       : wrc_board_spec.vhd
 -- Author(s)  : Grzegorz Daniluk <grzegorz.daniluk@cern.ch>
 -- Company    : CERN (BE-CO-HT)
--- Created    : 2016-02-17
--- Last update: 2017-03-07
+-- Created    : 2017-02-17
+-- Last update: 2017-03-08
 -- Standard   : VHDL'93
 -------------------------------------------------------------------------------
 -- Description: Top-level wrapper for WR PTP core including all the modules
@@ -59,6 +59,8 @@ entity wrc_board_spec is
     g_simulation                : integer := 0;
     -- Select whether to include external ref clock input
     g_with_external_clock_input : integer := 1;
+    -- Number of aux clocks syntonized by WRPC to WR timebase
+    g_aux_clks                  : integer := 0;
     -- "plainfbrc" = expose WRC fabric interface
     -- "streamers" = attach WRC streamers to fabric interface
     -- "etherbone" = attach Etherbone slave to fabric interface
@@ -69,46 +71,39 @@ entity wrc_board_spec is
     -- memory initialisation file for embedded CPU
     g_dpram_initf               : string  := "default_xilinx";
     -- identification (id and ver) of the layout of words in the generic diag interface
-    g_diag_id                   : integer                        := 0;
-    g_diag_ver                  : integer                        := 0;
+    g_diag_id                   : integer := 0;
+    g_diag_ver                  : integer := 0;
     -- size the generic diag interface
-    g_diag_ro_vector_width      : integer                        := 0;
-    g_diag_rw_vector_width      : integer                        := 0
+    g_diag_ro_vector_width      : integer := 0;
+    g_diag_rw_vector_width      : integer := 0
     );
   port (
     ---------------------------------------------------------------------------
     -- Clocks/resets
     ---------------------------------------------------------------------------
-
     -- Reset from system fpga
-    areset_n_i : in std_logic;
-
+    areset_n_i          : in  std_logic;
     -- Clock inputs from the board
-    clk_20m_vcxo_i : in std_logic;
-
-    clk_125m_pllref_p_i : in std_logic;
-    clk_125m_pllref_n_i : in std_logic;
-
-    clk_125m_gtp_n_i : in std_logic;
-    clk_125m_gtp_p_i : in std_logic;
-
+    clk_20m_vcxo_i      : in  std_logic;
+    clk_125m_pllref_p_i : in  std_logic;
+    clk_125m_pllref_n_i : in  std_logic;
+    clk_125m_gtp_n_i    : in  std_logic;
+    clk_125m_gtp_p_i    : in  std_logic;
     -- 10MHz ext ref clock input (g_with_external_clock_input = TRUE)
-    clk_10m_ext_ref_i : in std_logic := '0';
-
+    clk_10m_ext_ref_i   : in  std_logic := '0';
+    -- External PPS input (g_with_external_clock_input = TRUE)
+    pps_ext_i           : in  std_logic := '0';
     -- 62.5MHz sys clock output
-    clk_sys_62m5_o : out std_logic;
-
+    clk_sys_62m5_o      : out std_logic;
     -- 125MHz ref clock output
-    clk_ref_125m_o : out std_logic;
-
+    clk_ref_125m_o      : out std_logic;
     -- active low reset outputs, synchronous to 62m5 and 125m clocks
-    rst_62m5_n_o   : out std_logic;
-    rst_125m_n_o   : out std_logic;
+    rst_sys_62m5_n_o    : out std_logic;
+    rst_ref_125m_n_o    : out std_logic;
 
     ---------------------------------------------------------------------------
     -- Shared SPI interface to DACs
     ---------------------------------------------------------------------------
-
     plldac_sclk_o   : out std_logic;
     plldac_din_o    : out std_logic;
     pll25dac_cs_n_o : out std_logic;
@@ -117,7 +112,6 @@ entity wrc_board_spec is
     ---------------------------------------------------------------------------
     -- SFP I/O for transceiver and SFP management info
     ---------------------------------------------------------------------------
-
     sfp_txp_o         : out std_logic;
     sfp_txn_o         : out std_logic;
     sfp_rxp_i         : in  std_logic;
@@ -135,7 +129,6 @@ entity wrc_board_spec is
     ---------------------------------------------------------------------------
     -- I2C EEPROM
     ---------------------------------------------------------------------------
-
     eeprom_sda_i : in  std_logic;
     eeprom_sda_o : out std_logic;
     eeprom_scl_i : in  std_logic;
@@ -144,21 +137,18 @@ entity wrc_board_spec is
     ---------------------------------------------------------------------------
     -- Onewire interface
     ---------------------------------------------------------------------------
-
     onewire_i     : in  std_logic;
     onewire_oen_o : out std_logic;
 
     ---------------------------------------------------------------------------
     -- UART
     ---------------------------------------------------------------------------
-
     uart_rxd_i : in  std_logic;
     uart_txd_o : out std_logic;
 
     ---------------------------------------------------------------------------
     -- Flash memory SPI interface
     ---------------------------------------------------------------------------
-
     flash_sclk_o : out std_logic;
     flash_ncs_o  : out std_logic;
     flash_mosi_o : out std_logic;
@@ -167,7 +157,6 @@ entity wrc_board_spec is
     ---------------------------------------------------------------------------
     -- External WB interface
     ---------------------------------------------------------------------------
-
     wb_adr_i   : in  std_logic_vector(c_wishbone_address_width-1 downto 0)   := (others => '0');
     wb_dat_i   : in  std_logic_vector(c_wishbone_data_width-1 downto 0)      := (others => '0');
     wb_dat_o   : out std_logic_vector(c_wishbone_data_width-1 downto 0);
@@ -184,7 +173,6 @@ entity wrc_board_spec is
     ---------------------------------------------------------------------------
     -- WR fabric interface (when g_fabric_iface = "plain")
     ---------------------------------------------------------------------------
-
     wrf_src_adr_o   : out std_logic_vector(1 downto 0);
     wrf_src_dat_o   : out std_logic_vector(15 downto 0);
     wrf_src_cyc_o   : out std_logic;
@@ -209,22 +197,20 @@ entity wrc_board_spec is
     ---------------------------------------------------------------------------
     -- WR streamers (when g_fabric_iface = "streamers")
     ---------------------------------------------------------------------------
-
     wrs_tx_data_i  : in  std_logic_vector(g_tx_streamer_width-1 downto 0) := (others => '0');
-    wrs_tx_valid_i : in  std_logic                                     := '0';
+    wrs_tx_valid_i : in  std_logic                                        := '0';
     wrs_tx_dreq_o  : out std_logic;
-    wrs_tx_last_i  : in  std_logic                                     := '1';
-    wrs_tx_flush_i : in  std_logic                                     := '0';
+    wrs_tx_last_i  : in  std_logic                                        := '1';
+    wrs_tx_flush_i : in  std_logic                                        := '0';
     wrs_rx_first_o : out std_logic;
     wrs_rx_last_o  : out std_logic;
     wrs_rx_data_o  : out std_logic_vector(g_rx_streamer_width-1 downto 0);
     wrs_rx_valid_o : out std_logic;
-    wrs_rx_dreq_i  : in  std_logic                                     := '0';
+    wrs_rx_dreq_i  : in  std_logic                                        := '0';
 
     ---------------------------------------------------------------------------
     -- Etherbone WB master interface (when g_fabric_iface = "etherbone")
     ---------------------------------------------------------------------------
-
     wb_eth_adr_o   : out std_logic_vector(c_wishbone_address_width-1 downto 0);
     wb_eth_dat_o   : out std_logic_vector(c_wishbone_data_width-1 downto 0);
     wb_eth_dat_i   : in  std_logic_vector(c_wishbone_data_width-1 downto 0) := (others => '0');
@@ -239,19 +225,57 @@ entity wrc_board_spec is
     wb_eth_stall_i : in  std_logic                                          := '0';
 
     ---------------------------------------------------------------------------
-    -- WRPC timing interface and status
+    -- Generic diagnostics interface (access from WRPC via SNMP or uart console
     ---------------------------------------------------------------------------
+    aux_diag_i : in  std_logic_vector(g_diag_ro_vector_width - 1 downto 0) := (others => '0');
+    aux_diag_o : out std_logic_vector(g_diag_rw_vector_width - 1 downto 0) := (others => '0');
 
-    pps_ext_i       : in  std_logic                                         := '0';
-    pps_p_o         : out std_logic;
-    pps_led_o       : out std_logic;
+    ---------------------------------------------------------------------------
+    -- Aux clocks control
+    ---------------------------------------------------------------------------
+    tm_dac_value_o       : out std_logic_vector(23 downto 0);
+    tm_dac_wr_o          : out std_logic_vector(g_aux_clks-1 downto 0);
+    tm_clk_aux_lock_en_i : in  std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+    tm_clk_aux_locked_o  : out std_logic_vector(g_aux_clks-1 downto 0);
+
+    ---------------------------------------------------------------------------
+    -- External Tx Timestamping I/F
+    ---------------------------------------------------------------------------
+    tstamps_stb_o       : out std_logic;
+    tstamps_tsval_o     : out std_logic_vector(31 downto 0);
+    tstamps_port_id_o   : out std_logic_vector(5 downto 0);
+    tstamps_frame_id_o  : out std_logic_vector(15 downto 0);
+    tstamps_incorrect_o : out std_logic;
+    tstamps_ack_i       : in  std_logic := '1';
+
+    ---------------------------------------------------------------------------
+    -- Pause Frame Control
+    ---------------------------------------------------------------------------
+    fc_tx_pause_req_i   : in  std_logic                     := '0';
+    fc_tx_pause_delay_i : in  std_logic_vector(15 downto 0) := x"0000";
+    fc_tx_pause_ready_o : out std_logic;
+
+    ---------------------------------------------------------------------------
+    -- Timecode I/F
+    ---------------------------------------------------------------------------
+    tm_link_up_o    : out std_logic;
     tm_time_valid_o : out std_logic;
     tm_tai_o        : out std_logic_vector(39 downto 0);
     tm_cycles_o     : out std_logic_vector(27 downto 0);
-    led_link_o      : out std_logic;
-    aux_diag_i      : in  std_logic_vector(g_diag_ro_vector_width - 1 downto 0) := (others => '0');
-    aux_diag_o      : out std_logic_vector(g_diag_rw_vector_width - 1 downto 0) := (others => '0');
-    led_act_o       : out std_logic);
+
+    ---------------------------------------------------------------------------
+    -- Buttons, LEDs and PPS output
+    ---------------------------------------------------------------------------
+    led_act_o  : out std_logic;
+    led_link_o : out std_logic;
+    btn1_i     : in  std_logic := '1';
+    btn2_i     : in  std_logic := '1';
+    -- 1PPS output
+    pps_p_o    : out std_logic;
+    pps_led_o  : out std_logic;
+    -- Link ok indication
+    link_ok_o  : out std_logic
+    );
 
 end entity wrc_board_spec;
 
@@ -277,12 +301,14 @@ architecture std_wrapper of wrc_board_spec is
   signal wb_eth_master_in  : t_wishbone_master_in;
 
   -- Aux diagnostics
-  constant c_diag_ro_size  : integer:= g_diag_ro_vector_width/32;
-  constant c_diag_rw_size  : integer:= g_diag_rw_vector_width/32;
+  constant c_diag_ro_size : integer := g_diag_ro_vector_width/32;
+  constant c_diag_rw_size : integer := g_diag_rw_vector_width/32;
 
   signal aux_diag_in  : t_generic_word_array(c_diag_ro_size-1 downto 0);
   signal aux_diag_out : t_generic_word_array(c_diag_rw_size-1 downto 0);
 
+  -- External Tx Timestamping I/F
+  signal timestamps_out : t_txtsu_timestamp;
 
 begin  -- architecture struct
 
@@ -338,15 +364,20 @@ begin  -- architecture struct
   wb_eth_master_in.rty   <= wb_eth_rty_i;
   wb_eth_master_in.stall <= wb_eth_stall_i;
 
-  -- auxiliary diagnostics
-  aux_diag_in <= f_de_vectorize_diag(aux_diag_i,g_diag_ro_vector_width);
+  aux_diag_in <= f_de_vectorize_diag(aux_diag_i, g_diag_ro_vector_width);
   aux_diag_o  <= f_vectorize_diag(aux_diag_out, g_diag_rw_vector_width);
 
+  tstamps_stb_o      <= timestamps_out.stb;
+  tstamps_tsval_o    <= timestamps_out.tsval;
+  tstamps_port_id_o  <= timestamps_out.port_id;
+  tstamps_frame_id_o <= timestamps_out.frame_id;
+
   -- Instantiate the records-based module
   cmp_xwrc_board_spec : xwrc_board_spec
     generic map (
       g_simulation                => g_simulation,
       g_with_external_clock_input => f_int2bool(g_with_external_clock_input),
+      g_aux_clks                  => g_aux_clks,
       g_fabric_iface              => f_str2iface_type(g_fabric_iface),
       g_tx_streamer_width         => g_tx_streamer_width,
       g_rx_streamer_width         => g_rx_streamer_width,
@@ -356,73 +387,86 @@ begin  -- architecture struct
       g_diag_ro_size              => c_diag_ro_size,
       g_diag_rw_size              => c_diag_rw_size)
     port map (
-      areset_n_i          => areset_n_i,
-      clk_20m_vcxo_i      => clk_20m_vcxo_i,
-      clk_125m_pllref_p_i => clk_125m_pllref_p_i,
-      clk_125m_pllref_n_i => clk_125m_pllref_n_i,
-      clk_125m_gtp_n_i    => clk_125m_gtp_n_i,
-      clk_125m_gtp_p_i    => clk_125m_gtp_p_i,
-      clk_10m_ext_ref_i   => clk_10m_ext_ref_i,
-      clk_sys_62m5_o      => clk_sys_62m5_o,
-      clk_ref_125m_o      => clk_ref_125m_o,
-      rst_62m5_n_o        => rst_62m5_n_o,
-      rst_125m_n_o        => rst_125m_n_o,
-      plldac_din_o        => plldac_din_o,
-      plldac_sclk_o       => plldac_sclk_o,
-      pll25dac_cs_n_o     => pll25dac_cs_n_o,
-      pll20dac_cs_n_o     => pll20dac_cs_n_o,
-      sfp_txp_o           => sfp_txp_o,
-      sfp_txn_o           => sfp_txn_o,
-      sfp_rxp_i           => sfp_rxp_i,
-      sfp_rxn_i           => sfp_rxn_i,
-      sfp_det_i           => sfp_det_i,
-      sfp_sda_i           => sfp_sda_i,
-      sfp_sda_o           => sfp_sda_o,
-      sfp_scl_i           => sfp_scl_i,
-      sfp_scl_o           => sfp_scl_o,
-      sfp_rate_select_o   => sfp_rate_select_o,
-      sfp_tx_fault_i      => sfp_tx_fault_i,
-      sfp_tx_disable_o    => sfp_tx_disable_o,
-      sfp_los_i           => sfp_los_i,
-      eeprom_sda_i        => eeprom_sda_i,
-      eeprom_sda_o        => eeprom_sda_o,
-      eeprom_scl_i        => eeprom_scl_i,
-      eeprom_scl_o        => eeprom_scl_o,
-      onewire_i           => onewire_i,
-      onewire_oen_o       => onewire_oen_o,
-      uart_rxd_i          => uart_rxd_i,
-      uart_txd_o          => uart_txd_o,
-      flash_sclk_o        => flash_sclk_o,
-      flash_ncs_o         => flash_ncs_o,
-      flash_mosi_o        => flash_mosi_o,
-      flash_miso_i        => flash_miso_i,
-      wb_slave_o          => wb_slave_out,
-      wb_slave_i          => wb_slave_in,
-      wrf_src_o           => wrf_src_out,
-      wrf_src_i           => wrf_src_in,
-      wrf_snk_o           => wrf_snk_out,
-      wrf_snk_i           => wrf_snk_in,
-      wrs_tx_data_i       => wrs_tx_data_i,
-      wrs_tx_valid_i      => wrs_tx_valid_i,
-      wrs_tx_dreq_o       => wrs_tx_dreq_o,
-      wrs_tx_last_i       => wrs_tx_last_i,
-      wrs_tx_flush_i      => wrs_tx_flush_i,
-      wrs_rx_first_o      => wrs_rx_first_o,
-      wrs_rx_last_o       => wrs_rx_last_o,
-      wrs_rx_data_o       => wrs_rx_data_o,
-      wrs_rx_valid_o      => wrs_rx_valid_o,
-      wrs_rx_dreq_i       => wrs_rx_dreq_i,
-      wb_eth_master_o     => wb_eth_master_out,
-      wb_eth_master_i     => wb_eth_master_in,
-      pps_ext_i           => pps_ext_i,
-      pps_p_o             => pps_p_o,
-      pps_led_o           => pps_led_o,
-      tm_time_valid_o     => tm_time_valid_o,
-      tm_tai_o            => tm_tai_o,
-      tm_cycles_o         => tm_cycles_o,
-      led_link_o          => led_link_o,
-      aux_diag_i          => aux_diag_in,
-      aux_diag_o          => aux_diag_out,
-      led_act_o           => led_act_o);
+      areset_n_i           => areset_n_i,
+      clk_20m_vcxo_i       => clk_20m_vcxo_i,
+      clk_125m_pllref_p_i  => clk_125m_pllref_p_i,
+      clk_125m_pllref_n_i  => clk_125m_pllref_n_i,
+      clk_125m_gtp_n_i     => clk_125m_gtp_n_i,
+      clk_125m_gtp_p_i     => clk_125m_gtp_p_i,
+      clk_10m_ext_ref_i    => clk_10m_ext_ref_i,
+      pps_ext_i            => pps_ext_i,
+      clk_sys_62m5_o       => clk_sys_62m5_o,
+      clk_ref_125m_o       => clk_ref_125m_o,
+      rst_sys_62m5_n_o     => rst_sys_62m5_n_o,
+      rst_ref_125m_n_o     => rst_ref_125m_n_o,
+      plldac_din_o         => plldac_din_o,
+      plldac_sclk_o        => plldac_sclk_o,
+      pll25dac_cs_n_o      => pll25dac_cs_n_o,
+      pll20dac_cs_n_o      => pll20dac_cs_n_o,
+      sfp_txp_o            => sfp_txp_o,
+      sfp_txn_o            => sfp_txn_o,
+      sfp_rxp_i            => sfp_rxp_i,
+      sfp_rxn_i            => sfp_rxn_i,
+      sfp_det_i            => sfp_det_i,
+      sfp_sda_i            => sfp_sda_i,
+      sfp_sda_o            => sfp_sda_o,
+      sfp_scl_i            => sfp_scl_i,
+      sfp_scl_o            => sfp_scl_o,
+      sfp_rate_select_o    => sfp_rate_select_o,
+      sfp_tx_fault_i       => sfp_tx_fault_i,
+      sfp_tx_disable_o     => sfp_tx_disable_o,
+      sfp_los_i            => sfp_los_i,
+      eeprom_sda_i         => eeprom_sda_i,
+      eeprom_sda_o         => eeprom_sda_o,
+      eeprom_scl_i         => eeprom_scl_i,
+      eeprom_scl_o         => eeprom_scl_o,
+      onewire_i            => onewire_i,
+      onewire_oen_o        => onewire_oen_o,
+      uart_rxd_i           => uart_rxd_i,
+      uart_txd_o           => uart_txd_o,
+      flash_sclk_o         => flash_sclk_o,
+      flash_ncs_o          => flash_ncs_o,
+      flash_mosi_o         => flash_mosi_o,
+      flash_miso_i         => flash_miso_i,
+      wb_slave_o           => wb_slave_out,
+      wb_slave_i           => wb_slave_in,
+      wrf_src_o            => wrf_src_out,
+      wrf_src_i            => wrf_src_in,
+      wrf_snk_o            => wrf_snk_out,
+      wrf_snk_i            => wrf_snk_in,
+      wrs_tx_data_i        => wrs_tx_data_i,
+      wrs_tx_valid_i       => wrs_tx_valid_i,
+      wrs_tx_dreq_o        => wrs_tx_dreq_o,
+      wrs_tx_last_i        => wrs_tx_last_i,
+      wrs_tx_flush_i       => wrs_tx_flush_i,
+      wrs_rx_first_o       => wrs_rx_first_o,
+      wrs_rx_last_o        => wrs_rx_last_o,
+      wrs_rx_data_o        => wrs_rx_data_o,
+      wrs_rx_valid_o       => wrs_rx_valid_o,
+      wrs_rx_dreq_i        => wrs_rx_dreq_i,
+      wb_eth_master_o      => wb_eth_master_out,
+      wb_eth_master_i      => wb_eth_master_in,
+      aux_diag_i           => aux_diag_in,
+      aux_diag_o           => aux_diag_out,
+      tm_dac_value_o       => tm_dac_value_o,
+      tm_dac_wr_o          => tm_dac_wr_o,
+      tm_clk_aux_lock_en_i => tm_clk_aux_lock_en_i,
+      tm_clk_aux_locked_o  => tm_clk_aux_locked_o,
+      timestamps_o         => timestamps_out,
+      timestamps_ack_i     => tstamps_ack_i,
+      fc_tx_pause_req_i    => fc_tx_pause_req_i,
+      fc_tx_pause_delay_i  => fc_tx_pause_delay_i,
+      fc_tx_pause_ready_o  => fc_tx_pause_ready_o,
+      tm_link_up_o         => tm_link_up_o,
+      tm_time_valid_o      => tm_time_valid_o,
+      tm_tai_o             => tm_tai_o,
+      tm_cycles_o          => tm_cycles_o,
+      led_act_o            => led_act_o,
+      led_link_o           => led_link_o,
+      btn1_i               => btn1_i,
+      btn2_i               => btn2_i,
+      pps_p_o              => pps_p_o,
+      pps_led_o            => pps_led_o,
+      link_ok_o            => link_ok_o);
 
 end architecture std_wrapper;
diff --git a/board/spec/xwrc_board_spec.vhd b/board/spec/xwrc_board_spec.vhd
index 4f6dcbc906ab7772a5afaa5542f96b95a64b3ad1..3d00ca639afca67d1831f51a43187b1cbd3fb000 100644
--- a/board/spec/xwrc_board_spec.vhd
+++ b/board/spec/xwrc_board_spec.vhd
@@ -7,7 +7,7 @@
 -- Author(s)  : Grzegorz Daniluk <grzegorz.daniluk@cern.ch>
 -- Company    : CERN (BE-CO-HT)
 -- Created    : 2017-02-17
--- Last update: 2017-03-07
+-- Last update: 2017-03-08
 -- Standard   : VHDL'93
 -------------------------------------------------------------------------------
 -- Description: Top-level wrapper for WR PTP core including all the modules
@@ -60,6 +60,8 @@ entity xwrc_board_spec is
     g_simulation                : integer              := 0;
     -- Select whether to include external ref clock input
     g_with_external_clock_input : boolean              := TRUE;
+    -- Number of aux clocks syntonized by WRPC to WR timebase
+    g_aux_clks                  : integer              := 0;
     -- plain     = expose WRC fabric interface
     -- streamers = attach WRC streamers to fabric interface
     -- etherbone = attach Etherbone slave to fabric interface
@@ -70,46 +72,41 @@ entity xwrc_board_spec is
     -- memory initialisation file for embedded CPU
     g_dpram_initf               : string               := "default_xilinx";
     -- identification (id and ver) of the layout of words in the generic diag interface
-    g_diag_id                   : integer                        := 0;
-    g_diag_ver                  : integer                        := 0;
+    g_diag_id                   : integer              := 0;
+    g_diag_ver                  : integer              := 0;
     -- size the generic diag interface
-    g_diag_ro_size              : integer                        := 0;
-    g_diag_rw_size              : integer                        := 0
+    g_diag_ro_size              : integer              := 0;
+    g_diag_rw_size              : integer              := 0
     );
   port (
     ---------------------------------------------------------------------------
     -- Clocks/resets
     ---------------------------------------------------------------------------
-
     -- Reset input (active low, can be async)
-    areset_n_i : in std_logic;
-
+    areset_n_i          : in  std_logic;
     -- Clock inputs from the board
-    clk_20m_vcxo_i : in std_logic;
-
-    clk_125m_pllref_p_i : in std_logic;
-    clk_125m_pllref_n_i : in std_logic;
-
-    clk_125m_gtp_n_i : in std_logic;
-    clk_125m_gtp_p_i : in std_logic;
-
+    clk_20m_vcxo_i      : in  std_logic;
+    clk_125m_pllref_p_i : in  std_logic;
+    clk_125m_pllref_n_i : in  std_logic;
+    clk_125m_gtp_n_i    : in  std_logic;
+    clk_125m_gtp_p_i    : in  std_logic;
+    -- Aux clocks, which can be disciplined by the WR Core
+    clk_aux_i           : in  std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
     -- 10MHz ext ref clock input (g_with_external_clock_input = TRUE)
-    clk_10m_ext_ref_i : in std_logic := '0';
-
+    clk_10m_ext_ref_i   : in  std_logic                               := '0';
+    -- External PPS input (g_with_external_clock_input = TRUE)
+    pps_ext_i           : in  std_logic                               := '0';
     -- 62.5MHz sys clock output
-    clk_sys_62m5_o : out std_logic;
-
+    clk_sys_62m5_o      : out std_logic;
     -- 125MHz ref clock output
-    clk_ref_125m_o : out std_logic;
-
+    clk_ref_125m_o      : out std_logic;
     -- active low reset outputs, synchronous to 62m5 and 125m clocks
-    rst_62m5_n_o : out std_logic;
-    rst_125m_n_o : out std_logic;
+    rst_sys_62m5_n_o    : out std_logic;
+    rst_ref_125m_n_o    : out std_logic;
 
     ---------------------------------------------------------------------------
     -- Shared SPI interface to DACs
     ---------------------------------------------------------------------------
-
     plldac_sclk_o   : out std_logic;
     plldac_din_o    : out std_logic;
     pll25dac_cs_n_o : out std_logic;
@@ -118,7 +115,6 @@ entity xwrc_board_spec is
     ---------------------------------------------------------------------------
     -- SFP I/O for transceiver and SFP management info
     ---------------------------------------------------------------------------
-
     sfp_txp_o         : out std_logic;
     sfp_txn_o         : out std_logic;
     sfp_rxp_i         : in  std_logic;
@@ -136,7 +132,6 @@ entity xwrc_board_spec is
     ---------------------------------------------------------------------------
     -- I2C EEPROM
     ---------------------------------------------------------------------------
-
     eeprom_sda_i : in  std_logic;
     eeprom_sda_o : out std_logic;
     eeprom_scl_i : in  std_logic;
@@ -145,21 +140,18 @@ entity xwrc_board_spec is
     ---------------------------------------------------------------------------
     -- Onewire interface
     ---------------------------------------------------------------------------
-
     onewire_i     : in  std_logic;
     onewire_oen_o : out std_logic;
 
     ---------------------------------------------------------------------------
     -- UART
     ---------------------------------------------------------------------------
-
     uart_rxd_i : in  std_logic;
     uart_txd_o : out std_logic;
 
     ---------------------------------------------------------------------------
     -- Flash memory SPI interface
     ---------------------------------------------------------------------------
-
     flash_sclk_o : out std_logic;
     flash_ncs_o  : out std_logic;
     flash_mosi_o : out std_logic;
@@ -168,14 +160,12 @@ entity xwrc_board_spec is
     ---------------------------------------------------------------------------
     -- External WB interface
     ---------------------------------------------------------------------------
-
     wb_slave_o : out t_wishbone_slave_out;
     wb_slave_i : in  t_wishbone_slave_in := cc_dummy_slave_in;
 
     ---------------------------------------------------------------------------
     -- WR fabric interface (when g_fabric_iface = "plainfbrc")
     ---------------------------------------------------------------------------
-
     wrf_src_o : out t_wrf_source_out;
     wrf_src_i : in  t_wrf_source_in := c_dummy_src_in;
     wrf_snk_o : out t_wrf_sink_out;
@@ -184,44 +174,71 @@ entity xwrc_board_spec is
     ---------------------------------------------------------------------------
     -- WR streamers (when g_fabric_iface = "streamers")
     ---------------------------------------------------------------------------
-
     wrs_tx_data_i  : in  std_logic_vector(g_tx_streamer_width-1 downto 0) := (others => '0');
-    wrs_tx_valid_i : in  std_logic                                     := '0';
+    wrs_tx_valid_i : in  std_logic                                        := '0';
     wrs_tx_dreq_o  : out std_logic;
-    wrs_tx_last_i  : in  std_logic                                     := '1';
-    wrs_tx_flush_i : in  std_logic                                     := '0';
+    wrs_tx_last_i  : in  std_logic                                        := '1';
+    wrs_tx_flush_i : in  std_logic                                        := '0';
     wrs_rx_first_o : out std_logic;
     wrs_rx_last_o  : out std_logic;
     wrs_rx_data_o  : out std_logic_vector(g_rx_streamer_width-1 downto 0);
     wrs_rx_valid_o : out std_logic;
-    wrs_rx_dreq_i  : in  std_logic                                     := '0';
+    wrs_rx_dreq_i  : in  std_logic                                        := '0';
 
     ---------------------------------------------------------------------------
     -- Etherbone WB master interface (when g_fabric_iface = "etherbone")
     ---------------------------------------------------------------------------
-
     wb_eth_master_o : out t_wishbone_master_out;
     wb_eth_master_i : in  t_wishbone_master_in := cc_dummy_master_in;
 
     ---------------------------------------------------------------------------
     -- Generic diagnostics interface (access from WRPC via SNMP or uart console
     ---------------------------------------------------------------------------
+    aux_diag_i : in  t_generic_word_array(g_diag_ro_size-1 downto 0) := (others => (others => '0'));
+    aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0);
 
-    aux_diag_i           : in  t_generic_word_array(g_diag_ro_size-1 downto 0) := (others =>(others=>'0'));
-    aux_diag_o           : out t_generic_word_array(g_diag_rw_size-1 downto 0);
+    ---------------------------------------------------------------------------
+    -- Aux clocks control
+    ---------------------------------------------------------------------------
+    tm_dac_value_o       : out std_logic_vector(23 downto 0);
+    tm_dac_wr_o          : out std_logic_vector(g_aux_clks-1 downto 0);
+    tm_clk_aux_lock_en_i : in  std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+    tm_clk_aux_locked_o  : out std_logic_vector(g_aux_clks-1 downto 0);
 
     ---------------------------------------------------------------------------
-    -- WRPC timing interface and status
+    -- External Tx Timestamping I/F
     ---------------------------------------------------------------------------
+    timestamps_o     : out t_txtsu_timestamp;
+    timestamps_ack_i : in  std_logic := '1';
 
-    pps_ext_i       : in  std_logic                                     := '0';
-    pps_p_o         : out std_logic;
-    pps_led_o       : out std_logic;
+    ---------------------------------------------------------------------------
+    -- Pause Frame Control
+    ---------------------------------------------------------------------------
+    fc_tx_pause_req_i   : in  std_logic                     := '0';
+    fc_tx_pause_delay_i : in  std_logic_vector(15 downto 0) := x"0000";
+    fc_tx_pause_ready_o : out std_logic;
+
+    ---------------------------------------------------------------------------
+    -- Timecode I/F
+    ---------------------------------------------------------------------------
+    tm_link_up_o    : out std_logic;
     tm_time_valid_o : out std_logic;
     tm_tai_o        : out std_logic_vector(39 downto 0);
     tm_cycles_o     : out std_logic_vector(27 downto 0);
-    led_link_o      : out std_logic;
-    led_act_o       : out std_logic);
+
+    ---------------------------------------------------------------------------
+    -- Buttons, LEDs and PPS output
+    ---------------------------------------------------------------------------
+    led_act_o  : out std_logic;
+    led_link_o : out std_logic;
+    btn1_i     : in  std_logic := '1';
+    btn2_i     : in  std_logic := '1';
+    -- 1PPS output
+    pps_p_o    : out std_logic;
+    pps_led_o  : out std_logic;
+    -- Link ok indication
+    link_ok_o  : out std_logic
+    );
 
 end entity xwrc_board_spec;
 
@@ -332,7 +349,7 @@ begin  -- architecture struct
 
   cmp_rstlogic_reset : gc_reset
     generic map (
-      g_clocks    => 2,                           -- 62.5MHz
+      g_clocks    => 2,                           -- 62.5MHz, 125MHz
       g_logdelay  => 4,                           -- 16 clock cycles
       g_syncdepth => 3)                           -- length of sync chains
     port map (
@@ -344,8 +361,8 @@ begin  -- architecture struct
   -- distribution of resets (already synchronized to their clock domains)
   rst_62m5_n <= rstlogic_rst_out(0);
 
-  rst_62m5_n_o <= rst_62m5_n;
-  rst_125m_n_o <= rstlogic_rst_out(1);
+  rst_sys_62m5_n_o <= rst_62m5_n;
+  rst_ref_125m_n_o <= rstlogic_rst_out(1);
 
   -----------------------------------------------------------------------------
   -- 2x SPI DAC
@@ -377,7 +394,7 @@ begin  -- architecture struct
       g_with_external_clock_input => g_with_external_clock_input,
       g_phys_uart                 => TRUE,
       g_virtual_uart              => TRUE,
-      g_aux_clks                  => 0,
+      g_aux_clks                  => g_aux_clks,
       g_ep_rxbuf_size             => 1024,
       g_tx_runt_padding           => TRUE,
       g_dpram_initf               => g_dpram_initf,
@@ -400,7 +417,7 @@ begin  -- architecture struct
       clk_sys_i            => clk_pll_62m5,
       clk_dmtd_i           => clk_pll_dmtd,
       clk_ref_i            => clk_pll_125m,
-      clk_aux_i            => (others => '0'),
+      clk_aux_i            => clk_aux_i,
       clk_ext_i            => clk_10m_ext,
       clk_ext_mul_i        => ext_ref_mul,
       clk_ext_mul_locked_i => ext_ref_mul_locked,
@@ -414,8 +431,6 @@ begin  -- architecture struct
       dac_dpll_data_o      => dac_dpll_data,
       phy8_o               => phy8_from_wrc,
       phy8_i               => phy8_to_wrc,
-      led_act_o            => led_act_o,
-      led_link_o           => led_link_o,
       scl_o                => eeprom_scl_o,
       scl_i                => eeprom_scl_i,
       sda_o                => eeprom_sda_o,
@@ -425,8 +440,6 @@ begin  -- architecture struct
       sfp_sda_o            => sfp_sda_o,
       sfp_sda_i            => sfp_sda_i,
       sfp_det_i            => sfp_det_i,
-      btn1_i               => '1',
-      btn2_i               => '1',
       spi_sclk_o           => flash_sclk_o,
       spi_ncs_o            => flash_ncs_o,
       spi_mosi_o           => flash_mosi_o,
@@ -454,24 +467,28 @@ begin  -- architecture struct
       wrs_rx_dreq_i        => wrs_rx_dreq_i,
       wb_eth_master_o      => wb_eth_master_o,
       wb_eth_master_i      => wb_eth_master_i,
-      timestamps_o         => open,
-      timestamps_ack_i     => '1',
-      fc_tx_pause_req_i    => '0',
-      fc_tx_pause_delay_i  => (others => '0'),
-      fc_tx_pause_ready_o  => open,
-      tm_link_up_o         => open,
-      tm_dac_value_o       => open,
-      tm_dac_wr_o          => open,
-      tm_clk_aux_lock_en_i => (others => '0'),
-      tm_clk_aux_locked_o  => open,
+      aux_diag_i           => aux_diag_i,
+      aux_diag_o           => aux_diag_o,
+      tm_dac_value_o       => tm_dac_value_o,
+      tm_dac_wr_o          => tm_dac_wr_o,
+      tm_clk_aux_lock_en_i => tm_clk_aux_lock_en_i,
+      tm_clk_aux_locked_o  => tm_clk_aux_locked_o,
+      timestamps_o         => timestamps_o,
+      timestamps_ack_i     => timestamps_ack_i,
+      fc_tx_pause_req_i    => fc_tx_pause_req_i,
+      fc_tx_pause_delay_i  => fc_tx_pause_delay_i,
+      fc_tx_pause_ready_o  => fc_tx_pause_ready_o,
+      tm_link_up_o         => tm_link_up_o,
       tm_time_valid_o      => tm_time_valid_o,
       tm_tai_o             => tm_tai_o,
       tm_cycles_o          => tm_cycles_o,
+      led_act_o            => led_act_o,
+      led_link_o           => led_link_o,
+      btn1_i               => btn1_i,
+      btn2_i               => btn2_i,
       pps_p_o              => pps_p_o,
       pps_led_o            => pps_led_o,
-      aux_diag_i           => aux_diag_i,
-      aux_diag_o           => aux_diag_o,
-      link_ok_o            => open);
+      link_ok_o            => link_ok_o);
 
   sfp_rate_select_o <= '1';
 
diff --git a/board/svec/wr_svec_pkg.vhd b/board/svec/wr_svec_pkg.vhd
index 6c375b53f934484ee908e602f1124a997a5fd542..29a7cffedeffa58975bae8353af8465ebb2a87cf 100644
--- a/board/svec/wr_svec_pkg.vhd
+++ b/board/svec/wr_svec_pkg.vhd
@@ -5,6 +5,7 @@ library work;
 use work.wishbone_pkg.all;
 use work.wrcore_pkg.all;
 use work.wr_fabric_pkg.all;
+use work.endpoint_pkg.all;
 use work.wr_board_pkg.all;
 
 package wr_svec_pkg is
@@ -13,7 +14,8 @@ package wr_svec_pkg is
     generic (
       g_simulation                : integer              := 0;
       g_with_external_clock_input : boolean              := TRUE;
-      g_fabric_iface              : t_board_fabric_iface := PLAIN;
+      g_aux_clks                  : integer              := 0;
+      g_fabric_iface              : t_board_fabric_iface := plain;
       g_tx_streamer_width         : integer              := 32;
       g_rx_streamer_width         : integer              := 32;
       g_dpram_initf               : string               := "default_xilinx";
@@ -22,195 +24,229 @@ package wr_svec_pkg is
       g_diag_ro_size              : integer              := 0;
       g_diag_rw_size              : integer              := 0);
     port (
-      areset_n_i          : in  std_logic;
-      clk_20m_vcxo_i      : in  std_logic;
-      clk_125m_pllref_p_i : in  std_logic;
-      clk_125m_pllref_n_i : in  std_logic;
-      clk_125m_gtp_n_i    : in  std_logic;
-      clk_125m_gtp_p_i    : in  std_logic;
-      clk_10m_ext_ref_i   : in  std_logic                                     := '0';
-      clk_sys_62m5_o      : out std_logic;
-      clk_ref_125m_o      : out std_logic;
-      rst_sys_62m5_n_o    : out std_logic;
-      pll20dac_din_o      : out std_logic;
-      pll20dac_sclk_o     : out std_logic;
-      pll20dac_sync_n_o   : out std_logic;
-      pll25dac_din_o      : out std_logic;
-      pll25dac_sclk_o     : out std_logic;
-      pll25dac_sync_n_o   : out std_logic;
-      sfp_txp_o           : out std_logic;
-      sfp_txn_o           : out std_logic;
-      sfp_rxp_i           : in  std_logic;
-      sfp_rxn_i           : in  std_logic;
-      sfp_det_i           : in  std_logic                                     := '1';
-      sfp_sda_i           : in  std_logic;
-      sfp_sda_o           : out std_logic;
-      sfp_scl_i           : in  std_logic;
-      sfp_scl_o           : out std_logic;
-      sfp_rate_select_o   : out std_logic;
-      sfp_tx_fault_i      : in  std_logic                                     := '0';
-      sfp_tx_disable_o    : out std_logic;
-      sfp_los_i           : in  std_logic                                     := '0';
-      eeprom_sda_i        : in  std_logic;
-      eeprom_sda_o        : out std_logic;
-      eeprom_scl_i        : in  std_logic;
-      eeprom_scl_o        : out std_logic;
-      onewire_i           : in  std_logic;
-      onewire_oen_o       : out std_logic;
-      uart_rxd_i          : in  std_logic;
-      uart_txd_o          : out std_logic;
-      spi_sclk_o          : out std_logic;
-      spi_ncs_o           : out std_logic;
-      spi_mosi_o          : out std_logic;
-      spi_miso_i          : in  std_logic;
-      wb_slave_o          : out t_wishbone_slave_out;
-      wb_slave_i          : in  t_wishbone_slave_in                           := cc_dummy_slave_in;
-      wrf_src_o           : out t_wrf_source_out;
-      wrf_src_i           : in  t_wrf_source_in                               := c_dummy_src_in;
-      wrf_snk_o           : out t_wrf_sink_out;
-      wrf_snk_i           : in  t_wrf_sink_in                                 := c_dummy_snk_in;
-      wrs_tx_data_i       : in  std_logic_vector(g_tx_streamer_width-1 downto 0) := (others => '0');
-      wrs_tx_valid_i      : in  std_logic                                     := '0';
-      wrs_tx_dreq_o       : out std_logic;
-      wrs_tx_last_i       : in  std_logic                                     := '1';
-      wrs_tx_flush_i      : in  std_logic                                     := '0';
-      wrs_rx_first_o      : out std_logic;
-      wrs_rx_last_o       : out std_logic;
-      wrs_rx_data_o       : out std_logic_vector(g_rx_streamer_width-1 downto 0);
-      wrs_rx_valid_o      : out std_logic;
-      wrs_rx_dreq_i       : in  std_logic                                     := '0';
-      wb_eth_master_o     : out t_wishbone_master_out;
-      wb_eth_master_i     : in  t_wishbone_master_in                          := cc_dummy_master_in;
-      pps_ext_i           : in  std_logic                                     := '0';
-      pps_p_o             : out std_logic;
-      pps_led_o           : out std_logic;
-      tm_time_valid_o     : out std_logic;
-      tm_tai_o            : out std_logic_vector(39 downto 0);
-      tm_cycles_o         : out std_logic_vector(27 downto 0);
-      led_link_o          : out std_logic;
-      aux_diag_i          : in  t_generic_word_array(g_diag_ro_size-1 downto 0) := (others =>(others=>'0'));
-      aux_diag_o          : out t_generic_word_array(g_diag_rw_size-1 downto 0);
-      led_act_o           : out std_logic);
+      areset_n_i           : in  std_logic;
+      clk_20m_vcxo_i       : in  std_logic;
+      clk_125m_pllref_p_i  : in  std_logic;
+      clk_125m_pllref_n_i  : in  std_logic;
+      clk_125m_gtp_n_i     : in  std_logic;
+      clk_125m_gtp_p_i     : in  std_logic;
+      clk_aux_i            : in  std_logic_vector(g_aux_clks-1 downto 0)          := (others => '0');
+      clk_10m_ext_ref_i    : in  std_logic                                        := '0';
+      pps_ext_i            : in  std_logic                                        := '0';
+      clk_sys_62m5_o       : out std_logic;
+      clk_ref_125m_o       : out std_logic;
+      rst_sys_62m5_n_o     : out std_logic;
+      rst_ref_125m_n_o     : out std_logic;
+      pll20dac_din_o       : out std_logic;
+      pll20dac_sclk_o      : out std_logic;
+      pll20dac_sync_n_o    : out std_logic;
+      pll25dac_din_o       : out std_logic;
+      pll25dac_sclk_o      : out std_logic;
+      pll25dac_sync_n_o    : out std_logic;
+      sfp_txp_o            : out std_logic;
+      sfp_txn_o            : out std_logic;
+      sfp_rxp_i            : in  std_logic;
+      sfp_rxn_i            : in  std_logic;
+      sfp_det_i            : in  std_logic                                        := '1';
+      sfp_sda_i            : in  std_logic;
+      sfp_sda_o            : out std_logic;
+      sfp_scl_i            : in  std_logic;
+      sfp_scl_o            : out std_logic;
+      sfp_rate_select_o    : out std_logic;
+      sfp_tx_fault_i       : in  std_logic                                        := '0';
+      sfp_tx_disable_o     : out std_logic;
+      sfp_los_i            : in  std_logic                                        := '0';
+      eeprom_sda_i         : in  std_logic;
+      eeprom_sda_o         : out std_logic;
+      eeprom_scl_i         : in  std_logic;
+      eeprom_scl_o         : out std_logic;
+      onewire_i            : in  std_logic;
+      onewire_oen_o        : out std_logic;
+      uart_rxd_i           : in  std_logic;
+      uart_txd_o           : out std_logic;
+      spi_sclk_o           : out std_logic;
+      spi_ncs_o            : out std_logic;
+      spi_mosi_o           : out std_logic;
+      spi_miso_i           : in  std_logic;
+      wb_slave_o           : out t_wishbone_slave_out;
+      wb_slave_i           : in  t_wishbone_slave_in                              := cc_dummy_slave_in;
+      wrf_src_o            : out t_wrf_source_out;
+      wrf_src_i            : in  t_wrf_source_in                                  := c_dummy_src_in;
+      wrf_snk_o            : out t_wrf_sink_out;
+      wrf_snk_i            : in  t_wrf_sink_in                                    := c_dummy_snk_in;
+      wrs_tx_data_i        : in  std_logic_vector(g_tx_streamer_width-1 downto 0) := (others => '0');
+      wrs_tx_valid_i       : in  std_logic                                        := '0';
+      wrs_tx_dreq_o        : out std_logic;
+      wrs_tx_last_i        : in  std_logic                                        := '1';
+      wrs_tx_flush_i       : in  std_logic                                        := '0';
+      wrs_rx_first_o       : out std_logic;
+      wrs_rx_last_o        : out std_logic;
+      wrs_rx_data_o        : out std_logic_vector(g_rx_streamer_width-1 downto 0);
+      wrs_rx_valid_o       : out std_logic;
+      wrs_rx_dreq_i        : in  std_logic                                        := '0';
+      wb_eth_master_o      : out t_wishbone_master_out;
+      wb_eth_master_i      : in  t_wishbone_master_in                             := cc_dummy_master_in;
+      aux_diag_i           : in  t_generic_word_array(g_diag_ro_size-1 downto 0)  := (others => (others => '0'));
+      aux_diag_o           : out t_generic_word_array(g_diag_rw_size-1 downto 0);
+      tm_dac_value_o       : out std_logic_vector(23 downto 0);
+      tm_dac_wr_o          : out std_logic_vector(g_aux_clks-1 downto 0);
+      tm_clk_aux_lock_en_i : in  std_logic_vector(g_aux_clks-1 downto 0)          := (others => '0');
+      tm_clk_aux_locked_o  : out std_logic_vector(g_aux_clks-1 downto 0);
+      timestamps_o         : out t_txtsu_timestamp;
+      timestamps_ack_i     : in  std_logic                                        := '1';
+      fc_tx_pause_req_i    : in  std_logic                                        := '0';
+      fc_tx_pause_delay_i  : in  std_logic_vector(15 downto 0)                    := x"0000";
+      fc_tx_pause_ready_o  : out std_logic;
+      tm_link_up_o         : out std_logic;
+      tm_time_valid_o      : out std_logic;
+      tm_tai_o             : out std_logic_vector(39 downto 0);
+      tm_cycles_o          : out std_logic_vector(27 downto 0);
+      led_act_o            : out std_logic;
+      led_link_o           : out std_logic;
+      btn1_i               : in  std_logic                                        := '1';
+      btn2_i               : in  std_logic                                        := '1';
+      pps_p_o              : out std_logic;
+      pps_led_o            : out std_logic;
+      link_ok_o            : out std_logic);
   end component xwrc_board_svec;
 
   component wrc_board_svec is
     generic (
       g_simulation                : integer := 0;
       g_with_external_clock_input : integer := 1;
-      g_fabric_iface              : string  := "PLAINFBRC";
+      g_aux_clks                  : integer := 0;
+      g_fabric_iface              : string  := "plainfbrc";
       g_tx_streamer_width         : integer := 32;
       g_rx_streamer_width         : integer := 32;
       g_dpram_initf               : string  := "default_xilinx";
-      g_diag_id                   : integer                        := 0;
-      g_diag_ver                  : integer                        := 0;
-      g_diag_ro_vector_width      : integer                        := 0;
-      g_diag_rw_vector_width      : integer                        := 0);
+      g_diag_id                   : integer := 0;
+      g_diag_ver                  : integer := 0;
+      g_diag_ro_vector_width      : integer := 0;
+      g_diag_rw_vector_width      : integer := 0);
     port (
-      areset_n_i          : in  std_logic;
-      clk_20m_vcxo_i      : in  std_logic;
-      clk_125m_pllref_p_i : in  std_logic;
-      clk_125m_pllref_n_i : in  std_logic;
-      clk_125m_gtp_n_i    : in  std_logic;
-      clk_125m_gtp_p_i    : in  std_logic;
-      clk_10m_ext_ref_i   : in  std_logic                                               := '0';
-      clk_sys_62m5_o      : out std_logic;
-      clk_ref_125m_o      : out std_logic;
-      rst_sys_62m5_n_o    : out std_logic;
-      pll20dac_din_o      : out std_logic;
-      pll20dac_sclk_o     : out std_logic;
-      pll20dac_sync_n_o   : out std_logic;
-      pll25dac_din_o      : out std_logic;
-      pll25dac_sclk_o     : out std_logic;
-      pll25dac_sync_n_o   : out std_logic;
-      sfp_txp_o           : out std_logic;
-      sfp_txn_o           : out std_logic;
-      sfp_rxp_i           : in  std_logic;
-      sfp_rxn_i           : in  std_logic;
-      sfp_det_i           : in  std_logic                                               := '1';
-      sfp_sda_i           : in  std_logic;
-      sfp_sda_o           : out std_logic;
-      sfp_scl_i           : in  std_logic;
-      sfp_scl_o           : out std_logic;
-      sfp_rate_select_o   : out std_logic;
-      sfp_tx_fault_i      : in  std_logic                                               := '0';
-      sfp_tx_disable_o    : out std_logic;
-      sfp_los_i           : in  std_logic                                               := '0';
-      eeprom_sda_i        : in  std_logic;
-      eeprom_sda_o        : out std_logic;
-      eeprom_scl_i        : in  std_logic;
-      eeprom_scl_o        : out std_logic;
-      onewire_i           : in  std_logic;
-      onewire_oen_o       : out std_logic;
-      uart_rxd_i          : in  std_logic;
-      uart_txd_o          : out std_logic;
-      spi_sclk_o          : out std_logic;
-      spi_ncs_o           : out std_logic;
-      spi_mosi_o          : out std_logic;
-      spi_miso_i          : in  std_logic;
-      wb_adr_i            : in  std_logic_vector(c_wishbone_address_width-1 downto 0)   := (others => '0');
-      wb_dat_i            : in  std_logic_vector(c_wishbone_data_width-1 downto 0)      := (others => '0');
-      wb_dat_o            : out std_logic_vector(c_wishbone_data_width-1 downto 0);
-      wb_sel_i            : in  std_logic_vector(c_wishbone_address_width/8-1 downto 0) := (others => '0');
-      wb_we_i             : in  std_logic                                               := '0';
-      wb_cyc_i            : in  std_logic                                               := '0';
-      wb_stb_i            : in  std_logic                                               := '0';
-      wb_ack_o            : out std_logic;
-      wb_int_o            : out std_logic;
-      wb_err_o            : out std_logic;
-      wb_rty_o            : out std_logic;
-      wb_stall_o          : out std_logic;
-      wrf_src_adr_o       : out std_logic_vector(1 downto 0);
-      wrf_src_dat_o       : out std_logic_vector(15 downto 0);
-      wrf_src_cyc_o       : out std_logic;
-      wrf_src_stb_o       : out std_logic;
-      wrf_src_we_o        : out std_logic;
-      wrf_src_sel_o       : out std_logic_vector(1 downto 0);
-      wrf_src_ack_i       : in  std_logic;
-      wrf_src_stall_i     : in  std_logic;
-      wrf_src_err_i       : in  std_logic;
-      wrf_src_rty_i       : in  std_logic;
-      wrf_snk_adr_i       : in  std_logic_vector(1 downto 0);
-      wrf_snk_dat_i       : in  std_logic_vector(15 downto 0);
-      wrf_snk_cyc_i       : in  std_logic;
-      wrf_snk_stb_i       : in  std_logic;
-      wrf_snk_we_i        : in  std_logic;
-      wrf_snk_sel_i       : in  std_logic_vector(1 downto 0);
-      wrf_snk_ack_o       : out std_logic;
-      wrf_snk_stall_o     : out std_logic;
-      wrf_snk_err_o       : out std_logic;
-      wrf_snk_rty_o       : out std_logic;
-      wrs_tx_data_i       : in  std_logic_vector(g_tx_streamer_width-1 downto 0)           := (others => '0');
-      wrs_tx_valid_i      : in  std_logic                                               := '0';
-      wrs_tx_dreq_o       : out std_logic;
-      wrs_tx_last_i       : in  std_logic                                               := '1';
-      wrs_tx_flush_i      : in  std_logic                                               := '0';
-      wrs_rx_first_o      : out std_logic;
-      wrs_rx_last_o       : out std_logic;
-      wrs_rx_data_o       : out std_logic_vector(g_rx_streamer_width-1 downto 0);
-      wrs_rx_valid_o      : out std_logic;
-      wrs_rx_dreq_i       : in  std_logic                                               := '0';
-      wb_eth_adr_o        : out std_logic_vector(c_wishbone_address_width-1 downto 0);
-      wb_eth_dat_o        : out std_logic_vector(c_wishbone_data_width-1 downto 0);
-      wb_eth_dat_i        : in  std_logic_vector(c_wishbone_data_width-1 downto 0)      := (others => '0');
-      wb_eth_sel_o        : out std_logic_vector(c_wishbone_address_width/8-1 downto 0);
-      wb_eth_we_o         : out std_logic;
-      wb_eth_cyc_o        : out std_logic;
-      wb_eth_stb_o        : out std_logic;
-      wb_eth_ack_i        : in  std_logic                                               := '0';
-      wb_eth_int_i        : in  std_logic                                               := '0';
-      wb_eth_err_i        : in  std_logic                                               := '0';
-      wb_eth_rty_i        : in  std_logic                                               := '0';
-      wb_eth_stall_i      : in  std_logic                                               := '0';
-      pps_ext_i           : in  std_logic;
-      pps_p_o             : out std_logic;
-      pps_led_o           : out std_logic;
-      tm_time_valid_o     : out std_logic;
-      tm_tai_o            : out std_logic_vector(39 downto 0);
-      tm_cycles_o         : out std_logic_vector(27 downto 0);
-      led_link_o          : out std_logic;
-      aux_diag_i          : in  std_logic_vector(g_diag_ro_vector_width - 1 downto 0) := (others => '0');
-      aux_diag_o          : out std_logic_vector(g_diag_rw_vector_width - 1 downto 0) := (others => '0');
-      led_act_o           : out std_logic);
+      areset_n_i           : in  std_logic;
+      clk_20m_vcxo_i       : in  std_logic;
+      clk_125m_pllref_p_i  : in  std_logic;
+      clk_125m_pllref_n_i  : in  std_logic;
+      clk_125m_gtp_n_i     : in  std_logic;
+      clk_125m_gtp_p_i     : in  std_logic;
+      clk_10m_ext_ref_i    : in  std_logic                                               := '0';
+      pps_ext_i            : in  std_logic                                               := '0';
+      clk_sys_62m5_o       : out std_logic;
+      clk_ref_125m_o       : out std_logic;
+      rst_sys_62m5_n_o     : out std_logic;
+      rst_ref_125m_n_o     : out std_logic;
+      pll20dac_din_o       : out std_logic;
+      pll20dac_sclk_o      : out std_logic;
+      pll20dac_sync_n_o    : out std_logic;
+      pll25dac_din_o       : out std_logic;
+      pll25dac_sclk_o      : out std_logic;
+      pll25dac_sync_n_o    : out std_logic;
+      sfp_txp_o            : out std_logic;
+      sfp_txn_o            : out std_logic;
+      sfp_rxp_i            : in  std_logic;
+      sfp_rxn_i            : in  std_logic;
+      sfp_det_i            : in  std_logic                                               := '1';
+      sfp_sda_i            : in  std_logic;
+      sfp_sda_o            : out std_logic;
+      sfp_scl_i            : in  std_logic;
+      sfp_scl_o            : out std_logic;
+      sfp_rate_select_o    : out std_logic;
+      sfp_tx_fault_i       : in  std_logic                                               := '0';
+      sfp_tx_disable_o     : out std_logic;
+      sfp_los_i            : in  std_logic                                               := '0';
+      eeprom_sda_i         : in  std_logic;
+      eeprom_sda_o         : out std_logic;
+      eeprom_scl_i         : in  std_logic;
+      eeprom_scl_o         : out std_logic;
+      onewire_i            : in  std_logic;
+      onewire_oen_o        : out std_logic;
+      uart_rxd_i           : in  std_logic;
+      uart_txd_o           : out std_logic;
+      spi_sclk_o           : out std_logic;
+      spi_ncs_o            : out std_logic;
+      spi_mosi_o           : out std_logic;
+      spi_miso_i           : in  std_logic;
+      wb_adr_i             : in  std_logic_vector(c_wishbone_address_width-1 downto 0)   := (others => '0');
+      wb_dat_i             : in  std_logic_vector(c_wishbone_data_width-1 downto 0)      := (others => '0');
+      wb_dat_o             : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+      wb_sel_i             : in  std_logic_vector(c_wishbone_address_width/8-1 downto 0) := (others => '0');
+      wb_we_i              : in  std_logic                                               := '0';
+      wb_cyc_i             : in  std_logic                                               := '0';
+      wb_stb_i             : in  std_logic                                               := '0';
+      wb_ack_o             : out std_logic;
+      wb_int_o             : out std_logic;
+      wb_err_o             : out std_logic;
+      wb_rty_o             : out std_logic;
+      wb_stall_o           : out std_logic;
+      wrf_src_adr_o        : out std_logic_vector(1 downto 0);
+      wrf_src_dat_o        : out std_logic_vector(15 downto 0);
+      wrf_src_cyc_o        : out std_logic;
+      wrf_src_stb_o        : out std_logic;
+      wrf_src_we_o         : out std_logic;
+      wrf_src_sel_o        : out std_logic_vector(1 downto 0);
+      wrf_src_ack_i        : in  std_logic;
+      wrf_src_stall_i      : in  std_logic;
+      wrf_src_err_i        : in  std_logic;
+      wrf_src_rty_i        : in  std_logic;
+      wrf_snk_adr_i        : in  std_logic_vector(1 downto 0);
+      wrf_snk_dat_i        : in  std_logic_vector(15 downto 0);
+      wrf_snk_cyc_i        : in  std_logic;
+      wrf_snk_stb_i        : in  std_logic;
+      wrf_snk_we_i         : in  std_logic;
+      wrf_snk_sel_i        : in  std_logic_vector(1 downto 0);
+      wrf_snk_ack_o        : out std_logic;
+      wrf_snk_stall_o      : out std_logic;
+      wrf_snk_err_o        : out std_logic;
+      wrf_snk_rty_o        : out std_logic;
+      wrs_tx_data_i        : in  std_logic_vector(g_tx_streamer_width-1 downto 0)        := (others => '0');
+      wrs_tx_valid_i       : in  std_logic                                               := '0';
+      wrs_tx_dreq_o        : out std_logic;
+      wrs_tx_last_i        : in  std_logic                                               := '1';
+      wrs_tx_flush_i       : in  std_logic                                               := '0';
+      wrs_rx_first_o       : out std_logic;
+      wrs_rx_last_o        : out std_logic;
+      wrs_rx_data_o        : out std_logic_vector(g_rx_streamer_width-1 downto 0);
+      wrs_rx_valid_o       : out std_logic;
+      wrs_rx_dreq_i        : in  std_logic                                               := '0';
+      wb_eth_adr_o         : out std_logic_vector(c_wishbone_address_width-1 downto 0);
+      wb_eth_dat_o         : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+      wb_eth_dat_i         : in  std_logic_vector(c_wishbone_data_width-1 downto 0)      := (others => '0');
+      wb_eth_sel_o         : out std_logic_vector(c_wishbone_address_width/8-1 downto 0);
+      wb_eth_we_o          : out std_logic;
+      wb_eth_cyc_o         : out std_logic;
+      wb_eth_stb_o         : out std_logic;
+      wb_eth_ack_i         : in  std_logic                                               := '0';
+      wb_eth_int_i         : in  std_logic                                               := '0';
+      wb_eth_err_i         : in  std_logic                                               := '0';
+      wb_eth_rty_i         : in  std_logic                                               := '0';
+      wb_eth_stall_i       : in  std_logic                                               := '0';
+      aux_diag_i           : in  std_logic_vector(g_diag_ro_vector_width - 1 downto 0)   := (others => '0');
+      aux_diag_o           : out std_logic_vector(g_diag_rw_vector_width - 1 downto 0)   := (others => '0');
+      tm_dac_value_o       : out std_logic_vector(23 downto 0);
+      tm_dac_wr_o          : out std_logic_vector(g_aux_clks-1 downto 0);
+      tm_clk_aux_lock_en_i : in  std_logic_vector(g_aux_clks-1 downto 0)                 := (others => '0');
+      tm_clk_aux_locked_o  : out std_logic_vector(g_aux_clks-1 downto 0);
+      tstamps_stb_o        : out std_logic;
+      tstamps_tsval_o      : out std_logic_vector(31 downto 0);
+      tstamps_port_id_o    : out std_logic_vector(5 downto 0);
+      tstamps_frame_id_o   : out std_logic_vector(15 downto 0);
+      tstamps_incorrect_o  : out std_logic;
+      tstamps_ack_i        : in  std_logic                                               := '1';
+      fc_tx_pause_req_i    : in  std_logic                                               := '0';
+      fc_tx_pause_delay_i  : in  std_logic_vector(15 downto 0)                           := x"0000";
+      fc_tx_pause_ready_o  : out std_logic;
+      tm_link_up_o         : out std_logic;
+      tm_time_valid_o      : out std_logic;
+      tm_tai_o             : out std_logic_vector(39 downto 0);
+      tm_cycles_o          : out std_logic_vector(27 downto 0);
+      led_act_o            : out std_logic;
+      led_link_o           : out std_logic;
+      btn1_i               : in  std_logic                                               := '1';
+      btn2_i               : in  std_logic                                               := '1';
+      pps_p_o              : out std_logic;
+      pps_led_o            : out std_logic;
+      link_ok_o            : out std_logic);
   end component wrc_board_svec;
 
 end wr_svec_pkg;
diff --git a/board/svec/wrc_board_svec.vhd b/board/svec/wrc_board_svec.vhd
index 61f0031ae61f5d031acbc6cbb6d10e2100152a1b..4450b4a690939fef8db73d1cfedc3e1c5346b544 100644
--- a/board/svec/wrc_board_svec.vhd
+++ b/board/svec/wrc_board_svec.vhd
@@ -6,8 +6,8 @@
 -- File       : wrc_board_svec.vhd
 -- Author(s)  : Dimitrios Lampridis  <dimitrios.lampridis@cern.ch>
 -- Company    : CERN (BE-CO-HT)
--- Created    : 2016-02-16
--- Last update: 2017-02-22
+-- Created    : 2017-02-16
+-- Last update: 2017-03-08
 -- Standard   : VHDL'93
 -------------------------------------------------------------------------------
 -- Description: Top-level wrapper for WR PTP core including all the modules
@@ -16,7 +16,7 @@
 -- instantiation).
 -- http://www.ohwr.org/projects/svec/
 -------------------------------------------------------------------------------
--- Copyright (c) 2016-2017 CERN
+-- Copyright (c) 2017 CERN
 -------------------------------------------------------------------------------
 -- GNU LESSER GENERAL PUBLIC LICENSE
 --
@@ -59,6 +59,8 @@ entity wrc_board_svec is
     g_simulation                : integer := 0;
     -- Select whether to include external ref clock input
     g_with_external_clock_input : integer := 1;
+    -- Number of aux clocks syntonized by WRPC to WR timebase
+    g_aux_clks                  : integer := 0;
     -- "plainfbrc" = expose WRC fabric interface
     -- "streamers" = attach WRC streamers to fabric interface
     -- "etherbone" = attach Etherbone slave to fabric interface
@@ -69,43 +71,36 @@ entity wrc_board_svec is
     -- memory initialisation file for embedded CPU
     g_dpram_initf               : string  := "default_xilinx";
     -- identification (id and ver) of the layout of words in the generic diag interface
-    g_diag_id                   : integer                        := 0;
-    g_diag_ver                  : integer                        := 0;
+    g_diag_id                   : integer := 0;
+    g_diag_ver                  : integer := 0;
     -- size the generic diag interface
-    g_diag_ro_vector_width      : integer                        := 0;
-    g_diag_rw_vector_width      : integer                        := 0
+    g_diag_ro_vector_width      : integer := 0;
+    g_diag_rw_vector_width      : integer := 0
     );
   port (
     ---------------------------------------------------------------------------
     -- Clocks/resets
     ---------------------------------------------------------------------------
-
     -- Reset from system fpga
-    areset_n_i : in std_logic;
-
+    areset_n_i          : in  std_logic;
     -- Clock inputs from the board
-    clk_20m_vcxo_i : in std_logic;
-
-    clk_125m_pllref_p_i : in std_logic;
-    clk_125m_pllref_n_i : in std_logic;
-
-    clk_125m_gtp_n_i : in std_logic;
-    clk_125m_gtp_p_i : in std_logic;
-
+    clk_20m_vcxo_i      : in  std_logic;
+    clk_125m_pllref_p_i : in  std_logic;
+    clk_125m_pllref_n_i : in  std_logic;
+    clk_125m_gtp_n_i    : in  std_logic;
+    clk_125m_gtp_p_i    : in  std_logic;
     -- 10MHz ext ref clock input (g_with_external_clock_input = TRUE)
-    clk_10m_ext_ref_i : in std_logic := '0';
-
+    clk_10m_ext_ref_i   : in  std_logic := '0';
+    -- External PPS input (g_with_external_clock_input = TRUE)
+    pps_ext_i           : in  std_logic := '0';
     -- 62.5MHz sys clock output
-    clk_sys_62m5_o : out std_logic;
-
+    clk_sys_62m5_o      : out std_logic;
     -- 125MHz ref clock output
-    clk_ref_125m_o : out std_logic;
+    clk_ref_125m_o      : out std_logic;
+    -- active low reset outputs, synchronous to 62m5 and 125m clocks
+    rst_sys_62m5_n_o    : out std_logic;
+    rst_ref_125m_n_o    : out std_logic;
 
-    -- active low reset output, synchronous to clk_sys_62m5_o
-    rst_sys_62m5_n_o : out std_logic;
-
-    ---------------------------------------------------------------------------
-    -- SPI interfaces to DACs
     ---------------------------------------------------------------------------
 
     pll20dac_din_o    : out std_logic;
@@ -118,7 +113,6 @@ entity wrc_board_svec is
     ---------------------------------------------------------------------------
     -- SFP I/O for transceiver and SFP management info
     ---------------------------------------------------------------------------
-
     sfp_txp_o         : out std_logic;
     sfp_txn_o         : out std_logic;
     sfp_rxp_i         : in  std_logic;
@@ -136,7 +130,6 @@ entity wrc_board_svec is
     ---------------------------------------------------------------------------
     -- I2C EEPROM
     ---------------------------------------------------------------------------
-
     eeprom_sda_i : in  std_logic;
     eeprom_sda_o : out std_logic;
     eeprom_scl_i : in  std_logic;
@@ -145,14 +138,12 @@ entity wrc_board_svec is
     ---------------------------------------------------------------------------
     -- Onewire interface
     ---------------------------------------------------------------------------
-
     onewire_i     : in  std_logic;
     onewire_oen_o : out std_logic;
 
     ---------------------------------------------------------------------------
     -- UART
     ---------------------------------------------------------------------------
-
     uart_rxd_i : in  std_logic;
     uart_txd_o : out std_logic;
 
@@ -160,7 +151,6 @@ entity wrc_board_svec is
     -- SPI (flash is connected to SFPGA and routed to AFPGA
     -- once the boot process is complete)
     ---------------------------------------------------------------------------
-
     spi_sclk_o : out std_logic;
     spi_ncs_o  : out std_logic;
     spi_mosi_o : out std_logic;
@@ -169,7 +159,6 @@ entity wrc_board_svec is
     ---------------------------------------------------------------------------
     -- External WB interface
     ---------------------------------------------------------------------------
-
     wb_adr_i   : in  std_logic_vector(c_wishbone_address_width-1 downto 0)   := (others => '0');
     wb_dat_i   : in  std_logic_vector(c_wishbone_data_width-1 downto 0)      := (others => '0');
     wb_dat_o   : out std_logic_vector(c_wishbone_data_width-1 downto 0);
@@ -186,7 +175,6 @@ entity wrc_board_svec is
     ---------------------------------------------------------------------------
     -- WR fabric interface (when g_fabric_iface = "plain")
     ---------------------------------------------------------------------------
-
     wrf_src_adr_o   : out std_logic_vector(1 downto 0);
     wrf_src_dat_o   : out std_logic_vector(15 downto 0);
     wrf_src_cyc_o   : out std_logic;
@@ -211,22 +199,20 @@ entity wrc_board_svec is
     ---------------------------------------------------------------------------
     -- WR streamers (when g_fabric_iface = "streamers")
     ---------------------------------------------------------------------------
-
     wrs_tx_data_i  : in  std_logic_vector(g_tx_streamer_width-1 downto 0) := (others => '0');
-    wrs_tx_valid_i : in  std_logic                                     := '0';
+    wrs_tx_valid_i : in  std_logic                                        := '0';
     wrs_tx_dreq_o  : out std_logic;
-    wrs_tx_last_i  : in  std_logic                                     := '1';
-    wrs_tx_flush_i : in  std_logic                                     := '0';
+    wrs_tx_last_i  : in  std_logic                                        := '1';
+    wrs_tx_flush_i : in  std_logic                                        := '0';
     wrs_rx_first_o : out std_logic;
     wrs_rx_last_o  : out std_logic;
     wrs_rx_data_o  : out std_logic_vector(g_rx_streamer_width-1 downto 0);
     wrs_rx_valid_o : out std_logic;
-    wrs_rx_dreq_i  : in  std_logic                                     := '0';
+    wrs_rx_dreq_i  : in  std_logic                                        := '0';
 
     ---------------------------------------------------------------------------
     -- Etherbone WB master interface (when g_fabric_iface = "etherbone")
     ---------------------------------------------------------------------------
-
     wb_eth_adr_o   : out std_logic_vector(c_wishbone_address_width-1 downto 0);
     wb_eth_dat_o   : out std_logic_vector(c_wishbone_data_width-1 downto 0);
     wb_eth_dat_i   : in  std_logic_vector(c_wishbone_data_width-1 downto 0) := (others => '0');
@@ -241,19 +227,57 @@ entity wrc_board_svec is
     wb_eth_stall_i : in  std_logic                                          := '0';
 
     ---------------------------------------------------------------------------
-    -- WRPC timing interface and status
+    -- Generic diagnostics interface (access from WRPC via SNMP or uart console
     ---------------------------------------------------------------------------
+    aux_diag_i : in  std_logic_vector(g_diag_ro_vector_width - 1 downto 0) := (others => '0');
+    aux_diag_o : out std_logic_vector(g_diag_rw_vector_width - 1 downto 0) := (others => '0');
 
-    pps_ext_i       : in  std_logic                                         := '0';
-    pps_p_o         : out std_logic;
-    pps_led_o       : out std_logic;
+    ---------------------------------------------------------------------------
+    -- Aux clocks control
+    ---------------------------------------------------------------------------
+    tm_dac_value_o       : out std_logic_vector(23 downto 0);
+    tm_dac_wr_o          : out std_logic_vector(g_aux_clks-1 downto 0);
+    tm_clk_aux_lock_en_i : in  std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+    tm_clk_aux_locked_o  : out std_logic_vector(g_aux_clks-1 downto 0);
+
+    ---------------------------------------------------------------------------
+    -- External Tx Timestamping I/F
+    ---------------------------------------------------------------------------
+    tstamps_stb_o       : out std_logic;
+    tstamps_tsval_o     : out std_logic_vector(31 downto 0);
+    tstamps_port_id_o   : out std_logic_vector(5 downto 0);
+    tstamps_frame_id_o  : out std_logic_vector(15 downto 0);
+    tstamps_incorrect_o : out std_logic;
+    tstamps_ack_i       : in  std_logic := '1';
+
+    ---------------------------------------------------------------------------
+    -- Pause Frame Control
+    ---------------------------------------------------------------------------
+    fc_tx_pause_req_i   : in  std_logic                     := '0';
+    fc_tx_pause_delay_i : in  std_logic_vector(15 downto 0) := x"0000";
+    fc_tx_pause_ready_o : out std_logic;
+
+    ---------------------------------------------------------------------------
+    -- Timecode I/F
+    ---------------------------------------------------------------------------
+    tm_link_up_o    : out std_logic;
     tm_time_valid_o : out std_logic;
     tm_tai_o        : out std_logic_vector(39 downto 0);
     tm_cycles_o     : out std_logic_vector(27 downto 0);
-    led_link_o      : out std_logic;
-    aux_diag_i      : in  std_logic_vector(g_diag_ro_vector_width - 1 downto 0) := (others => '0');
-    aux_diag_o      : out std_logic_vector(g_diag_rw_vector_width - 1 downto 0) := (others => '0');
-    led_act_o       : out std_logic);
+
+    ---------------------------------------------------------------------------
+    -- Buttons, LEDs and PPS output
+    ---------------------------------------------------------------------------
+    led_act_o  : out std_logic;
+    led_link_o : out std_logic;
+    btn1_i     : in  std_logic := '1';
+    btn2_i     : in  std_logic := '1';
+    -- 1PPS output
+    pps_p_o    : out std_logic;
+    pps_led_o  : out std_logic;
+    -- Link ok indication
+    link_ok_o  : out std_logic
+    );
 
 end entity wrc_board_svec;
 
@@ -279,12 +303,15 @@ architecture std_wrapper of wrc_board_svec is
   signal wb_eth_master_in  : t_wishbone_master_in;
 
   -- Aux diagnostics
-  constant c_diag_ro_size  : integer:= g_diag_ro_vector_width/32;
-  constant c_diag_rw_size  : integer:= g_diag_rw_vector_width/32;
+  constant c_diag_ro_size : integer := g_diag_ro_vector_width/32;
+  constant c_diag_rw_size : integer := g_diag_rw_vector_width/32;
 
   signal aux_diag_in  : t_generic_word_array(c_diag_ro_size-1 downto 0);
   signal aux_diag_out : t_generic_word_array(c_diag_rw_size-1 downto 0);
 
+  -- External Tx Timestamping I/F
+  signal timestamps_out : t_txtsu_timestamp;
+
 begin  -- architecture struct
 
   -- Map top-level signals to internal records
@@ -339,15 +366,20 @@ begin  -- architecture struct
   wb_eth_master_in.rty   <= wb_eth_rty_i;
   wb_eth_master_in.stall <= wb_eth_stall_i;
 
-  -- auxiliary diagnostics
-  aux_diag_in <= f_de_vectorize_diag(aux_diag_i,g_diag_ro_vector_width);
+  aux_diag_in <= f_de_vectorize_diag(aux_diag_i, g_diag_ro_vector_width);
   aux_diag_o  <= f_vectorize_diag(aux_diag_out, g_diag_rw_vector_width);
 
+  tstamps_stb_o      <= timestamps_out.stb;
+  tstamps_tsval_o    <= timestamps_out.tsval;
+  tstamps_port_id_o  <= timestamps_out.port_id;
+  tstamps_frame_id_o <= timestamps_out.frame_id;
+
   -- Instantiate the records-based module
   cmp_xwrc_board_svec : xwrc_board_svec
     generic map (
       g_simulation                => g_simulation,
       g_with_external_clock_input => f_int2bool(g_with_external_clock_input),
+      g_aux_clks                  => g_aux_clks,
       g_fabric_iface              => f_str2iface_type(g_fabric_iface),
       g_tx_streamer_width         => g_tx_streamer_width,
       g_rx_streamer_width         => g_rx_streamer_width,
@@ -357,74 +389,88 @@ begin  -- architecture struct
       g_diag_ro_size              => c_diag_ro_size,
       g_diag_rw_size              => c_diag_rw_size)
     port map (
-      areset_n_i          => areset_n_i,
-      clk_20m_vcxo_i      => clk_20m_vcxo_i,
-      clk_125m_pllref_p_i => clk_125m_pllref_p_i,
-      clk_125m_pllref_n_i => clk_125m_pllref_n_i,
-      clk_125m_gtp_n_i    => clk_125m_gtp_n_i,
-      clk_125m_gtp_p_i    => clk_125m_gtp_p_i,
-      clk_10m_ext_ref_i   => clk_10m_ext_ref_i,
-      clk_sys_62m5_o      => clk_sys_62m5_o,
-      clk_ref_125m_o      => clk_ref_125m_o,
-      rst_sys_62m5_n_o    => rst_sys_62m5_n_o,
-      pll20dac_din_o      => pll20dac_din_o,
-      pll20dac_sclk_o     => pll20dac_sclk_o,
-      pll20dac_sync_n_o   => pll20dac_sync_n_o,
-      pll25dac_din_o      => pll25dac_din_o,
-      pll25dac_sclk_o     => pll25dac_sclk_o,
-      pll25dac_sync_n_o   => pll25dac_sync_n_o,
-      sfp_txp_o           => sfp_txp_o,
-      sfp_txn_o           => sfp_txn_o,
-      sfp_rxp_i           => sfp_rxp_i,
-      sfp_rxn_i           => sfp_rxn_i,
-      sfp_det_i           => sfp_det_i,
-      sfp_sda_i           => sfp_sda_i,
-      sfp_sda_o           => sfp_sda_o,
-      sfp_scl_i           => sfp_scl_i,
-      sfp_scl_o           => sfp_scl_o,
-      sfp_rate_select_o   => sfp_rate_select_o,
-      sfp_tx_fault_i      => sfp_tx_fault_i,
-      sfp_tx_disable_o    => sfp_tx_disable_o,
-      sfp_los_i           => sfp_los_i,
-      eeprom_sda_i        => eeprom_sda_i,
-      eeprom_sda_o        => eeprom_sda_o,
-      eeprom_scl_i        => eeprom_scl_i,
-      eeprom_scl_o        => eeprom_scl_o,
-      onewire_i           => onewire_i,
-      onewire_oen_o       => onewire_oen_o,
-      uart_rxd_i          => uart_rxd_i,
-      uart_txd_o          => uart_txd_o,
-      spi_sclk_o          => spi_sclk_o,
-      spi_ncs_o           => spi_ncs_o,
-      spi_mosi_o          => spi_mosi_o,
-      spi_miso_i          => spi_miso_i,
-      wb_slave_o          => wb_slave_out,
-      wb_slave_i          => wb_slave_in,
-      wrf_src_o           => wrf_src_out,
-      wrf_src_i           => wrf_src_in,
-      wrf_snk_o           => wrf_snk_out,
-      wrf_snk_i           => wrf_snk_in,
-      wrs_tx_data_i       => wrs_tx_data_i,
-      wrs_tx_valid_i      => wrs_tx_valid_i,
-      wrs_tx_dreq_o       => wrs_tx_dreq_o,
-      wrs_tx_last_i       => wrs_tx_last_i,
-      wrs_tx_flush_i      => wrs_tx_flush_i,
-      wrs_rx_first_o      => wrs_rx_first_o,
-      wrs_rx_last_o       => wrs_rx_last_o,
-      wrs_rx_data_o       => wrs_rx_data_o,
-      wrs_rx_valid_o      => wrs_rx_valid_o,
-      wrs_rx_dreq_i       => wrs_rx_dreq_i,
-      wb_eth_master_o     => wb_eth_master_out,
-      wb_eth_master_i     => wb_eth_master_in,
-      pps_ext_i           => pps_ext_i,
-      pps_p_o             => pps_p_o,
-      pps_led_o           => pps_led_o,
-      tm_time_valid_o     => tm_time_valid_o,
-      tm_tai_o            => tm_tai_o,
-      tm_cycles_o         => tm_cycles_o,
-      led_link_o          => led_link_o,
-      aux_diag_i          => aux_diag_in,
-      aux_diag_o          => aux_diag_out,
-      led_act_o           => led_act_o);
+      areset_n_i           => areset_n_i,
+      clk_20m_vcxo_i       => clk_20m_vcxo_i,
+      clk_125m_pllref_p_i  => clk_125m_pllref_p_i,
+      clk_125m_pllref_n_i  => clk_125m_pllref_n_i,
+      clk_125m_gtp_n_i     => clk_125m_gtp_n_i,
+      clk_125m_gtp_p_i     => clk_125m_gtp_p_i,
+      clk_10m_ext_ref_i    => clk_10m_ext_ref_i,
+      pps_ext_i            => pps_ext_i,
+      clk_sys_62m5_o       => clk_sys_62m5_o,
+      clk_ref_125m_o       => clk_ref_125m_o,
+      rst_sys_62m5_n_o     => rst_sys_62m5_n_o,
+      rst_ref_125m_n_o     => rst_ref_125m_n_o,
+      pll20dac_din_o       => pll20dac_din_o,
+      pll20dac_sclk_o      => pll20dac_sclk_o,
+      pll20dac_sync_n_o    => pll20dac_sync_n_o,
+      pll25dac_din_o       => pll25dac_din_o,
+      pll25dac_sclk_o      => pll25dac_sclk_o,
+      pll25dac_sync_n_o    => pll25dac_sync_n_o,
+      sfp_txp_o            => sfp_txp_o,
+      sfp_txn_o            => sfp_txn_o,
+      sfp_rxp_i            => sfp_rxp_i,
+      sfp_rxn_i            => sfp_rxn_i,
+      sfp_det_i            => sfp_det_i,
+      sfp_sda_i            => sfp_sda_i,
+      sfp_sda_o            => sfp_sda_o,
+      sfp_scl_i            => sfp_scl_i,
+      sfp_scl_o            => sfp_scl_o,
+      sfp_rate_select_o    => sfp_rate_select_o,
+      sfp_tx_fault_i       => sfp_tx_fault_i,
+      sfp_tx_disable_o     => sfp_tx_disable_o,
+      sfp_los_i            => sfp_los_i,
+      eeprom_sda_i         => eeprom_sda_i,
+      eeprom_sda_o         => eeprom_sda_o,
+      eeprom_scl_i         => eeprom_scl_i,
+      eeprom_scl_o         => eeprom_scl_o,
+      onewire_i            => onewire_i,
+      onewire_oen_o        => onewire_oen_o,
+      uart_rxd_i           => uart_rxd_i,
+      uart_txd_o           => uart_txd_o,
+      spi_sclk_o           => spi_sclk_o,
+      spi_ncs_o            => spi_ncs_o,
+      spi_mosi_o           => spi_mosi_o,
+      spi_miso_i           => spi_miso_i,
+      wb_slave_o           => wb_slave_out,
+      wb_slave_i           => wb_slave_in,
+      wrf_src_o            => wrf_src_out,
+      wrf_src_i            => wrf_src_in,
+      wrf_snk_o            => wrf_snk_out,
+      wrf_snk_i            => wrf_snk_in,
+      wrs_tx_data_i        => wrs_tx_data_i,
+      wrs_tx_valid_i       => wrs_tx_valid_i,
+      wrs_tx_dreq_o        => wrs_tx_dreq_o,
+      wrs_tx_last_i        => wrs_tx_last_i,
+      wrs_tx_flush_i       => wrs_tx_flush_i,
+      wrs_rx_first_o       => wrs_rx_first_o,
+      wrs_rx_last_o        => wrs_rx_last_o,
+      wrs_rx_data_o        => wrs_rx_data_o,
+      wrs_rx_valid_o       => wrs_rx_valid_o,
+      wrs_rx_dreq_i        => wrs_rx_dreq_i,
+      wb_eth_master_o      => wb_eth_master_out,
+      wb_eth_master_i      => wb_eth_master_in,
+      aux_diag_i           => aux_diag_in,
+      aux_diag_o           => aux_diag_out,
+      tm_dac_value_o       => tm_dac_value_o,
+      tm_dac_wr_o          => tm_dac_wr_o,
+      tm_clk_aux_lock_en_i => tm_clk_aux_lock_en_i,
+      tm_clk_aux_locked_o  => tm_clk_aux_locked_o,
+      timestamps_o         => timestamps_out,
+      timestamps_ack_i     => tstamps_ack_i,
+      fc_tx_pause_req_i    => fc_tx_pause_req_i,
+      fc_tx_pause_delay_i  => fc_tx_pause_delay_i,
+      fc_tx_pause_ready_o  => fc_tx_pause_ready_o,
+      tm_link_up_o         => tm_link_up_o,
+      tm_time_valid_o      => tm_time_valid_o,
+      tm_tai_o             => tm_tai_o,
+      tm_cycles_o          => tm_cycles_o,
+      led_act_o            => led_act_o,
+      led_link_o           => led_link_o,
+      btn1_i               => btn1_i,
+      btn2_i               => btn2_i,
+      pps_p_o              => pps_p_o,
+      pps_led_o            => pps_led_o,
+      link_ok_o            => link_ok_o);
 
 end architecture std_wrapper;
diff --git a/board/svec/xwrc_board_svec.vhd b/board/svec/xwrc_board_svec.vhd
index 39d08438e158952cfdd2fcd5c0891fee7ef21c46..14369747d6a0245b714e33b4ae53c7f653bc4f1e 100644
--- a/board/svec/xwrc_board_svec.vhd
+++ b/board/svec/xwrc_board_svec.vhd
@@ -7,14 +7,14 @@
 -- Author(s)  : Dimitrios Lampridis  <dimitrios.lampridis@cern.ch>
 -- Company    : CERN (BE-CO-HT)
 -- Created    : 2017-02-16
--- Last update: 2017-03-07
+-- Last update: 2017-03-08
 -- Standard   : VHDL'93
 -------------------------------------------------------------------------------
 -- Description: Top-level wrapper for WR PTP core including all the modules
 -- needed to operate the core on the SVEC board.
 -- http://www.ohwr.org/projects/svec/
 -------------------------------------------------------------------------------
--- Copyright (c) 2016-2017 CERN
+-- Copyright (c) 2017 CERN
 -------------------------------------------------------------------------------
 -- GNU LESSER GENERAL PUBLIC LICENSE
 --
@@ -60,55 +60,53 @@ entity xwrc_board_svec is
     g_simulation                : integer              := 0;
     -- Select whether to include external ref clock input
     g_with_external_clock_input : boolean              := TRUE;
+    -- Number of aux clocks syntonized by WRPC to WR timebase
+    g_aux_clks                  : integer              := 0;
     -- plain     = expose WRC fabric interface
     -- streamers = attach WRC streamers to fabric interface
     -- etherbone = attach Etherbone slave to fabric interface
     g_fabric_iface              : t_board_fabric_iface := plain;
     -- data width when g_fabric_iface = "streamers" (otherwise ignored)
-    g_tx_streamer_width         : integer := 32;
-    g_rx_streamer_width         : integer := 32;
+    g_tx_streamer_width         : integer              := 32;
+    g_rx_streamer_width         : integer              := 32;
     -- memory initialisation file for embedded CPU
     g_dpram_initf               : string               := "default_xilinx";
     -- identification (id and ver) of the layout of words in the generic diag interface
-    g_diag_id                   : integer                        := 0;
-    g_diag_ver                  : integer                        := 0;
+    g_diag_id                   : integer              := 0;
+    g_diag_ver                  : integer              := 0;
     -- size the generic diag interface
-    g_diag_ro_size              : integer                        := 0;
-    g_diag_rw_size              : integer                        := 0
+    g_diag_ro_size              : integer              := 0;
+    g_diag_rw_size              : integer              := 0
     );
   port (
     ---------------------------------------------------------------------------
     -- Clocks/resets
     ---------------------------------------------------------------------------
-
-    -- Reset from system fpga
-    areset_n_i : in std_logic;
-
+    -- Reset input (active low, can be async)
+    areset_n_i          : in  std_logic;
     -- Clock inputs from the board
-    clk_20m_vcxo_i : in std_logic;
-
-    clk_125m_pllref_p_i : in std_logic;
-    clk_125m_pllref_n_i : in std_logic;
-
-    clk_125m_gtp_n_i : in std_logic;
-    clk_125m_gtp_p_i : in std_logic;
-
+    clk_20m_vcxo_i      : in  std_logic;
+    clk_125m_pllref_p_i : in  std_logic;
+    clk_125m_pllref_n_i : in  std_logic;
+    clk_125m_gtp_n_i    : in  std_logic;
+    clk_125m_gtp_p_i    : in  std_logic;
+    -- Aux clocks, which can be disciplined by the WR Core
+    clk_aux_i           : in  std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
     -- 10MHz ext ref clock input (g_with_external_clock_input = TRUE)
-    clk_10m_ext_ref_i : in std_logic := '0';
-
+    clk_10m_ext_ref_i   : in  std_logic                               := '0';
+    -- External PPS input (g_with_external_clock_input = TRUE)
+    pps_ext_i           : in  std_logic                               := '0';
     -- 62.5MHz sys clock output
-    clk_sys_62m5_o : out std_logic;
-
+    clk_sys_62m5_o      : out std_logic;
     -- 125MHz ref clock output
-    clk_ref_125m_o : out std_logic;
-
-    -- active low reset output, synchronous to clk_sys_62m5_o
-    rst_sys_62m5_n_o : out std_logic;
+    clk_ref_125m_o      : out std_logic;
+    -- active low reset outputs, synchronous to 62m5 and 125m clocks
+    rst_sys_62m5_n_o    : out std_logic;
+    rst_ref_125m_n_o    : out std_logic;
 
     ---------------------------------------------------------------------------
     -- SPI interfaces to DACs
     ---------------------------------------------------------------------------
-
     pll20dac_din_o    : out std_logic;
     pll20dac_sclk_o   : out std_logic;
     pll20dac_sync_n_o : out std_logic;
@@ -119,7 +117,6 @@ entity xwrc_board_svec is
     ---------------------------------------------------------------------------
     -- SFP I/O for transceiver and SFP management info
     ---------------------------------------------------------------------------
-
     sfp_txp_o         : out std_logic;
     sfp_txn_o         : out std_logic;
     sfp_rxp_i         : in  std_logic;
@@ -137,7 +134,6 @@ entity xwrc_board_svec is
     ---------------------------------------------------------------------------
     -- I2C EEPROM
     ---------------------------------------------------------------------------
-
     eeprom_sda_i : in  std_logic;
     eeprom_sda_o : out std_logic;
     eeprom_scl_i : in  std_logic;
@@ -146,14 +142,12 @@ entity xwrc_board_svec is
     ---------------------------------------------------------------------------
     -- Onewire interface
     ---------------------------------------------------------------------------
-
     onewire_i     : in  std_logic;
     onewire_oen_o : out std_logic;
 
     ---------------------------------------------------------------------------
     -- UART
     ---------------------------------------------------------------------------
-
     uart_rxd_i : in  std_logic;
     uart_txd_o : out std_logic;
 
@@ -161,7 +155,6 @@ entity xwrc_board_svec is
     -- SPI (flash is connected to SFPGA and routed to AFPGA
     -- once the boot process is complete)
     ---------------------------------------------------------------------------
-
     spi_sclk_o : out std_logic;
     spi_ncs_o  : out std_logic;
     spi_mosi_o : out std_logic;
@@ -170,14 +163,12 @@ entity xwrc_board_svec is
     ---------------------------------------------------------------------------
     -- External WB interface
     ---------------------------------------------------------------------------
-
     wb_slave_o : out t_wishbone_slave_out;
     wb_slave_i : in  t_wishbone_slave_in := cc_dummy_slave_in;
 
     ---------------------------------------------------------------------------
     -- WR fabric interface (when g_fabric_iface = "plainfbrc")
     ---------------------------------------------------------------------------
-
     wrf_src_o : out t_wrf_source_out;
     wrf_src_i : in  t_wrf_source_in := c_dummy_src_in;
     wrf_snk_o : out t_wrf_sink_out;
@@ -186,44 +177,71 @@ entity xwrc_board_svec is
     ---------------------------------------------------------------------------
     -- WR streamers (when g_fabric_iface = "streamers")
     ---------------------------------------------------------------------------
-
     wrs_tx_data_i  : in  std_logic_vector(g_tx_streamer_width-1 downto 0) := (others => '0');
-    wrs_tx_valid_i : in  std_logic                                     := '0';
+    wrs_tx_valid_i : in  std_logic                                        := '0';
     wrs_tx_dreq_o  : out std_logic;
-    wrs_tx_last_i  : in  std_logic                                     := '1';
-    wrs_tx_flush_i : in  std_logic                                     := '0';
+    wrs_tx_last_i  : in  std_logic                                        := '1';
+    wrs_tx_flush_i : in  std_logic                                        := '0';
     wrs_rx_first_o : out std_logic;
     wrs_rx_last_o  : out std_logic;
     wrs_rx_data_o  : out std_logic_vector(g_rx_streamer_width-1 downto 0);
     wrs_rx_valid_o : out std_logic;
-    wrs_rx_dreq_i  : in  std_logic                                     := '0';
+    wrs_rx_dreq_i  : in  std_logic                                        := '0';
 
     ---------------------------------------------------------------------------
     -- Etherbone WB master interface (when g_fabric_iface = "etherbone")
     ---------------------------------------------------------------------------
-
     wb_eth_master_o : out t_wishbone_master_out;
     wb_eth_master_i : in  t_wishbone_master_in := cc_dummy_master_in;
 
     ---------------------------------------------------------------------------
     -- Generic diagnostics interface (access from WRPC via SNMP or uart console
     ---------------------------------------------------------------------------
+    aux_diag_i : in  t_generic_word_array(g_diag_ro_size-1 downto 0) := (others => (others => '0'));
+    aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0);
 
-    aux_diag_i           : in  t_generic_word_array(g_diag_ro_size-1 downto 0) := (others =>(others=>'0'));
-    aux_diag_o           : out t_generic_word_array(g_diag_rw_size-1 downto 0);
+    ---------------------------------------------------------------------------
+    -- Aux clocks control
+    ---------------------------------------------------------------------------
+    tm_dac_value_o       : out std_logic_vector(23 downto 0);
+    tm_dac_wr_o          : out std_logic_vector(g_aux_clks-1 downto 0);
+    tm_clk_aux_lock_en_i : in  std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+    tm_clk_aux_locked_o  : out std_logic_vector(g_aux_clks-1 downto 0);
 
     ---------------------------------------------------------------------------
-    -- WRPC timing interface and status
+    -- External Tx Timestamping I/F
     ---------------------------------------------------------------------------
+    timestamps_o     : out t_txtsu_timestamp;
+    timestamps_ack_i : in  std_logic := '1';
 
-    pps_ext_i       : in  std_logic                                     := '0';
-    pps_p_o         : out std_logic;
-    pps_led_o       : out std_logic;
+    ---------------------------------------------------------------------------
+    -- Pause Frame Control
+    ---------------------------------------------------------------------------
+    fc_tx_pause_req_i   : in  std_logic                     := '0';
+    fc_tx_pause_delay_i : in  std_logic_vector(15 downto 0) := x"0000";
+    fc_tx_pause_ready_o : out std_logic;
+
+    ---------------------------------------------------------------------------
+    -- Timecode I/F
+    ---------------------------------------------------------------------------
+    tm_link_up_o    : out std_logic;
     tm_time_valid_o : out std_logic;
     tm_tai_o        : out std_logic_vector(39 downto 0);
     tm_cycles_o     : out std_logic_vector(27 downto 0);
-    led_link_o      : out std_logic;
-    led_act_o       : out std_logic);
+
+    ---------------------------------------------------------------------------
+    -- Buttons, LEDs and PPS output
+    ---------------------------------------------------------------------------
+    led_act_o  : out std_logic;
+    led_link_o : out std_logic;
+    btn1_i     : in  std_logic := '1';
+    btn2_i     : in  std_logic := '1';
+    -- 1PPS output
+    pps_p_o    : out std_logic;
+    pps_led_o  : out std_logic;
+    -- Link ok indication
+    link_ok_o  : out std_logic
+    );
 
 end entity xwrc_board_svec;
 
@@ -247,8 +265,8 @@ architecture struct of xwrc_board_svec is
   -- Reset logic
   signal rst_62m5_n       : std_logic;
   signal rstlogic_arst_n  : std_logic;
-  signal rstlogic_clk_in  : std_logic_vector(0 downto 0);
-  signal rstlogic_rst_out : std_logic_vector(0 downto 0);
+  signal rstlogic_clk_in  : std_logic_vector(1 downto 0);
+  signal rstlogic_rst_out : std_logic_vector(1 downto 0);
 
   -- PLL DAC ARB
   signal dac_sync_n       : std_logic_vector(1 downto 0);
@@ -264,10 +282,8 @@ architecture struct of xwrc_board_svec is
   signal onewire_en : std_logic_vector(1 downto 0);
 
   -- PHY
-  signal phy8_to_wrc    : t_phy_8bits_to_wrc;
-  signal phy8_from_wrc  : t_phy_8bits_from_wrc;
-  signal phy16_to_wrc   : t_phy_16bits_to_wrc;
-  signal phy16_from_wrc : t_phy_16bits_from_wrc;
+  signal phy8_to_wrc   : t_phy_8bits_to_wrc;
+  signal phy8_from_wrc : t_phy_8bits_from_wrc;
 
   -- External reference
   signal ext_ref_mul         : std_logic;
@@ -318,8 +334,6 @@ begin  -- architecture struct
       clk_10m_ext_o         => clk_10m_ext,
       phy8_o                => phy8_to_wrc,
       phy8_i                => phy8_from_wrc,
-      phy16_o               => phy16_to_wrc,
-      phy16_i               => phy16_from_wrc,
       ext_ref_mul_o         => ext_ref_mul,
       ext_ref_mul_locked_o  => ext_ref_mul_locked,
       ext_ref_mul_stopped_o => ext_ref_mul_stopped,
@@ -337,10 +351,11 @@ begin  -- architecture struct
 
   -- concatenation of all clocks required to have synced resets
   rstlogic_clk_in(0) <= clk_pll_62m5;
+  rstlogic_clk_in(1) <= clk_pll_125m;
 
   cmp_rstlogic_reset : gc_reset
     generic map (
-      g_clocks    => 1,                           -- 62.5MHz
+      g_clocks    => 2,                           -- 62.5MHz, 125MHz
       g_logdelay  => 4,                           -- 16 clock cycles
       g_syncdepth => 3)                           -- length of sync chains
     port map (
@@ -353,6 +368,7 @@ begin  -- architecture struct
   rst_62m5_n <= rstlogic_rst_out(0);
 
   rst_sys_62m5_n_o <= rst_62m5_n;
+  rst_ref_125m_n_o <= rstlogic_rst_out(1);
 
   -----------------------------------------------------------------------------
   -- 2x SPI DAC
@@ -390,7 +406,7 @@ begin  -- architecture struct
       g_with_external_clock_input => g_with_external_clock_input,
       g_phys_uart                 => TRUE,
       g_virtual_uart              => TRUE,
-      g_aux_clks                  => 0,
+      g_aux_clks                  => g_aux_clks,
       g_ep_rxbuf_size             => 1024,
       g_tx_runt_padding           => TRUE,
       g_dpram_initf               => g_dpram_initf,
@@ -413,7 +429,7 @@ begin  -- architecture struct
       clk_sys_i            => clk_pll_62m5,
       clk_dmtd_i           => clk_pll_dmtd,
       clk_ref_i            => clk_pll_125m,
-      clk_aux_i            => (others => '0'),
+      clk_aux_i            => clk_aux_i,
       clk_ext_i            => clk_10m_ext,
       clk_ext_mul_i        => ext_ref_mul,
       clk_ext_mul_locked_i => ext_ref_mul_locked,
@@ -427,10 +443,6 @@ begin  -- architecture struct
       dac_dpll_data_o      => dac_dpll_data,
       phy8_o               => phy8_from_wrc,
       phy8_i               => phy8_to_wrc,
-      phy16_o              => phy16_from_wrc,
-      phy16_i              => phy16_to_wrc,
-      led_act_o            => led_act_o,
-      led_link_o           => led_link_o,
       scl_o                => eeprom_scl_o,
       scl_i                => eeprom_scl_i,
       sda_o                => eeprom_sda_o,
@@ -440,8 +452,6 @@ begin  -- architecture struct
       sfp_sda_o            => sfp_sda_o,
       sfp_sda_i            => sfp_sda_i,
       sfp_det_i            => sfp_det_i,
-      btn1_i               => '1',
-      btn2_i               => '1',
       spi_sclk_o           => spi_sclk_o,
       spi_ncs_o            => spi_ncs_o,
       spi_mosi_o           => spi_mosi_o,
@@ -469,24 +479,28 @@ begin  -- architecture struct
       wrs_rx_dreq_i        => wrs_rx_dreq_i,
       wb_eth_master_o      => wb_eth_master_o,
       wb_eth_master_i      => wb_eth_master_i,
-      timestamps_o         => open,
-      timestamps_ack_i     => '1',
-      fc_tx_pause_req_i    => '0',
-      fc_tx_pause_delay_i  => (others => '0'),
-      fc_tx_pause_ready_o  => open,
-      tm_link_up_o         => open,
-      tm_dac_value_o       => open,
-      tm_dac_wr_o          => open,
-      tm_clk_aux_lock_en_i => (others => '0'),
-      tm_clk_aux_locked_o  => open,
+      aux_diag_i           => aux_diag_i,
+      aux_diag_o           => aux_diag_o,
+      tm_dac_value_o       => tm_dac_value_o,
+      tm_dac_wr_o          => tm_dac_wr_o,
+      tm_clk_aux_lock_en_i => tm_clk_aux_lock_en_i,
+      tm_clk_aux_locked_o  => tm_clk_aux_locked_o,
+      timestamps_o         => timestamps_o,
+      timestamps_ack_i     => timestamps_ack_i,
+      fc_tx_pause_req_i    => fc_tx_pause_req_i,
+      fc_tx_pause_delay_i  => fc_tx_pause_delay_i,
+      fc_tx_pause_ready_o  => fc_tx_pause_ready_o,
+      tm_link_up_o         => tm_link_up_o,
       tm_time_valid_o      => tm_time_valid_o,
       tm_tai_o             => tm_tai_o,
       tm_cycles_o          => tm_cycles_o,
+      led_act_o            => led_act_o,
+      led_link_o           => led_link_o,
+      btn1_i               => btn1_i,
+      btn2_i               => btn2_i,
       pps_p_o              => pps_p_o,
       pps_led_o            => pps_led_o,
-      aux_diag_i           => aux_diag_i,
-      aux_diag_o           => aux_diag_o,
-      link_ok_o            => open);
+      link_ok_o            => link_ok_o);
 
   sfp_rate_select_o <= '1';
 
diff --git a/board/vfchd/wr_vfchd_pkg.vhd b/board/vfchd/wr_vfchd_pkg.vhd
index cd90818a133ba3bb487ac99c42f79cb779f1543c..033e02da19efcc9d377dc4fd4b84de42b7633450 100644
--- a/board/vfchd/wr_vfchd_pkg.vhd
+++ b/board/vfchd/wr_vfchd_pkg.vhd
@@ -5,6 +5,7 @@ library work;
 use work.wrcore_pkg.all;
 use work.wishbone_pkg.all;
 use work.wr_fabric_pkg.all;
+use work.endpoint_pkg.all;
 use work.wr_board_pkg.all;
 
 package wr_vfchd_pkg is
@@ -13,8 +14,9 @@ package wr_vfchd_pkg is
     generic (
       g_simulation                : integer              := 0;
       g_with_external_clock_input : boolean              := TRUE;
+      g_aux_clks                  : integer              := 0;
       g_pcs_16bit                 : boolean              := FALSE;
-      g_fabric_iface              : t_board_fabric_iface := PLAIN;
+      g_fabric_iface              : t_board_fabric_iface := plain;
       g_tx_streamer_width         : integer              := 32;
       g_rx_streamer_width         : integer              := 32;
       g_dpram_initf               : string               := "default_altera";
@@ -23,58 +25,73 @@ package wr_vfchd_pkg is
       g_diag_ro_size              : integer              := 0;
       g_diag_rw_size              : integer              := 0);
     port (
-      clk_board_125m_i  : in  std_logic;
-      clk_board_20m_i   : in  std_logic;
-      clk_ext_10m_i     : in  std_logic;
-      areset_n_i        : in  std_logic;
-      clk_sys_62m5_o    : out std_logic;
-      clk_ref_125m_o    : out std_logic;
-      rst_sys_62m5_n_o  : out std_logic;
-      dac_ref_sync_n_o  : out std_logic;
-      dac_dmtd_sync_n_o : out std_logic;
-      dac_din_o         : out std_logic;
-      dac_sclk_o        : out std_logic;
-      sfp_tx_o          : out std_logic;
-      sfp_rx_i          : in  std_logic;
-      sfp_det_valid_i   : in  std_logic;
-      sfp_data_i        : in  std_logic_vector (127 downto 0);
-      sfp_tx_fault_i    : in  std_logic;
-      sfp_los_i         : in  std_logic;
-      sfp_tx_disable_o  : out std_logic;
-      eeprom_sda_i      : in  std_logic;
-      eeprom_sda_o      : out std_logic;
-      eeprom_scl_i      : in  std_logic;
-      eeprom_scl_o      : out std_logic;
-      onewire_i         : in  std_logic;
-      onewire_oen_o     : out std_logic;
-      wb_slave_o        : out t_wishbone_slave_out;
-      wb_slave_i        : in  t_wishbone_slave_in                           := cc_dummy_slave_in;
-      wrf_src_o         : out t_wrf_source_out;
-      wrf_src_i         : in  t_wrf_source_in                               := c_dummy_src_in;
-      wrf_snk_o         : out t_wrf_sink_out;
-      wrf_snk_i         : in  t_wrf_sink_in                                 := c_dummy_snk_in;
-      wrs_tx_data_i     : in  std_logic_vector(g_tx_streamer_width-1 downto 0) := (others => '0');
-      wrs_tx_valid_i    : in  std_logic                                     := '0';
-      wrs_tx_dreq_o     : out std_logic;
-      wrs_tx_last_i     : in  std_logic                                     := '1';
-      wrs_tx_flush_i    : in  std_logic                                     := '0';
-      wrs_rx_first_o    : out std_logic;
-      wrs_rx_last_o     : out std_logic;
-      wrs_rx_data_o     : out std_logic_vector(g_rx_streamer_width-1 downto 0);
-      wrs_rx_valid_o    : out std_logic;
-      wrs_rx_dreq_i     : in  std_logic                                     := '0';
-      wb_eth_master_o   : out t_wishbone_master_out;
-      wb_eth_master_i   : in  t_wishbone_master_in                          := cc_dummy_master_in;
-      pps_ext_i         : in  std_logic;
-      pps_p_o           : out std_logic;
-      pps_led_o         : out std_logic;
-      tm_time_valid_o   : out std_logic;
-      tm_tai_o          : out std_logic_vector(39 downto 0);
-      tm_cycles_o       : out std_logic_vector(27 downto 0);
-      led_link_o        : out std_logic;
-      aux_diag_i        : in  t_generic_word_array(g_diag_ro_size-1 downto 0) := (others =>(others=>'0'));
-      aux_diag_o        : out t_generic_word_array(g_diag_rw_size-1 downto 0);
-      led_act_o         : out std_logic);
+      clk_board_125m_i     : in  std_logic;
+      clk_board_20m_i      : in  std_logic;
+      clk_aux_i            : in  std_logic_vector(g_aux_clks-1 downto 0)          := (others => '0');
+      clk_ext_10m_i        : in  std_logic                                        := '0';
+      pps_ext_i            : in  std_logic                                        := '0';
+      areset_n_i           : in  std_logic;
+      clk_sys_62m5_o       : out std_logic;
+      clk_ref_125m_o       : out std_logic;
+      rst_sys_62m5_n_o     : out std_logic;
+      rst_ref_125m_n_o     : out std_logic;
+      dac_ref_sync_n_o     : out std_logic;
+      dac_dmtd_sync_n_o    : out std_logic;
+      dac_din_o            : out std_logic;
+      dac_sclk_o           : out std_logic;
+      sfp_tx_o             : out std_logic;
+      sfp_rx_i             : in  std_logic;
+      sfp_det_valid_i      : in  std_logic                                        := '0';
+      sfp_data_i           : in  std_logic_vector (127 downto 0);
+      sfp_tx_fault_i       : in  std_logic                                        := '0';
+      sfp_tx_disable_o     : out std_logic;
+      sfp_los_i            : in  std_logic                                        := '0';
+      eeprom_sda_i         : in  std_logic;
+      eeprom_sda_o         : out std_logic;
+      eeprom_scl_i         : in  std_logic;
+      eeprom_scl_o         : out std_logic;
+      onewire_i            : in  std_logic;
+      onewire_oen_o        : out std_logic;
+      wb_slave_o           : out t_wishbone_slave_out;
+      wb_slave_i           : in  t_wishbone_slave_in                              := cc_dummy_slave_in;
+      wrf_src_o            : out t_wrf_source_out;
+      wrf_src_i            : in  t_wrf_source_in                                  := c_dummy_src_in;
+      wrf_snk_o            : out t_wrf_sink_out;
+      wrf_snk_i            : in  t_wrf_sink_in                                    := c_dummy_snk_in;
+      wrs_tx_data_i        : in  std_logic_vector(g_tx_streamer_width-1 downto 0) := (others => '0');
+      wrs_tx_valid_i       : in  std_logic                                        := '0';
+      wrs_tx_dreq_o        : out std_logic;
+      wrs_tx_last_i        : in  std_logic                                        := '1';
+      wrs_tx_flush_i       : in  std_logic                                        := '0';
+      wrs_rx_first_o       : out std_logic;
+      wrs_rx_last_o        : out std_logic;
+      wrs_rx_data_o        : out std_logic_vector(g_rx_streamer_width-1 downto 0);
+      wrs_rx_valid_o       : out std_logic;
+      wrs_rx_dreq_i        : in  std_logic                                        := '0';
+      wb_eth_master_o      : out t_wishbone_master_out;
+      wb_eth_master_i      : in  t_wishbone_master_in                             := cc_dummy_master_in;
+      aux_diag_i           : in  t_generic_word_array(g_diag_ro_size-1 downto 0)  := (others => (others => '0'));
+      aux_diag_o           : out t_generic_word_array(g_diag_rw_size-1 downto 0);
+      tm_dac_value_o       : out std_logic_vector(23 downto 0);
+      tm_dac_wr_o          : out std_logic_vector(g_aux_clks-1 downto 0);
+      tm_clk_aux_lock_en_i : in  std_logic_vector(g_aux_clks-1 downto 0)          := (others => '0');
+      tm_clk_aux_locked_o  : out std_logic_vector(g_aux_clks-1 downto 0);
+      timestamps_o         : out t_txtsu_timestamp;
+      timestamps_ack_i     : in  std_logic                                        := '1';
+      fc_tx_pause_req_i    : in  std_logic                                        := '0';
+      fc_tx_pause_delay_i  : in  std_logic_vector(15 downto 0)                    := x"0000";
+      fc_tx_pause_ready_o  : out std_logic;
+      tm_link_up_o         : out std_logic;
+      tm_time_valid_o      : out std_logic;
+      tm_tai_o             : out std_logic_vector(39 downto 0);
+      tm_cycles_o          : out std_logic_vector(27 downto 0);
+      led_act_o            : out std_logic;
+      led_link_o           : out std_logic;
+      btn1_i               : in  std_logic                                        := '1';
+      btn2_i               : in  std_logic                                        := '1';
+      pps_p_o              : out std_logic;
+      pps_led_o            : out std_logic;
+      link_ok_o            : out std_logic);
   end component xwrc_board_vfchd;
 
   component wrc_board_vfchd is
@@ -82,103 +99,123 @@ package wr_vfchd_pkg is
       g_simulation                : integer := 0;
       g_with_external_clock_input : integer := 1;
       g_pcs_16bit                 : integer := 0;
-      g_fabric_iface              : string  := "PLAINFBRC";
+      g_aux_clks                  : integer := 0;
+      g_fabric_iface              : string  := "plainfbrc";
       g_tx_streamer_width         : integer := 32;
       g_rx_streamer_width         : integer := 32;
       g_dpram_initf               : string  := "default_altera";
-      g_diag_id                   : integer                        := 0;
-      g_diag_ver                  : integer                        := 0;
-      g_diag_ro_vector_width      : integer                        := 0;
-      g_diag_rw_vector_width      : integer                        := 0);
+      g_diag_id                   : integer := 0;
+      g_diag_ver                  : integer := 0;
+      g_diag_ro_vector_width      : integer := 0;
+      g_diag_rw_vector_width      : integer := 0);
     port (
-      clk_board_125m_i  : in  std_logic;
-      clk_board_20m_i   : in  std_logic;
-      clk_ext_10m_i     : in  std_logic;
-      areset_n_i        : in  std_logic;
-      clk_sys_62m5_o    : out std_logic;
-      clk_ref_125m_o    : out std_logic;
-      rst_sys_62m5_n_o  : out std_logic;
-      dac_ref_sync_n_o  : out std_logic;
-      dac_dmtd_sync_n_o : out std_logic;
-      dac_din_o         : out std_logic;
-      dac_sclk_o        : out std_logic;
-      sfp_tx_o          : out std_logic;
-      sfp_rx_i          : in  std_logic;
-      sfp_det_valid_i   : in  std_logic;
-      sfp_data_i        : in  std_logic_vector (127 downto 0);
-      sfp_tx_fault_i    : in  std_logic;
-      sfp_los_i         : in  std_logic;
-      sfp_tx_disable_o  : out std_logic;
-      eeprom_sda_i      : in  std_logic;
-      eeprom_sda_o      : out std_logic;
-      eeprom_scl_i      : in  std_logic;
-      eeprom_scl_o      : out std_logic;
-      onewire_i         : in  std_logic;
-      onewire_oen_o     : out std_logic;
-      wb_adr_i          : in  std_logic_vector(c_wishbone_address_width-1 downto 0)   := (others => '0');
-      wb_dat_i          : in  std_logic_vector(c_wishbone_data_width-1 downto 0)      := (others => '0');
-      wb_dat_o          : out std_logic_vector(c_wishbone_data_width-1 downto 0);
-      wb_sel_i          : in  std_logic_vector(c_wishbone_address_width/8-1 downto 0) := (others => '0');
-      wb_we_i           : in  std_logic                                               := '0';
-      wb_cyc_i          : in  std_logic                                               := '0';
-      wb_stb_i          : in  std_logic                                               := '0';
-      wb_ack_o          : out std_logic;
-      wb_int_o          : out std_logic;
-      wb_err_o          : out std_logic;
-      wb_rty_o          : out std_logic;
-      wb_stall_o        : out std_logic;
-      wrf_src_adr       : out std_logic_vector(1 downto 0);
-      wrf_src_dat       : out std_logic_vector(15 downto 0);
-      wrf_src_cyc       : out std_logic;
-      wrf_src_stb       : out std_logic;
-      wrf_src_we        : out std_logic;
-      wrf_src_sel       : out std_logic_vector(1 downto 0);
-      wrf_src_ack       : in  std_logic;
-      wrf_src_stall     : in  std_logic;
-      wrf_src_err       : in  std_logic;
-      wrf_src_rty       : in  std_logic;
-      wrf_snk_adr       : in  std_logic_vector(1 downto 0);
-      wrf_snk_dat       : in  std_logic_vector(15 downto 0);
-      wrf_snk_cyc       : in  std_logic;
-      wrf_snk_stb       : in  std_logic;
-      wrf_snk_we        : in  std_logic;
-      wrf_snk_sel       : in  std_logic_vector(1 downto 0);
-      wrf_snk_ack       : out std_logic;
-      wrf_snk_stall     : out std_logic;
-      wrf_snk_err       : out std_logic;
-      wrf_snk_rty       : out std_logic;
-      trans_tx_data_i   : in  std_logic_vector(g_tx_streamer_width-1 downto 0)           := (others => '0');
-      trans_tx_valid_i  : in  std_logic                                               := '0';
-      trans_tx_dreq_o   : out std_logic;
-      trans_tx_last_i   : in  std_logic                                               := '1';
-      trans_tx_flush_i  : in  std_logic                                               := '0';
-      trans_rx_first_o  : out std_logic;
-      trans_rx_last_o   : out std_logic;
-      trans_rx_data_o   : out std_logic_vector(g_rx_streamer_width-1 downto 0);
-      trans_rx_valid_o  : out std_logic;
-      trans_rx_dreq_i   : in  std_logic                                               := '0';
-      wb_eth_adr_o      : out std_logic_vector(c_wishbone_address_width-1 downto 0);
-      wb_eth_dat_o      : out std_logic_vector(c_wishbone_data_width-1 downto 0);
-      wb_eth_dat_i      : in  std_logic_vector(c_wishbone_data_width-1 downto 0)      := (others => '0');
-      wb_eth_sel_o      : out std_logic_vector(c_wishbone_address_width/8-1 downto 0);
-      wb_eth_we_o       : out std_logic;
-      wb_eth_cyc_o      : out std_logic;
-      wb_eth_stb_o      : out std_logic;
-      wb_eth_ack_i      : in  std_logic                                               := '0';
-      wb_eth_int_i      : in  std_logic                                               := '0';
-      wb_eth_err_i      : in  std_logic                                               := '0';
-      wb_eth_rty_i      : in  std_logic                                               := '0';
-      wb_eth_stall_i    : in  std_logic                                               := '0';
-      pps_ext_i         : in  std_logic                                               := '0';
-      pps_p_o           : out std_logic;
-      pps_led_o         : out std_logic;
-      tm_time_valid_o   : out std_logic;
-      tm_tai_o          : out std_logic_vector(39 downto 0);
-      tm_cycles_o       : out std_logic_vector(27 downto 0);
-      led_link_o        : out std_logic;
-      aux_diag_i        : in  std_logic_vector(g_diag_ro_vector_width - 1 downto 0) := (others => '0');
-      aux_diag_o        : out std_logic_vector(g_diag_rw_vector_width - 1 downto 0) := (others => '0');
-      led_act_o         : out std_logic);
+      clk_board_125m_i     : in  std_logic;
+      clk_board_20m_i      : in  std_logic;
+      clk_aux_i            : in  std_logic_vector(g_aux_clks-1 downto 0)                 := (others => '0');
+      clk_ext_10m_i        : in  std_logic                                               := '0';
+      pps_ext_i            : in  std_logic                                               := '0';
+      areset_n_i           : in  std_logic;
+      clk_sys_62m5_o       : out std_logic;
+      clk_ref_125m_o       : out std_logic;
+      rst_sys_62m5_n_o     : out std_logic;
+      rst_ref_125m_n_o     : out std_logic;
+      dac_ref_sync_n_o     : out std_logic;
+      dac_dmtd_sync_n_o    : out std_logic;
+      dac_din_o            : out std_logic;
+      dac_sclk_o           : out std_logic;
+      sfp_tx_o             : out std_logic;
+      sfp_rx_i             : in  std_logic;
+      sfp_det_valid_i      : in  std_logic                                               := '0';
+      sfp_data_i           : in  std_logic_vector (127 downto 0);
+      sfp_tx_fault_i       : in  std_logic                                               := '0';
+      sfp_tx_disable_o     : out std_logic;
+      sfp_los_i            : in  std_logic                                               := '0';
+      eeprom_sda_i         : in  std_logic;
+      eeprom_sda_o         : out std_logic;
+      eeprom_scl_i         : in  std_logic;
+      eeprom_scl_o         : out std_logic;
+      onewire_i            : in  std_logic;
+      onewire_oen_o        : out std_logic;
+      wb_adr_i             : in  std_logic_vector(c_wishbone_address_width-1 downto 0)   := (others => '0');
+      wb_dat_i             : in  std_logic_vector(c_wishbone_data_width-1 downto 0)      := (others => '0');
+      wb_dat_o             : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+      wb_sel_i             : in  std_logic_vector(c_wishbone_address_width/8-1 downto 0) := (others => '0');
+      wb_we_i              : in  std_logic                                               := '0';
+      wb_cyc_i             : in  std_logic                                               := '0';
+      wb_stb_i             : in  std_logic                                               := '0';
+      wb_ack_o             : out std_logic;
+      wb_int_o             : out std_logic;
+      wb_err_o             : out std_logic;
+      wb_rty_o             : out std_logic;
+      wb_stall_o           : out std_logic;
+      wrf_src_adr_o        : out std_logic_vector(1 downto 0);
+      wrf_src_dat_o        : out std_logic_vector(15 downto 0);
+      wrf_src_cyc_o        : out std_logic;
+      wrf_src_stb_o        : out std_logic;
+      wrf_src_we_o         : out std_logic;
+      wrf_src_sel_o        : out std_logic_vector(1 downto 0);
+      wrf_src_ack_i        : in  std_logic;
+      wrf_src_stall_i      : in  std_logic;
+      wrf_src_err_i        : in  std_logic;
+      wrf_src_rty_i        : in  std_logic;
+      wrf_snk_adr_i        : in  std_logic_vector(1 downto 0);
+      wrf_snk_dat_i        : in  std_logic_vector(15 downto 0);
+      wrf_snk_cyc_i        : in  std_logic;
+      wrf_snk_stb_i        : in  std_logic;
+      wrf_snk_we_i         : in  std_logic;
+      wrf_snk_sel_i        : in  std_logic_vector(1 downto 0);
+      wrf_snk_ack_o        : out std_logic;
+      wrf_snk_stall_o      : out std_logic;
+      wrf_snk_err_o        : out std_logic;
+      wrf_snk_rty_o        : out std_logic;
+      wrs_tx_data_i        : in  std_logic_vector(g_tx_streamer_width-1 downto 0)        := (others => '0');
+      wrs_tx_valid_i       : in  std_logic                                               := '0';
+      wrs_tx_dreq_o        : out std_logic;
+      wrs_tx_last_i        : in  std_logic                                               := '1';
+      wrs_tx_flush_i       : in  std_logic                                               := '0';
+      wrs_rx_first_o       : out std_logic;
+      wrs_rx_last_o        : out std_logic;
+      wrs_rx_data_o        : out std_logic_vector(g_rx_streamer_width-1 downto 0);
+      wrs_rx_valid_o       : out std_logic;
+      wrs_rx_dreq_i        : in  std_logic                                               := '0';
+      wb_eth_adr_o         : out std_logic_vector(c_wishbone_address_width-1 downto 0);
+      wb_eth_dat_o         : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+      wb_eth_dat_i         : in  std_logic_vector(c_wishbone_data_width-1 downto 0)      := (others => '0');
+      wb_eth_sel_o         : out std_logic_vector(c_wishbone_address_width/8-1 downto 0);
+      wb_eth_we_o          : out std_logic;
+      wb_eth_cyc_o         : out std_logic;
+      wb_eth_stb_o         : out std_logic;
+      wb_eth_ack_i         : in  std_logic                                               := '0';
+      wb_eth_int_i         : in  std_logic                                               := '0';
+      wb_eth_err_i         : in  std_logic                                               := '0';
+      wb_eth_rty_i         : in  std_logic                                               := '0';
+      wb_eth_stall_i       : in  std_logic                                               := '0';
+      aux_diag_i           : in  std_logic_vector(g_diag_ro_vector_width - 1 downto 0)   := (others => '0');
+      aux_diag_o           : out std_logic_vector(g_diag_rw_vector_width - 1 downto 0)   := (others => '0');
+      tm_dac_value_o       : out std_logic_vector(23 downto 0);
+      tm_dac_wr_o          : out std_logic_vector(g_aux_clks-1 downto 0);
+      tm_clk_aux_lock_en_i : in  std_logic_vector(g_aux_clks-1 downto 0)                 := (others => '0');
+      tm_clk_aux_locked_o  : out std_logic_vector(g_aux_clks-1 downto 0);
+      tstamps_stb_o        : out std_logic;
+      tstamps_tsval_o      : out std_logic_vector(31 downto 0);
+      tstamps_port_id_o    : out std_logic_vector(5 downto 0);
+      tstamps_frame_id_o   : out std_logic_vector(15 downto 0);
+      tstamps_incorrect_o  : out std_logic;
+      tstamps_ack_i        : in  std_logic                                               := '1';
+      fc_tx_pause_req_i    : in  std_logic                                               := '0';
+      fc_tx_pause_delay_i  : in  std_logic_vector(15 downto 0)                           := x"0000";
+      fc_tx_pause_ready_o  : out std_logic;
+      tm_link_up_o         : out std_logic;
+      tm_time_valid_o      : out std_logic;
+      tm_tai_o             : out std_logic_vector(39 downto 0);
+      tm_cycles_o          : out std_logic_vector(27 downto 0);
+      led_act_o            : out std_logic;
+      led_link_o           : out std_logic;
+      btn1_i               : in  std_logic                                               := '1';
+      btn2_i               : in  std_logic                                               := '1';
+      pps_p_o              : out std_logic;
+      pps_led_o            : out std_logic;
+      link_ok_o            : out std_logic);
   end component wrc_board_vfchd;
 
   component sfp_i2c_adapter is
diff --git a/board/vfchd/wrc_board_vfchd.vhd b/board/vfchd/wrc_board_vfchd.vhd
index 9c872bbaee57adf1e27759515d3ee201bea0524e..2b1367436cb6b3933e4a50f57627b4aeaa575654 100644
--- a/board/vfchd/wrc_board_vfchd.vhd
+++ b/board/vfchd/wrc_board_vfchd.vhd
@@ -7,7 +7,7 @@
 -- Author(s)  : Dimitrios Lampridis  <dimitrios.lampridis@cern.ch>
 -- Company    : CERN (BE-CO-HT)
 -- Created    : 2016-07-26
--- Last update: 2017-02-22
+-- Last update: 2017-03-08
 -- Standard   : VHDL'93
 -------------------------------------------------------------------------------
 -- Description: Top-level wrapper for WR PTP core including all the modules
@@ -61,6 +61,8 @@ entity wrc_board_vfchd is
     g_with_external_clock_input : integer := 1;
     -- set to 1 to use 16bit PCS (instead of default 8bit PCS)
     g_pcs_16bit                 : integer := 0;
+    -- Number of aux clocks syntonized by WRPC to WR timebase
+    g_aux_clks                  : integer := 0;
     -- "plainfbrc" = expose WRC fabric interface
     -- "streamers" = attach WRC streamers to fabric interface
     -- "etherbone" = attach Etherbone slave to fabric interface
@@ -71,40 +73,38 @@ entity wrc_board_vfchd is
     -- memory initialisation file for embedded CPU
     g_dpram_initf               : string  := "default_altera";
     -- identification (id and ver) of the layout of words in the generic diag interface
-    g_diag_id                   : integer                        := 0;
-    g_diag_ver                  : integer                        := 0;
+    g_diag_id                   : integer := 0;
+    g_diag_ver                  : integer := 0;
     -- size the generic diag interface
-    g_diag_ro_vector_width      : integer                        := 0;
-    g_diag_rw_vector_width      : integer                        := 0
+    g_diag_ro_vector_width      : integer := 0;
+    g_diag_rw_vector_width      : integer := 0
     );
   port (
     ---------------------------------------------------------------------------
     -- Clocks/resets
     ---------------------------------------------------------------------------
-
     -- Clock inputs from the board
-    clk_board_125m_i : in std_logic;
-    clk_board_20m_i  : in std_logic;
-
+    clk_board_125m_i : in  std_logic;
+    clk_board_20m_i  : in  std_logic;
+    -- Aux clocks, which can be disciplined by the WR Core
+    clk_aux_i        : in  std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
     -- 10MHz ext ref clock input (g_with_external_clock_input = TRUE)
-    clk_ext_10m_i : in std_logic := '0';
-
+    clk_ext_10m_i    : in  std_logic                               := '0';
+    -- External PPS input (g_with_external_clock_input = TRUE)
+    pps_ext_i        : in  std_logic                               := '0';
     -- Reset input (active low, can be async)
-    areset_n_i : in std_logic;
-
+    areset_n_i       : in  std_logic;
     -- 62.5MHz sys clock output
-    clk_sys_62m5_o : out std_logic;
-
+    clk_sys_62m5_o   : out std_logic;
     -- 125MHz ref clock output
-    clk_ref_125m_o : out std_logic;
-
-    -- active low reset output, synchronous to clk_sys_62m5_o
+    clk_ref_125m_o   : out std_logic;
+    -- active low reset outputs, synchronous to 62m5 and 125m clocks
     rst_sys_62m5_n_o : out std_logic;
+    rst_ref_125m_n_o : out std_logic;
 
     ---------------------------------------------------------------------------
     -- SPI interfaces to DACs
     ---------------------------------------------------------------------------
-
     dac_ref_sync_n_o  : out std_logic;
     dac_dmtd_sync_n_o : out std_logic;
     dac_din_o         : out std_logic;
@@ -113,26 +113,22 @@ entity wrc_board_vfchd is
     ---------------------------------------------------------------------------
     -- SFP I/O for transceiver and SFP management info from VFC-HD
     ---------------------------------------------------------------------------
-
-    sfp_tx_o : out std_logic;
-    sfp_rx_i : in  std_logic;
-
+    sfp_tx_o         : out std_logic;
+    sfp_rx_i         : in  std_logic;
     -- HIGH if both of the following are true:
     -- 1. SFP is detected (plugged in)
     -- 2. The part number has been successfully read after the SFP detection
-    sfp_det_valid_i : in std_logic;
+    sfp_det_valid_i  : in  std_logic := '0';
     -- 16 byte vendor Part Number (PN)
     -- (ASCII encoded, first character byte in bits 127 downto 120)
-    sfp_data_i      : in std_logic_vector (127 downto 0);
-
-    sfp_tx_fault_i   : in  std_logic;
-    sfp_los_i        : in  std_logic;
+    sfp_data_i       : in  std_logic_vector (127 downto 0);
+    sfp_tx_fault_i   : in  std_logic := '0';
     sfp_tx_disable_o : out std_logic;
+    sfp_los_i        : in  std_logic := '0';
 
     ---------------------------------------------------------------------------
     -- I2C EEPROM
     ---------------------------------------------------------------------------
-
     eeprom_sda_i : in  std_logic;
     eeprom_sda_o : out std_logic;
     eeprom_scl_i : in  std_logic;
@@ -141,14 +137,12 @@ entity wrc_board_vfchd is
     ---------------------------------------------------------------------------
     -- Onewire interface
     ---------------------------------------------------------------------------
-
     onewire_i     : in  std_logic;
     onewire_oen_o : out std_logic;
 
     ---------------------------------------------------------------------------
     -- External WB interface
     ---------------------------------------------------------------------------
-
     wb_adr_i   : in  std_logic_vector(c_wishbone_address_width-1 downto 0)   := (others => '0');
     wb_dat_i   : in  std_logic_vector(c_wishbone_data_width-1 downto 0)      := (others => '0');
     wb_dat_o   : out std_logic_vector(c_wishbone_data_width-1 downto 0);
@@ -165,7 +159,6 @@ entity wrc_board_vfchd is
     ---------------------------------------------------------------------------
     -- WR fabric interface (when g_fabric_iface = "plain")
     ---------------------------------------------------------------------------
-
     wrf_src_adr_o   : out std_logic_vector(1 downto 0);
     wrf_src_dat_o   : out std_logic_vector(15 downto 0);
     wrf_src_cyc_o   : out std_logic;
@@ -190,22 +183,20 @@ entity wrc_board_vfchd is
     ---------------------------------------------------------------------------
     -- WR streamers (when g_fabric_iface = "streamers")
     ---------------------------------------------------------------------------
-
     wrs_tx_data_i  : in  std_logic_vector(g_tx_streamer_width-1 downto 0) := (others => '0');
-    wrs_tx_valid_i : in  std_logic                                     := '0';
+    wrs_tx_valid_i : in  std_logic                                        := '0';
     wrs_tx_dreq_o  : out std_logic;
-    wrs_tx_last_i  : in  std_logic                                     := '1';
-    wrs_tx_flush_i : in  std_logic                                     := '0';
+    wrs_tx_last_i  : in  std_logic                                        := '1';
+    wrs_tx_flush_i : in  std_logic                                        := '0';
     wrs_rx_first_o : out std_logic;
     wrs_rx_last_o  : out std_logic;
     wrs_rx_data_o  : out std_logic_vector(g_rx_streamer_width-1 downto 0);
     wrs_rx_valid_o : out std_logic;
-    wrs_rx_dreq_i  : in  std_logic                                     := '0';
+    wrs_rx_dreq_i  : in  std_logic                                        := '0';
 
     ---------------------------------------------------------------------------
     -- Etherbone WB master interface (when g_fabric_iface = "etherbone")
     ---------------------------------------------------------------------------
-
     wb_eth_adr_o   : out std_logic_vector(c_wishbone_address_width-1 downto 0);
     wb_eth_dat_o   : out std_logic_vector(c_wishbone_data_width-1 downto 0);
     wb_eth_dat_i   : in  std_logic_vector(c_wishbone_data_width-1 downto 0) := (others => '0');
@@ -222,21 +213,55 @@ entity wrc_board_vfchd is
     ---------------------------------------------------------------------------
     -- Generic diagnostics interface (access from WRPC via SNMP or uart console
     ---------------------------------------------------------------------------
+    aux_diag_i : in  std_logic_vector(g_diag_ro_vector_width - 1 downto 0) := (others => '0');
+    aux_diag_o : out std_logic_vector(g_diag_rw_vector_width - 1 downto 0) := (others => '0');
 
-    aux_diag_i      : in  std_logic_vector(g_diag_ro_vector_width - 1 downto 0) := (others => '0');
-    aux_diag_o      : out std_logic_vector(g_diag_rw_vector_width - 1 downto 0) := (others => '0');
+    ---------------------------------------------------------------------------
+    -- Aux clocks control
+    ---------------------------------------------------------------------------
+    tm_dac_value_o       : out std_logic_vector(23 downto 0);
+    tm_dac_wr_o          : out std_logic_vector(g_aux_clks-1 downto 0);
+    tm_clk_aux_lock_en_i : in  std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+    tm_clk_aux_locked_o  : out std_logic_vector(g_aux_clks-1 downto 0);
 
     ---------------------------------------------------------------------------
-    -- WRPC timing interface and status
+    -- External Tx Timestamping I/F
     ---------------------------------------------------------------------------
+    tstamps_stb_o       : out std_logic;
+    tstamps_tsval_o     : out std_logic_vector(31 downto 0);
+    tstamps_port_id_o   : out std_logic_vector(5 downto 0);
+    tstamps_frame_id_o  : out std_logic_vector(15 downto 0);
+    tstamps_incorrect_o : out std_logic;
+    tstamps_ack_i       : in  std_logic := '1';
 
-    pps_ext_i       : in  std_logic                                         := '0';
-    pps_p_o         : out std_logic;
+    ---------------------------------------------------------------------------
+    -- Pause Frame Control
+    ---------------------------------------------------------------------------
+    fc_tx_pause_req_i   : in  std_logic                     := '0';
+    fc_tx_pause_delay_i : in  std_logic_vector(15 downto 0) := x"0000";
+    fc_tx_pause_ready_o : out std_logic;
+
+    ---------------------------------------------------------------------------
+    -- Timecode I/F
+    ---------------------------------------------------------------------------
+    tm_link_up_o    : out std_logic;
     tm_time_valid_o : out std_logic;
     tm_tai_o        : out std_logic_vector(39 downto 0);
     tm_cycles_o     : out std_logic_vector(27 downto 0);
-    led_link_o      : out std_logic;
-    led_act_o       : out std_logic);
+
+    ---------------------------------------------------------------------------
+    -- Buttons, LEDs and PPS output
+    ---------------------------------------------------------------------------
+    led_act_o  : out std_logic;
+    led_link_o : out std_logic;
+    btn1_i     : in  std_logic := '1';
+    btn2_i     : in  std_logic := '1';
+    -- 1PPS output
+    pps_p_o    : out std_logic;
+    pps_led_o  : out std_logic;
+    -- Link ok indication
+    link_ok_o  : out std_logic
+    );
 
 end entity wrc_board_vfchd;
 
@@ -262,12 +287,15 @@ architecture std_wrapper of wrc_board_vfchd is
   signal wb_eth_master_in  : t_wishbone_master_in;
 
   -- Aux diagnostics
-  constant c_diag_ro_size  : integer:= g_diag_ro_vector_width/32;
-  constant c_diag_rw_size  : integer:= g_diag_rw_vector_width/32;
+  constant c_diag_ro_size : integer := g_diag_ro_vector_width/32;
+  constant c_diag_rw_size : integer := g_diag_rw_vector_width/32;
 
   signal aux_diag_in  : t_generic_word_array(c_diag_ro_size-1 downto 0);
   signal aux_diag_out : t_generic_word_array(c_diag_rw_size-1 downto 0);
 
+  -- External Tx Timestamping I/F
+  signal timestamps_out : t_txtsu_timestamp;
+
 begin  -- architecture struct
 
   -- Map top-level signals to internal records
@@ -322,15 +350,20 @@ begin  -- architecture struct
   wb_eth_master_in.rty   <= wb_eth_rty_i;
   wb_eth_master_in.stall <= wb_eth_stall_i;
 
-  -- auxiliary diagnostics
-  aux_diag_in <= f_de_vectorize_diag(aux_diag_i,g_diag_ro_vector_width);
+  aux_diag_in <= f_de_vectorize_diag(aux_diag_i, g_diag_ro_vector_width);
   aux_diag_o  <= f_vectorize_diag(aux_diag_out, g_diag_rw_vector_width);
 
+  tstamps_stb_o      <= timestamps_out.stb;
+  tstamps_tsval_o    <= timestamps_out.tsval;
+  tstamps_port_id_o  <= timestamps_out.port_id;
+  tstamps_frame_id_o <= timestamps_out.frame_id;
+
   -- Instantiate the records-based module
   cmp_xwrc_board_vfchd : xwrc_board_vfchd
     generic map (
       g_simulation                => g_simulation,
       g_with_external_clock_input => f_int2bool(g_with_external_clock_input),
+      g_aux_clks                  => g_aux_clks,
       g_pcs_16bit                 => f_int2bool(g_pcs_16bit),
       g_fabric_iface              => f_str2iface_type(g_fabric_iface),
       g_tx_streamer_width         => g_tx_streamer_width,
@@ -341,56 +374,71 @@ begin  -- architecture struct
       g_diag_ro_size              => c_diag_ro_size,
       g_diag_rw_size              => c_diag_rw_size)
     port map (
-      clk_board_125m_i  => clk_board_125m_i,
-      clk_board_20m_i   => clk_board_20m_i,
-      clk_ext_10m_i     => clk_ext_10m_i,
-      areset_n_i        => areset_n_i,
-      clk_sys_62m5_o    => clk_sys_62m5_o,
-      clk_ref_125m_o    => clk_ref_125m_o,
-      rst_sys_62m5_n_o  => rst_sys_62m5_n_o,
-      dac_ref_sync_n_o  => dac_ref_sync_n_o,
-      dac_dmtd_sync_n_o => dac_dmtd_sync_n_o,
-      dac_din_o         => dac_din_o,
-      dac_sclk_o        => dac_sclk_o,
-      sfp_tx_o          => sfp_tx_o,
-      sfp_rx_i          => sfp_rx_i,
-      sfp_det_valid_i   => sfp_det_valid_i,
-      sfp_data_i        => sfp_data_i,
-      sfp_tx_fault_i    => sfp_tx_fault_i,
-      sfp_los_i         => sfp_los_i,
-      sfp_tx_disable_o  => sfp_tx_disable_o,
-      eeprom_sda_i      => eeprom_sda_i,
-      eeprom_sda_o      => eeprom_sda_o,
-      eeprom_scl_i      => eeprom_scl_i,
-      eeprom_scl_o      => eeprom_scl_o,
-      onewire_i         => onewire_i,
-      onewire_oen_o     => onewire_oen_o,
-      wb_slave_o        => wb_slave_out,
-      wb_slave_i        => wb_slave_in,
-      wrf_src_o         => wrf_src_out,
-      wrf_src_i         => wrf_src_in,
-      wrf_snk_o         => wrf_snk_out,
-      wrf_snk_i         => wrf_snk_in,
-      wrs_tx_data_i     => wrs_tx_data_i,
-      wrs_tx_valid_i    => wrs_tx_valid_i,
-      wrs_tx_dreq_o     => wrs_tx_dreq_o,
-      wrs_tx_last_i     => wrs_tx_last_i,
-      wrs_tx_flush_i    => wrs_tx_flush_i,
-      wrs_rx_first_o    => wrs_rx_first_o,
-      wrs_rx_last_o     => wrs_rx_last_o,
-      wrs_rx_data_o     => wrs_rx_data_o,
-      wrs_rx_valid_o    => wrs_rx_valid_o,
-      wrs_rx_dreq_i     => wrs_rx_dreq_i,
-      wb_eth_master_o   => wb_eth_master_out,
-      wb_eth_master_i   => wb_eth_master_in,
-      pps_ext_i         => pps_ext_i,
-      pps_p_o           => pps_p_o,
-      tm_time_valid_o   => tm_time_valid_o,
-      tm_tai_o          => tm_tai_o,
-      tm_cycles_o       => tm_cycles_o,
-      led_link_o        => led_link_o,
-      aux_diag_i        => aux_diag_in,
-      aux_diag_o        => aux_diag_out,
-      led_act_o         => led_act_o);
+      clk_board_125m_i     => clk_board_125m_i,
+      clk_board_20m_i      => clk_board_20m_i,
+      clk_aux_i            => clk_aux_i,
+      clk_ext_10m_i        => clk_ext_10m_i,
+      areset_n_i           => areset_n_i,
+      clk_sys_62m5_o       => clk_sys_62m5_o,
+      clk_ref_125m_o       => clk_ref_125m_o,
+      rst_sys_62m5_n_o     => rst_sys_62m5_n_o,
+      rst_ref_125m_n_o     => rst_ref_125m_n_o,
+      dac_ref_sync_n_o     => dac_ref_sync_n_o,
+      dac_dmtd_sync_n_o    => dac_dmtd_sync_n_o,
+      dac_din_o            => dac_din_o,
+      dac_sclk_o           => dac_sclk_o,
+      sfp_tx_o             => sfp_tx_o,
+      sfp_rx_i             => sfp_rx_i,
+      sfp_det_valid_i      => sfp_det_valid_i,
+      sfp_data_i           => sfp_data_i,
+      sfp_tx_fault_i       => sfp_tx_fault_i,
+      sfp_tx_disable_o     => sfp_tx_disable_o,
+      sfp_los_i            => sfp_los_i,
+      eeprom_sda_i         => eeprom_sda_i,
+      eeprom_sda_o         => eeprom_sda_o,
+      eeprom_scl_i         => eeprom_scl_i,
+      eeprom_scl_o         => eeprom_scl_o,
+      onewire_i            => onewire_i,
+      onewire_oen_o        => onewire_oen_o,
+      wb_slave_o           => wb_slave_out,
+      wb_slave_i           => wb_slave_in,
+      wrf_src_o            => wrf_src_out,
+      wrf_src_i            => wrf_src_in,
+      wrf_snk_o            => wrf_snk_out,
+      wrf_snk_i            => wrf_snk_in,
+      wrs_tx_data_i        => wrs_tx_data_i,
+      wrs_tx_valid_i       => wrs_tx_valid_i,
+      wrs_tx_dreq_o        => wrs_tx_dreq_o,
+      wrs_tx_last_i        => wrs_tx_last_i,
+      wrs_tx_flush_i       => wrs_tx_flush_i,
+      wrs_rx_first_o       => wrs_rx_first_o,
+      wrs_rx_last_o        => wrs_rx_last_o,
+      wrs_rx_data_o        => wrs_rx_data_o,
+      wrs_rx_valid_o       => wrs_rx_valid_o,
+      wrs_rx_dreq_i        => wrs_rx_dreq_i,
+      wb_eth_master_o      => wb_eth_master_out,
+      wb_eth_master_i      => wb_eth_master_in,
+      aux_diag_i           => aux_diag_in,
+      aux_diag_o           => aux_diag_out,
+      tm_dac_value_o       => tm_dac_value_o,
+      tm_dac_wr_o          => tm_dac_wr_o,
+      tm_clk_aux_lock_en_i => tm_clk_aux_lock_en_i,
+      tm_clk_aux_locked_o  => tm_clk_aux_locked_o,
+      timestamps_o         => timestamps_out,
+      timestamps_ack_i     => tstamps_ack_i,
+      fc_tx_pause_req_i    => fc_tx_pause_req_i,
+      fc_tx_pause_delay_i  => fc_tx_pause_delay_i,
+      fc_tx_pause_ready_o  => fc_tx_pause_ready_o,
+      tm_link_up_o         => tm_link_up_o,
+      tm_time_valid_o      => tm_time_valid_o,
+      tm_tai_o             => tm_tai_o,
+      tm_cycles_o          => tm_cycles_o,
+      led_act_o            => led_act_o,
+      led_link_o           => led_link_o,
+      btn1_i               => btn1_i,
+      btn2_i               => btn2_i,
+      pps_p_o              => pps_p_o,
+      pps_led_o            => pps_led_o,
+      link_ok_o            => link_ok_o);
 
 end architecture std_wrapper;
diff --git a/board/vfchd/xwrc_board_vfchd.vhd b/board/vfchd/xwrc_board_vfchd.vhd
index 92f8a338baf96ccc4c76750d3d651fdfd9ccf687..1ae4b246f19c2cc57bc5ba9f1c1c45ac538b91a0 100644
--- a/board/vfchd/xwrc_board_vfchd.vhd
+++ b/board/vfchd/xwrc_board_vfchd.vhd
@@ -7,7 +7,7 @@
 -- Author(s)  : Dimitrios Lampridis  <dimitrios.lampridis@cern.ch>
 -- Company    : CERN (BE-CO-HT)
 -- Created    : 2016-07-26
--- Last update: 2017-03-07
+-- Last update: 2017-03-08
 -- Standard   : VHDL'93
 -------------------------------------------------------------------------------
 -- Description: Top-level wrapper for WR PTP core including all the modules
@@ -57,6 +57,8 @@ entity xwrc_board_vfchd is
     g_simulation                : integer              := 0;
     -- Select whether to include external ref clock input
     g_with_external_clock_input : boolean              := TRUE;
+    -- Number of aux clocks syntonized by WRPC to WR timebase
+    g_aux_clks                  : integer              := 0;
     -- set to TRUE to use 16bit PCS (instead of default 8bit PCS)
     g_pcs_16bit                 : boolean              := FALSE;
     -- plain     = expose WRC fabric interface
@@ -64,45 +66,43 @@ entity xwrc_board_vfchd is
     -- etherbone = attach Etherbone slave to fabric interface
     g_fabric_iface              : t_board_fabric_iface := plain;
     -- data width when g_fabric_iface = "streamers" (otherwise ignored)
-    g_tx_streamer_width         : integer := 32;
-    g_rx_streamer_width         : integer := 32;
+    g_tx_streamer_width         : integer              := 32;
+    g_rx_streamer_width         : integer              := 32;
     -- memory initialisation file for embedded CPU
     g_dpram_initf               : string               := "default_altera";
     -- identification (id and ver) of the layout of words in the generic diag interface
-    g_diag_id                   : integer                        := 0;
-    g_diag_ver                  : integer                        := 0;
+    g_diag_id                   : integer              := 0;
+    g_diag_ver                  : integer              := 0;
     -- size the generic diag interface
-    g_diag_ro_size              : integer                        := 0;
-    g_diag_rw_size              : integer                        := 0
+    g_diag_ro_size              : integer              := 0;
+    g_diag_rw_size              : integer              := 0
     );
   port (
     ---------------------------------------------------------------------------
     -- Clocks/resets
     ---------------------------------------------------------------------------
-
     -- Clock inputs from the board
-    clk_board_125m_i : in std_logic;
-    clk_board_20m_i  : in std_logic;
-
+    clk_board_125m_i : in  std_logic;
+    clk_board_20m_i  : in  std_logic;
+    -- Aux clocks, which can be disciplined by the WR Core
+    clk_aux_i        : in  std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
     -- 10MHz ext ref clock input (g_with_external_clock_input = TRUE)
-    clk_ext_10m_i : in std_logic := '0';
-
+    clk_ext_10m_i    : in  std_logic                               := '0';
+    -- External PPS input (g_with_external_clock_input = TRUE)
+    pps_ext_i        : in  std_logic                               := '0';
     -- Reset input (active low, can be async)
-    areset_n_i : in std_logic;
-
+    areset_n_i       : in  std_logic;
     -- 62.5MHz sys clock output
-    clk_sys_62m5_o : out std_logic;
-
+    clk_sys_62m5_o   : out std_logic;
     -- 125MHz ref clock output
-    clk_ref_125m_o : out std_logic;
-
-    -- active low reset output, synchronous to clk_sys_62m5_o
+    clk_ref_125m_o   : out std_logic;
+    -- active low reset outputs, synchronous to 62m5 and 125m clocks
     rst_sys_62m5_n_o : out std_logic;
+    rst_ref_125m_n_o : out std_logic;
 
     ---------------------------------------------------------------------------
     -- SPI interfaces to DACs
     ---------------------------------------------------------------------------
-
     dac_ref_sync_n_o  : out std_logic;
     dac_dmtd_sync_n_o : out std_logic;
     dac_din_o         : out std_logic;
@@ -111,26 +111,22 @@ entity xwrc_board_vfchd is
     ---------------------------------------------------------------------------
     -- SFP I/O for transceiver and SFP management info from VFC-HD
     ---------------------------------------------------------------------------
-
-    sfp_tx_o : out std_logic;
-    sfp_rx_i : in  std_logic;
-
+    sfp_tx_o         : out std_logic;
+    sfp_rx_i         : in  std_logic;
     -- HIGH if both of the following are true:
     -- 1. SFP is detected (plugged in)
     -- 2. The part number has been successfully read after the SFP detection
-    sfp_det_valid_i : in std_logic;
+    sfp_det_valid_i  : in  std_logic := '0';
     -- 16 byte vendor Part Number (PN)
     -- (ASCII encoded, first character byte in bits 127 downto 120)
-    sfp_data_i      : in std_logic_vector (127 downto 0);
-
-    sfp_tx_fault_i   : in  std_logic;
-    sfp_los_i        : in  std_logic;
+    sfp_data_i       : in  std_logic_vector (127 downto 0);
+    sfp_tx_fault_i   : in  std_logic := '0';
     sfp_tx_disable_o : out std_logic;
+    sfp_los_i        : in  std_logic := '0';
 
     ---------------------------------------------------------------------------
     -- I2C EEPROM
     ---------------------------------------------------------------------------
-
     eeprom_sda_i : in  std_logic;
     eeprom_sda_o : out std_logic;
     eeprom_scl_i : in  std_logic;
@@ -139,21 +135,18 @@ entity xwrc_board_vfchd is
     ---------------------------------------------------------------------------
     -- Onewire interface
     ---------------------------------------------------------------------------
-
     onewire_i     : in  std_logic;
     onewire_oen_o : out std_logic;
 
     ---------------------------------------------------------------------------
     -- External WB interface
     ---------------------------------------------------------------------------
-
     wb_slave_o : out t_wishbone_slave_out;
     wb_slave_i : in  t_wishbone_slave_in := cc_dummy_slave_in;
 
     ---------------------------------------------------------------------------
     -- WR fabric interface (when g_fabric_iface = "plain")
     ---------------------------------------------------------------------------
-
     wrf_src_o : out t_wrf_source_out;
     wrf_src_i : in  t_wrf_source_in := c_dummy_src_in;
     wrf_snk_o : out t_wrf_sink_out;
@@ -162,44 +155,71 @@ entity xwrc_board_vfchd is
     ---------------------------------------------------------------------------
     -- WR streamers (when g_fabric_iface = "streamers")
     ---------------------------------------------------------------------------
-
     wrs_tx_data_i  : in  std_logic_vector(g_tx_streamer_width-1 downto 0) := (others => '0');
-    wrs_tx_valid_i : in  std_logic                                     := '0';
+    wrs_tx_valid_i : in  std_logic                                        := '0';
     wrs_tx_dreq_o  : out std_logic;
-    wrs_tx_last_i  : in  std_logic                                     := '1';
-    wrs_tx_flush_i : in  std_logic                                     := '0';
+    wrs_tx_last_i  : in  std_logic                                        := '1';
+    wrs_tx_flush_i : in  std_logic                                        := '0';
     wrs_rx_first_o : out std_logic;
     wrs_rx_last_o  : out std_logic;
     wrs_rx_data_o  : out std_logic_vector(g_rx_streamer_width-1 downto 0);
     wrs_rx_valid_o : out std_logic;
-    wrs_rx_dreq_i  : in  std_logic                                     := '0';
+    wrs_rx_dreq_i  : in  std_logic                                        := '0';
 
     ---------------------------------------------------------------------------
     -- Etherbone WB master interface (when g_fabric_iface = "etherbone")
     ---------------------------------------------------------------------------
-
     wb_eth_master_o : out t_wishbone_master_out;
     wb_eth_master_i : in  t_wishbone_master_in := cc_dummy_master_in;
 
     ---------------------------------------------------------------------------
     -- Generic diagnostics interface (access from WRPC via SNMP or uart console
     ---------------------------------------------------------------------------
+    aux_diag_i : in  t_generic_word_array(g_diag_ro_size-1 downto 0) := (others => (others => '0'));
+    aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0);
 
-    aux_diag_i           : in  t_generic_word_array(g_diag_ro_size-1 downto 0) := (others =>(others=>'0'));
-    aux_diag_o           : out t_generic_word_array(g_diag_rw_size-1 downto 0);
+    ---------------------------------------------------------------------------
+    -- Aux clocks control
+    ---------------------------------------------------------------------------
+    tm_dac_value_o       : out std_logic_vector(23 downto 0);
+    tm_dac_wr_o          : out std_logic_vector(g_aux_clks-1 downto 0);
+    tm_clk_aux_lock_en_i : in  std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+    tm_clk_aux_locked_o  : out std_logic_vector(g_aux_clks-1 downto 0);
 
     ---------------------------------------------------------------------------
-    -- WRPC timing interface and status
+    -- External Tx Timestamping I/F
     ---------------------------------------------------------------------------
+    timestamps_o     : out t_txtsu_timestamp;
+    timestamps_ack_i : in  std_logic := '1';
 
-    pps_ext_i       : in  std_logic                                    := '0';
-    pps_p_o         : out std_logic;
-    pps_led_o       : out std_logic;
+    ---------------------------------------------------------------------------
+    -- Pause Frame Control
+    ---------------------------------------------------------------------------
+    fc_tx_pause_req_i   : in  std_logic                     := '0';
+    fc_tx_pause_delay_i : in  std_logic_vector(15 downto 0) := x"0000";
+    fc_tx_pause_ready_o : out std_logic;
+
+    ---------------------------------------------------------------------------
+    -- Timecode I/F
+    ---------------------------------------------------------------------------
+    tm_link_up_o    : out std_logic;
     tm_time_valid_o : out std_logic;
     tm_tai_o        : out std_logic_vector(39 downto 0);
     tm_cycles_o     : out std_logic_vector(27 downto 0);
-    led_link_o      : out std_logic;
-    led_act_o       : out std_logic);
+
+    ---------------------------------------------------------------------------
+    -- Buttons, LEDs and PPS output
+    ---------------------------------------------------------------------------
+    led_act_o  : out std_logic;
+    led_link_o : out std_logic;
+    btn1_i     : in  std_logic := '1';
+    btn2_i     : in  std_logic := '1';
+    -- 1PPS output
+    pps_p_o    : out std_logic;
+    pps_led_o  : out std_logic;
+    -- Link ok indication
+    link_ok_o  : out std_logic
+    );
 
 end entity xwrc_board_vfchd;
 
@@ -220,8 +240,8 @@ architecture struct of xwrc_board_vfchd is
   -- Reset logic
   signal rst_62m5_n       : std_logic;
   signal rstlogic_arst_n  : std_logic;
-  signal rstlogic_clk_in  : std_logic_vector(0 downto 0);
-  signal rstlogic_rst_out : std_logic_vector(0 downto 0);
+  signal rstlogic_clk_in  : std_logic_vector(1 downto 0);
+  signal rstlogic_rst_out : std_logic_vector(1 downto 0);
 
   -- PLL DAC ARB
   signal dac_sync_n       : std_logic_vector(1 downto 0);
@@ -298,10 +318,11 @@ begin  -- architecture struct
 
   -- concatenation of all clocks required to have synced resets
   rstlogic_clk_in(0) <= clk_pll_62m5;
+  rstlogic_clk_in(1) <= clk_pll_125m;
 
   cmp_rstlogic_reset : gc_reset
     generic map (
-      g_clocks    => 1,                           -- 62.5MHz
+      g_clocks    => 2,                           -- 62.5MHz, 125MHz
       g_logdelay  => 4,                           -- 16 clock cycles
       g_syncdepth => 3)                           -- length of sync chains
     port map (
@@ -314,6 +335,7 @@ begin  -- architecture struct
   rst_62m5_n <= rstlogic_rst_out(0);
 
   rst_sys_62m5_n_o <= rst_62m5_n;
+  rst_ref_125m_n_o <= rstlogic_rst_out(1);
 
   -----------------------------------------------------------------------------
   -- SPI DAC (2-channel)
@@ -370,7 +392,7 @@ begin  -- architecture struct
       -- temporary, without it vuart receives but is not able to transmit
       g_phys_uart                 => TRUE,
       g_virtual_uart              => TRUE,
-      g_aux_clks                  => 0,
+      g_aux_clks                  => g_aux_clks,
       g_ep_rxbuf_size             => 1024,
       g_tx_runt_padding           => TRUE,
       g_dpram_initf               => g_dpram_initf,
@@ -393,7 +415,7 @@ begin  -- architecture struct
       clk_sys_i            => clk_pll_62m5,
       clk_dmtd_i           => clk_pll_dmtd,
       clk_ref_i            => clk_pll_125m,
-      clk_aux_i            => (others => '0'),
+      clk_aux_i            => clk_aux_i,
       clk_ext_i            => clk_10m_ext,
       clk_ext_mul_i        => ext_ref_mul,
       clk_ext_mul_locked_i => ext_ref_mul_locked,
@@ -409,8 +431,6 @@ begin  -- architecture struct
       phy8_i               => phy8_to_wrc,
       phy16_o              => phy16_from_wrc,
       phy16_i              => phy16_to_wrc,
-      led_act_o            => led_act_o,
-      led_link_o           => led_link_o,
       scl_o                => eeprom_scl_o,
       scl_i                => eeprom_scl_i,
       sda_o                => eeprom_sda_o,
@@ -420,8 +440,6 @@ begin  -- architecture struct
       sfp_sda_o            => sfp_i2c_sda_in,
       sfp_sda_i            => not sfp_i2c_sda_en,
       sfp_det_i            => not sfp_det_valid_i,  -- WRPC-SW expects this active low
-      btn1_i               => '1',
-      btn2_i               => '1',
       spi_sclk_o           => open,
       spi_ncs_o            => open,
       spi_mosi_o           => open,
@@ -449,23 +467,27 @@ begin  -- architecture struct
       wrs_rx_dreq_i        => wrs_rx_dreq_i,
       wb_eth_master_o      => wb_eth_master_o,
       wb_eth_master_i      => wb_eth_master_i,
-      timestamps_o         => open,
-      timestamps_ack_i     => '1',
-      fc_tx_pause_req_i    => '0',
-      fc_tx_pause_delay_i  => (others => '0'),
-      fc_tx_pause_ready_o  => open,
-      tm_link_up_o         => open,
-      tm_dac_value_o       => open,
-      tm_dac_wr_o          => open,
-      tm_clk_aux_lock_en_i => (others => '0'),
-      tm_clk_aux_locked_o  => open,
+      aux_diag_i           => aux_diag_i,
+      aux_diag_o           => aux_diag_o,
+      tm_dac_value_o       => tm_dac_value_o,
+      tm_dac_wr_o          => tm_dac_wr_o,
+      tm_clk_aux_lock_en_i => tm_clk_aux_lock_en_i,
+      tm_clk_aux_locked_o  => tm_clk_aux_locked_o,
+      timestamps_o         => timestamps_o,
+      timestamps_ack_i     => timestamps_ack_i,
+      fc_tx_pause_req_i    => fc_tx_pause_req_i,
+      fc_tx_pause_delay_i  => fc_tx_pause_delay_i,
+      fc_tx_pause_ready_o  => fc_tx_pause_ready_o,
+      tm_link_up_o         => tm_link_up_o,
       tm_time_valid_o      => tm_time_valid_o,
       tm_tai_o             => tm_tai_o,
       tm_cycles_o          => tm_cycles_o,
+      led_act_o            => led_act_o,
+      led_link_o           => led_link_o,
+      btn1_i               => btn1_i,
+      btn2_i               => btn2_i,
       pps_p_o              => pps_p_o,
       pps_led_o            => pps_led_o,
-      aux_diag_i           => aux_diag_i,
-      aux_diag_o           => aux_diag_o,
-      link_ok_o            => open);
+      link_ok_o            => link_ok_o);
 
 end architecture struct;
diff --git a/top/spec_ref_design/spec_wr_ref_top.vhd b/top/spec_ref_design/spec_wr_ref_top.vhd
index 1d3587c853ab35f1c126bba88e71f37ba0d3db6a..ddfe473fdc14133c0920ca8a67377f309f5b5d67 100644
--- a/top/spec_ref_design/spec_wr_ref_top.vhd
+++ b/top/spec_ref_design/spec_wr_ref_top.vhd
@@ -7,7 +7,7 @@
 -- Author(s)  : Grzegorz Daniluk <grzegorz.daniluk@cern.ch>
 -- Company    : CERN (BE-CO-HT)
 -- Created    : 2017-02-20
--- Last update: 2017-02-22
+-- Last update: 2017-03-08
 -- Standard   : VHDL'93
 -------------------------------------------------------------------------------
 -- Description: Top-level file for the WRPC reference design on the SPEC.
@@ -428,8 +428,8 @@ begin  -- architecture top
       clk_10m_ext_ref_i   => clk_ext_10m,
       clk_sys_62m5_o      => clk_sys_62m5,
       clk_ref_125m_o      => clk_ref_125m,
-      rst_62m5_n_o        => rst_sys_62m5_n,
-      rst_125m_n_o        => rst_ref_125m_n,
+      rst_sys_62m5_n_o    => rst_sys_62m5_n,
+      rst_ref_125m_n_o    => rst_ref_125m_n,
 
       plldac_sclk_o       => plldac_sclk_o,
       plldac_din_o        => plldac_din_o,