diff --git a/libraries/dsp/correlator/src/vhdl/corr_accumulator.vhd b/libraries/dsp/correlator/src/vhdl/corr_accumulator.vhd
index 561831a32c669c46ac408d2f5c142b234a1514b1..bff6742e02a338a9159ad1b97179b6ac78216e3d 100644
--- a/libraries/dsp/correlator/src/vhdl/corr_accumulator.vhd
+++ b/libraries/dsp/correlator/src/vhdl/corr_accumulator.vhd
@@ -35,7 +35,7 @@ ENTITY corr_accumulator IS
   GENERIC (
     g_nof_inputs        : NATURAL;
     g_accumulator_depth : NATURAL;
-    g_data_w        : NATURAL
+    g_data_w            : NATURAL
    ); 
   PORT (
     rst            : IN  STD_LOGIC;
@@ -53,10 +53,10 @@ ARCHITECTURE rtl OF corr_accumulator IS
   -- c_shiftram_delay is such that common_shiftram output aligns exactly with snk_in_arr. Functionally this 
   -- means we aligned the current word to the corresponding previous word at the adder inputs.
   CONSTANT c_shiftram_delay           : NATURAL := g_accumulator_depth-c_shiftram_io_delay;
-  CONSTANT c_shift_w                  : NATURAL := ceil_log2(g_nof_words);
-  CONSTANT c_common_shiftram_shift_in : STD_LOGIC_VECTOR := (c_shift_w-1 DOWNTO 0) := TO_UVEC(c_shiftram_delay, c_shift_w);
+  CONSTANT c_shift_w                  : NATURAL := ceil_log2(g_accumulator_depth);
+  CONSTANT c_common_shiftram_shift_in : STD_LOGIC_VECTOR(c_shift_w-1 DOWNTO 0) := TO_UVEC(c_shiftram_delay, c_shift_w);
 
-  SIGNAL corr_adder_snk_in_2arr_2     : t_dp_sosi_2arr_2(g_nof_inputs-1 DOWNTO 0) -- Array of pairs
+  SIGNAL corr_adder_snk_in_2arr_2     : t_dp_sosi_2arr_2(g_nof_inputs-1 DOWNTO 0); -- Array of pairs
   SIGNAL corr_adder_src_out_arr       : t_dp_sosi_arr(g_nof_inputs-1 DOWNTO 0);
 
   SIGNAL common_shiftram_snk_in_arr   : t_dp_sosi_arr(g_nof_inputs-1 DOWNTO 0);
@@ -94,8 +94,10 @@ BEGIN
   -- . common_shiftram_src_out_arr = delayed corr_adder_src_out_arr
   -----------------------------------------------------------------------------
   -- Concatenate real&imaginary parts
-  common_shiftram_snk_in_arr(i).data(g_data_w-1   DOWNTO g_data_w/2) <= corr_adder_src_out_arr(i).re(g_data_w/2-1 DOWNTO 0);
-  common_shiftram_snk_in_arr(i).data(g_data_w/2-1 DOWNTO 0)          <= corr_adder_src_out_arr(i).im(g_data_w/2-1 DOWNTO 0);
+  gen_concat_complex : FOR i IN 0 TO g_nof_inputs-1 GENERATE
+    common_shiftram_snk_in_arr(i).data(g_data_w-1   DOWNTO g_data_w/2) <= corr_adder_src_out_arr(i).re(g_data_w/2-1 DOWNTO 0);
+    common_shiftram_snk_in_arr(i).data(g_data_w/2-1 DOWNTO 0)          <= corr_adder_src_out_arr(i).im(g_data_w/2-1 DOWNTO 0);
+  END GENERATE;
 
   gen_common_shiftram : FOR i IN 0 TO g_nof_inputs-1 GENERATE
     u_common_shiftram : ENTITY common_lib.common_shiftram
@@ -121,6 +123,6 @@ BEGIN
   -- Output 1/g_accumulator_depth words per stream
   -- . Not implemented yet.
   -----------------------------------------------------------------------------
-  src_out <= common_shiftram_src_out_arr;
+  src_out_arr <= common_shiftram_src_out_arr;
 
 END rtl;
diff --git a/libraries/dsp/correlator/src/vhdl/corr_adder.vhd b/libraries/dsp/correlator/src/vhdl/corr_adder.vhd
index 80e4dae8a45aca3da8a79463a8cd113e26ef3059..2b05b1df235dd593e057ab97484449c5010ff5b8 100644
--- a/libraries/dsp/correlator/src/vhdl/corr_adder.vhd
+++ b/libraries/dsp/correlator/src/vhdl/corr_adder.vhd
@@ -29,7 +29,7 @@ USE dp_lib.dp_stream_pkg.ALL;
 -- . Provide an array of complex adders with streaming I/O
 -- Description:
 -- . Adds snk_in_2arr_2[i][0] to snk_in_2arr_2[i][1] yielding 
---   src_out_2arr[i] for i in 0..g_nof_inputs-1.
+--   src_out_arr[i] for i in 0..g_nof_inputs-1.
 
 ENTITY corr_adder IS
   GENERIC (
@@ -39,9 +39,9 @@ ENTITY corr_adder IS
     rst            : IN  STD_LOGIC;
     clk            : IN  STD_LOGIC;
 
-    snk_in_2arr_2  : IN  t_dp_sosi_2arr_2(g_nof_inputs);
+    snk_in_2arr_2  : IN  t_dp_sosi_2arr_2(g_nof_inputs-1 DOWNTO 0);
 
-    src_out_2arr   : OUT t_dp_sosi_2arr_2(g_nof_inputs)
+    src_out_arr   : OUT t_dp_sosi_arr(g_nof_inputs-1 DOWNTO 0)
   );
 END corr_adder;
 
@@ -65,8 +65,8 @@ BEGIN
       in_ai      => snk_in_2arr_2(i)(0).im(35 DOWNTO 0),
       in_br      => snk_in_2arr_2(i)(1).re(35 DOWNTO 0),
       in_bi      => snk_in_2arr_2(i)(1).im(35 DOWNTO 0),
-      out_re     => src_out_2arr(i).re(63 DOWNTO 0),
-      out_im     => src_out_2arr(i).im(63 DOWNTO 0)
+      out_re     => src_out_arr(i).re(63 DOWNTO 0),
+      out_im     => src_out_arr(i).im(63 DOWNTO 0)
     );     
   END GENERATE;
 
