diff --git a/top/firmware/hdl/emp_payload.vhd b/top/firmware/hdl/emp_payload.vhd
index 6cdb337d52920f13b419f17d316fe525edbed68e..72982d690d5174251b7aba50b9a28e20539205e3 100644
--- a/top/firmware/hdl/emp_payload.vhd
+++ b/top/firmware/hdl/emp_payload.vhd
@@ -122,22 +122,7 @@ begin
         );
 
     --==============================--
-    fe_channel_ctrl: entity work.ipbus_reg_v
-    --==============================--
-    generic map (
-        N_REG => 1
-    )
-    port map (
-        clk       => clk,
-        reset     => rst,
-        ipbus_in  => ipb_to_slaves(N_SLV_FE),
-        ipbus_out => ipb_from_slaves(N_SLV_FE),
-        q         => channel_sel,
-        qmask     => (0 => X"0000007f")
-    );
-
-    --==============================--
-    channel_ctrl : entity work.ipbus_ctrlreg_v
+    fe_channel_ctrl : entity work.ipbus_ctrlreg_v
     --==============================--
     generic map(
         N_CTRL    => 1,
@@ -154,6 +139,22 @@ begin
 
     fe_status_registers(0) <= std_logic_vector(to_unsigned(cNumberOfFEModules, 32));
 
+    --==============================--
+    channel_select : entity work.ipbus_dc_fabric_sel
+    --==============================--
+    generic map (
+        SEL_WIDTH => 7
+    )
+    port map (
+        clk       => clk,
+        rst       => rst,
+        sel       => fe_control_registers(0)(6 downto 0),
+        ipb_in    => ipb_to_slaves(N_SLV_FE_CHAN),
+        ipb_out   => ipb_from_slaves(N_SLV_FE_CHAN),
+        ipbdc_out => ipb_chain(0),
+        ipbdc_in  => ipb_chain(cNumberOfFEModules)
+    );
+
     --==============================--
     mproc_channel_ctrl: entity work.ipbus_reg_v
     --==============================--