diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_remote.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_remote.vhd
index 1a515832488603df758a204255b8f4ff5f571c1d..b969c5050b2e374b1a0d2fdff662bb06f57ad304 100644
--- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_remote.vhd
+++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_remote.vhd
@@ -41,10 +41,10 @@ entity sdp_beamformer_remote is
     g_nof_aligners_max  : natural := c_sdp_N_pn_max
   );
   port (
-    dp_clk      : in  std_logic;
-    dp_rst      : in  std_logic;
+    dp_clk        : in  std_logic;
+    dp_rst        : in  std_logic;
 
-    rn_index    : in  natural range 0 to c_sdp_N_pn_max - 1 := 0;
+    rn_index      : in  natural range 0 to c_sdp_N_pn_max - 1 := 0;
 
     local_bf_sosi : in  t_dp_sosi;
     from_ri_sosi  : in  t_dp_sosi;
@@ -68,9 +68,13 @@ end sdp_beamformer_remote;
 architecture str of sdp_beamformer_remote is
   constant c_data_w                : natural := c_nof_complex * c_sdp_W_beamlet_sum;
   constant c_block_size            : natural := c_sdp_S_sub_bf * c_sdp_N_pol_bf;
-  constant c_fifo_size             : natural := 2**ceil_log2((c_block_size * 9) / 16);  -- 9/16 = 36/64, 1 block of 64 bit words rounded to the next power of 2 = 1024.
+  constant c_fifo_size             : natural := 2**ceil_log2((c_block_size * 9) / 16);  -- 9/16 = 36/64, 1 block of
+                                                -- 64 bit words rounded to the next power of 2 = 1024.
 
-  signal dispatch_sosi_arr       : t_dp_sosi_arr(c_sdp_P_sum - 1 downto 0)  := (others => c_dp_sosi_rst);  -- 1 for local, 1 for remote.
+  signal chain_node_index        : natural range 0 to c_sdp_N_pn_max - 1 := 0;
+
+  -- c_sdp_P_sum = 2 streams, 1 for local, 1 for remote
+  signal dispatch_sosi_arr       : t_dp_sosi_arr(c_sdp_P_sum - 1 downto 0)  := (others => c_dp_sosi_rst);
   signal dp_fifo_sosi            : t_dp_sosi := c_dp_sosi_rst;
   signal dp_fifo_siso            : t_dp_siso := c_dp_siso_rdy;
   signal beamlets_data_sosi_arr  : t_dp_sosi_arr(c_sdp_P_sum - 1 downto 0)  := (others => c_dp_sosi_rst);
@@ -82,8 +86,10 @@ begin
   p_wire_local_bf_sosi : process(local_bf_sosi)
   begin
     dispatch_sosi_arr(0) <= local_bf_sosi;
-    dispatch_sosi_arr(0).data(c_sdp_W_beamlet_sum - 1 downto 0)                   <= local_bf_sosi.re(c_sdp_W_beamlet_sum - 1 downto 0);
-    dispatch_sosi_arr(0).data(c_data_w - 1            downto c_sdp_W_beamlet_sum) <= local_bf_sosi.im(c_sdp_W_beamlet_sum - 1 downto 0);
+    dispatch_sosi_arr(0).data(c_sdp_W_beamlet_sum - 1 downto 0) <=
+                              local_bf_sosi.re(c_sdp_W_beamlet_sum - 1 downto 0);
+    dispatch_sosi_arr(0).data(c_data_w - 1 downto c_sdp_W_beamlet_sum) <=
+                              local_bf_sosi.im(c_sdp_W_beamlet_sum - 1 downto 0);
   end process;
 
   ---------------------------------------------------------------
@@ -129,20 +135,30 @@ begin
   ---------------------------------------------------------------
   -- dp_bsn_aligner_v2
   ---------------------------------------------------------------
+
+  -- The SDP beamformer starts at ring node 0 and outputs at the last ring
+  -- node, therefore the chain_node_index = the rn_index. The chain_node_index
+  -- does not wrap, because it starts at ring node 0. Therefore a design with
+  -- an SDP beamformer that is defined for g_nof_aligners_max = c_sdp_N_pn_max
+  -- = 16 will also work in a ring with less nodes.
+  chain_node_index <= rn_index;
+
   u_mmp_dp_bsn_align_v2 : entity dp_lib.mmp_dp_bsn_align_v2
   generic map(
     -- for dp_bsn_align_v2
-    g_nof_streams             => c_sdp_P_sum,
-    g_bsn_latency_max         => 2,  -- max 2 blocks latency
-    g_nof_aligners_max        => g_nof_aligners_max,
-    g_block_size              => c_block_size,
-    g_data_w                  => c_data_w,
-    g_use_mm_output           => false,
-    g_rd_latency              => 1,
+    g_nof_streams               => c_sdp_P_sum,
+    g_bsn_latency_max           => 2,  -- max 2 blocks latency
+    g_use_aligner_at_first_node => true,
+    g_nof_aligners_max          => g_nof_aligners_max,
+    g_block_size                => c_block_size,
+    g_data_w                    => c_data_w,
+    g_use_mm_output             => false,
+    g_rd_latency                => 1,
     -- for mms_dp_bsn_monitor_v2
-    g_nof_clk_per_sync        => c_sdp_N_clk_sync_timeout,  -- Using c_sdp_N_clk_sync_timeout as g_nof_clk_per_sync is used for BSN monitor timeout.
-    g_nof_input_bsn_monitors  => c_sdp_P_sum,
-    g_use_bsn_output_monitor  => true
+    g_nof_clk_per_sync          => c_sdp_N_clk_sync_timeout,  -- Using c_sdp_N_clk_sync_timeout as g_nof_clk_per_sync
+                                                              -- is used for BSN monitor timeout.
+    g_nof_input_bsn_monitors    => c_sdp_P_sum,
+    g_use_bsn_output_monitor    => true
     )
   port map (
     -- Memory-mapped clock domain
@@ -162,7 +178,7 @@ begin
     dp_rst     => dp_rst,
     dp_clk     => dp_clk,
 
-    node_index => rn_index,
+    chain_node_index => chain_node_index,
 
     -- Streaming input
     in_sosi_arr  => dispatch_sosi_arr,