diff --git a/libraries/dsp/correlator/src/vhdl/corr_multiplier.vhd b/libraries/dsp/correlator/src/vhdl/corr_multiplier.vhd
index 200a76435c36910020d8fc1cda0e2e4d7962f818..318378b2cadd660e59a29fc2604316bd139a6d93 100644
--- a/libraries/dsp/correlator/src/vhdl/corr_multiplier.vhd
+++ b/libraries/dsp/correlator/src/vhdl/corr_multiplier.vhd
@@ -39,9 +39,9 @@ ENTITY corr_multiplier IS
     rst            : IN  STD_LOGIC;
     clk            : IN  STD_LOGIC;
 
-    snk_in_2arr_2  : IN  t_dp_sosi_2arr_2(g_nof_inputs);
+    snk_in_2arr_2  : IN  t_dp_sosi_2arr_2(g_nof_inputs-1 DOWNTO 0);
 
-    src_out_2arr   : OUT t_dp_sosi_2arr_2(g_nof_inputs)
+    src_out_arr   : OUT t_dp_sosi_arr(g_nof_inputs-1 DOWNTO 0)
   );
 END corr_multiplier;
 
@@ -73,8 +73,8 @@ BEGIN
       in_ai      => snk_in_2arr_2(i)(0).im(17 DOWNTO 0),
       in_br      => snk_in_2arr_2(i)(1).re(17 DOWNTO 0),
       in_bi      => snk_in_2arr_2(i)(1).im(17 DOWNTO 0),
-      out_pr     => src_out_2arr(i).re(35 DOWNTO 0),
-      out_pi     => src_out_2arr(i).im(35 DOWNTO 0)
+      out_pr     => src_out_arr(i).re(35 DOWNTO 0),
+      out_pi     => src_out_arr(i).im(35 DOWNTO 0)
     );     
   END GENERATE;
 
diff --git a/libraries/dsp/correlator/src/vhdl/correlator.vhd b/libraries/dsp/correlator/src/vhdl/correlator.vhd
index f3fbe87be11cb7bd7ff2103809e03181be1e1d68..5855a7b101785d4690f0d03efca9f7cc6f0368fd 100644
--- a/libraries/dsp/correlator/src/vhdl/correlator.vhd
+++ b/libraries/dsp/correlator/src/vhdl/correlator.vhd
@@ -41,13 +41,14 @@ ENTITY correlator IS
 
     snk_in_arr     : IN  t_dp_sosi_arr(g_nof_inputs-1 DOWNTO 0);
 
-
+    src_out        : OUT t_dp_sosi
   );
 END correlator;
 
 ARCHITECTURE str OF correlator IS
 
-  SIGNAL corr_permutator_src_out_2arr_2 : t_dp_sosi_2arr_2(g_nof_inputs*(g_nof_inputs+1)/2-1 DOWNTO 0) -- Array of pairs
+  SIGNAL corr_permutator_src_out_2arr_2 : t_dp_sosi_2arr_2(g_nof_inputs*(g_nof_inputs+1)/2-1 DOWNTO 0); -- Array of pairs
+  SIGNAL corr_folder_src_out_2arr_2     : t_dp_sosi_2arr_2(g_nof_inputs*(g_nof_inputs+1)/2-1 DOWNTO 0); -- Array of pairs, not folded yet
   SIGNAL corr_multiplier_src_out_arr    : t_dp_sosi_arr(g_nof_mults-1 DOWNTO 0);
   SIGNAL corr_accumulator_src_out_arr   : t_dp_sosi_arr(g_nof_mults-1 DOWNTO 0);
 
@@ -94,8 +95,10 @@ BEGIN
   -----------------------------------------------------------------------------
   u_corr_accumulator : ENTITY work.corr_accumulator
   GENERIC MAP (
-    g_nof_inputs => g_nof_mults
-  )
+    g_nof_inputs        => g_nof_mults,
+    g_accumulator_depth => 10,
+    g_data_w            => 32
+)
   PORT MAP (
     clk            => clk,
     rst            => rst,